private void RunTestCases( IEnumerable <TestCase> tests, IRunContext runContext, IFrameworkHandle frameworkHandle ) { bool codeCoverage = EnableCodeCoverage(runContext); string covPath = null; if (codeCoverage) { covPath = GetCoveragePath(tests); } // .py file path -> project settings var sourceToSettings = GetSourceToSettings(runContext.RunSettings); foreach (var testGroup in tests.GroupBy(x => sourceToSettings[x.CodeFilePath])) { if (_cancelRequested.WaitOne(0)) { break; } using (var runner = new TestRunner( frameworkHandle, runContext, testGroup, covPath, testGroup.Key, _app, _cancelRequested )) { runner.Run(); } } if (codeCoverage) { if (File.Exists(covPath + ".xml")) { var set = new AttachmentSet(PythonCodeCoverageUri, "CodeCoverage"); set.Attachments.Add( new UriDataAttachment(new Uri(covPath + ".xml"), "Coverage Data") ); frameworkHandle.RecordAttachments(new[] { set }); File.Delete(covPath); } else { frameworkHandle.SendMessage(TestMessageLevel.Warning, Strings.Test_NoCoverageProduced); } } }
internal static void AttachCoverageResults(IFrameworkHandle frameworkHandle, string covPath) { if (File.Exists(covPath + ".xml")) { var set = new AttachmentSet(PythonConstants.PythonCodeCoverageUri, "CodeCoverage"); set.Attachments.Add( new UriDataAttachment(new Uri(covPath + ".xml"), "Coverage Data") ); frameworkHandle.RecordAttachments(new[] { set }); File.Delete(covPath); } else { frameworkHandle.SendMessage(TestMessageLevel.Warning, Strings.Test_NoCoverageProduced); } }