in src/testing/runner/Program.cs [100:199]
private static bool ParseFilesAndFilterArgs(string[] args, out IList<FileInfo> files, out IList<string> filters)
{
var filesAsList = new List<FileInfo>();
files = filesAsList;
filters = new List<string>();
for (int i = 0; i < args.Length; i++)
{
if (args[i] == "--file" || args[i] == "--files")
{
if (i + 1 >= args.Length || args[i + 1].StartsWith("--"))
{
Console.WriteLine($"Expected a file or pattern after '{args[i]}'.");
return false;
}
do
{
i++;
var pattern = args[i];
var found = FindFiles(pattern);
if (found.Count() == 0)
{
Console.WriteLine($"No files found for pattern '{pattern}'.");
return false;
}
filesAsList.AddRange(found);
}
while (i + 1 < args.Length && !args[i + 1].StartsWith("--"));
}
else if (args[i] == "--search")
{
if (i + 1 >= args.Length || args[i + 1].StartsWith("--"))
{
Console.WriteLine($"Expected text after '{args[i]}'.");
return false;
}
do
{
i++;
filters.Add(args[i]);
}
while (i + 1 < args.Length && !args[i + 1].StartsWith("--"));
}
else if (args[i] == "--test" || args[i] == "--tests")
{
if (i + 1 >= args.Length || args[i + 1].StartsWith("--"))
{
Console.WriteLine($"Expected text after '{args[i]}'.");
return false;
}
do
{
i++;
filters.Add(args[i]);
}
while (i + 1 < args.Length && !args[i + 1].StartsWith("--"));
}
else if (args[i] == "--contains")
{
if (i + 1 >= args.Length || args[i + 1].StartsWith("--"))
{
Console.WriteLine($"Expected text after '{args[i]}'.");
return false;
}
do
{
i++;
filters.Add($"+{args[i]}"); // `+` means MUST contain text
}
while (i + 1 < args.Length && !args[i + 1].StartsWith("--"));
}
else if (args[i] == "--remove")
{
if (i + 1 >= args.Length || args[i + 1].StartsWith("--"))
{
Console.WriteLine($"Expected text after '{args[i]}'.");
return false;
}
do
{
i++;
filters.Add($"-{args[i]}"); // `-` means MUST NOT contain text
}
while (i + 1 < args.Length && !args[i + 1].StartsWith("--"));
}
else
{
Console.WriteLine($"Invalid command line argument at '{args[i]}'.");
return false;
}
}
return true;
}