private IEnumerable <TestCase> GetAllTestCasesInExecutables(IEnumerable <string> executables) { var allTestCasesInExecutables = new List <TestCase>(); var discoveryActions = executables .OrderBy(e => e) .Select(executable => (Action)(() => { var testCases = GetTestCasesOfExecutable(executable, _settings.Clone(), _logger, () => _canceled); lock (allTestCasesInExecutables) { allTestCasesInExecutables.AddRange(testCases); } })) .ToArray(); Utils.SpawnAndWait(discoveryActions); if (_canceled) { allTestCasesInExecutables.Clear(); } return(allTestCasesInExecutables); }
private void RunTests(IEnumerable <TestCase> testCasesToRun, List <Thread> threads, bool isBeingDebugged, IDebuggedProcessLauncher debuggedLauncher, IProcessExecutor executor) { TestCase[] testCasesToRunAsArray = testCasesToRun as TestCase[] ?? testCasesToRun.ToArray(); ITestsSplitter splitter = GetTestsSplitter(testCasesToRunAsArray); List <List <TestCase> > splittedTestCasesToRun = splitter.SplitTestcases(); _logger.LogInfo("Executing tests on " + splittedTestCasesToRun.Count + " threads"); _logger.DebugInfo("Note that no test output will be shown on the test console when executing tests concurrently!"); int threadId = 0; foreach (List <TestCase> testcases in splittedTestCasesToRun) { var runner = new PreparingTestRunner(threadId++, _frameworkReporter, _logger, _settings.Clone(), _schedulingAnalyzer); _testRunners.Add(runner); var thread = new Thread( () => runner.RunTests(testcases, isBeingDebugged, debuggedLauncher, executor)) { Name = $"GTA Testrunner {threadId}" }; threads.Add(thread); thread.Start(); } }
public void DiscoverTests(IEnumerable <string> executables, ITestFrameworkReporter reporter) { var discoveryActions = executables .Select(e => (Action)(() => DiscoverTests(e, reporter, _settings.Clone(), _logger, _diaResolverFactory, _processExecutorFactory))) .ToArray(); Utils.SpawnAndWait(discoveryActions); }
private void RunTests(IEnumerable <TestCase> testCasesToRun, List <Thread> threads, bool isBeingDebugged, IDebuggedProcessExecutorFactory processExecutorFactory) { TestCase[] testCasesToRunAsArray = testCasesToRun as TestCase[] ?? testCasesToRun.ToArray(); ITestsSplitter splitter = GetTestsSplitter(testCasesToRunAsArray); List <List <TestCase> > splittedTestCasesToRun = splitter.SplitTestcases(); _logger.LogInfo(string.Format(Resources.ThreadExecutionMessage, splittedTestCasesToRun.Count)); _logger.DebugInfo(Resources.NoTestOutputShown); int threadId = 0; foreach (List <TestCase> testcases in splittedTestCasesToRun) { var runner = new PreparingTestRunner(threadId++, _frameworkReporter, _logger, _settings.Clone(), _schedulingAnalyzer); _testRunners.Add(runner); var thread = new Thread( () => runner.RunTests(testcases, isBeingDebugged, processExecutorFactory)) { Name = $"GTA Testrunner {threadId}" }; threads.Add(thread); thread.Start(); } }
public void DiscoverTests(IEnumerable <string> executables, ITestFrameworkReporter reporter) { if (_settings.UseNewTestExecutionFramework) { var discoveryActions = executables .Select(e => (Action)(() => DiscoverTests(e, reporter, _settings.Clone(), _logger, _diaResolverFactory))) .ToArray(); Utils.SpawnAndWait(discoveryActions); } else { foreach (string executable in executables) { _settings.ExecuteWithSettingsForExecutable(executable, () => { if (VerifyExecutableTrust(executable, _logger) && IsGoogleTestExecutable(executable, _settings.TestDiscoveryRegex, _logger)) { IList <TestCase> testCases = GetTestsFromExecutable(executable); reporter.ReportTestsFound(testCases); } }, _logger); } } }