private async Task <IEnumerable <TestResult> > Run_Internal(IEnumerable <TestCase> testCollection) { HostApp?.RaiseTestRunStarted(testCollection); var t = tcs = new CancellationTokenSource(); Status = $"Running tests..."; OnPropertyChanged(nameof(Status)); DiagnosticsInfo = ""; OnPropertyChanged(nameof(DiagnosticsInfo)); foreach (var item in testCollection) { tests[item.Id].Result = null; } OnPropertyChanged(nameof(TestStatus)); OnPropertyChanged(nameof(NotRunTests)); OnPropertyChanged(nameof(PassedTests)); OnPropertyChanged(nameof(FailedTests)); OnPropertyChanged(nameof(SkippedTests)); OnPropertyChanged(nameof(Percentage)); results = new List <TestResult>(); if (!string.IsNullOrEmpty(Settings.ProgressLogPath)) { var s = System.IO.File.OpenWrite(Settings.ProgressLogPath); logOutput = new System.IO.StreamWriter(s); // Settings.ProgressLogPath, true); logOutput.WriteLine("*************************************************"); logOutput.WriteLine($"* Starting Test Run @ {DateTime.Now}"); logOutput.WriteLine("*************************************************"); } if (!string.IsNullOrEmpty(Settings.TrxOutputPath)) { trxWriter = new TrxWriter(Settings.TrxOutputPath); trxWriter.InitializeReport(); } DateTime start = DateTime.Now; Logger.Log($"STARTING TESTRUN {testCollection.Count()} Tests"); var task = testRunner.Run(testCollection, t.Token); OnPropertyChanged(nameof(IsRunning)); try { await task; if (t.IsCancellationRequested) { Status = $"Test run canceled."; } else { Status = $"Test run completed."; } } catch (System.Exception ex) { Status = $"Test run failed to run: {ex.Message}"; } DateTime end = DateTime.Now; CurrentTestRunning = null; OnPropertyChanged(nameof(CurrentTestRunning)); if (logOutput != null) { Log("*************************************************"); Log(Status); Log(TestStatus); Log("*************************************************\n\n"); logOutput.Dispose(); logOutput = null; } if (trxWriter != null) { trxWriter.FinalizeReport(); trxWriter = null; } DiagnosticsInfo += $"\nLast run duration: {(end - start).ToString("c")}"; DiagnosticsInfo += $"\n{results.Where(a => a.Outcome == TestOutcome.Passed).Count()} passed - {results.Where(a => a.Outcome == TestOutcome.Failed).Count()} failed"; if (Settings.ProgressLogPath != null) { DiagnosticsInfo += $"\nLog: {Settings.ProgressLogPath}"; } if (Settings.TrxOutputPath != null) { DiagnosticsInfo += $"\nTRX Report: {Settings.TrxOutputPath}"; } OnPropertyChanged(nameof(DiagnosticsInfo)); OnPropertyChanged(nameof(IsRunning)); OnPropertyChanged(nameof(Status)); HostApp?.RaiseTestRunCompleted(results); Logger.Log($"COMPLETED TESTRUN Total:{results.Count()} Failed:{results.Where(a => a.Outcome == TestOutcome.Failed).Count()} Passed:{results.Where(a => a.Outcome == TestOutcome.Passed).Count()} Skipped:{results.Where(a => a.Outcome == TestOutcome.Skipped).Count()}"); if (Settings.TerminateAfterExecution) { Terminate(); } return(results); }