/// <summary> /// Generates TestResults based on Boost Test result output. /// </summary> /// <param name="testRun">The tests which have been executed in the prior test run.</param> /// <param name="start">The test execution start time.</param> /// <param name="end">The test execution end time.</param> /// <param name="settings">boost test adapter settings</param> /// <returns>A Visual Studio TestResult related to the executed test.</returns> private static IEnumerable<VSTestResult> GenerateTestResults(TestRun testRun, DateTimeOffset start, DateTimeOffset end, BoostTestAdapterSettings settings) { TestResultCollection results = new TestResultCollection(); try { results.Parse(testRun.Arguments, settings); } catch (XmlException) { string text = File.ReadAllText(testRun.Arguments.ReportFile); if (text.Trim().StartsWith(TestNotFound, StringComparison.Ordinal)) { return testRun.Tests.Select(GenerateNotFoundResult); } else { // Re-throw the exception throw; } } return testRun.Tests. Select(test => { // Locate the test result associated to the current test Boost.Results.TestResult result = results[test.FullyQualifiedName]; if (result != null) { // Convert the Boost.Test.Result data structure into an equivalent Visual Studio model VSTestResult vsResult = result.AsVSTestResult(test); vsResult.StartTime = start; vsResult.EndTime = end; return vsResult; } return null; }). Where(result => (result != null)); }
/// <summary> /// Generates TestResults based on Boost Test result output. /// </summary> /// <param name="testRun">The tests which have been executed in the prior test run.</param> /// <param name="start">The test execution start time.</param> /// <param name="settings">boost test adapter settings</param> /// <returns>A Visual Studio TestResult related to the executed test.</returns> private static IEnumerable<VSTestResult> GenerateTestResults(TestRun testRun, DateTimeOffset start, BoostTestAdapterSettings settings) { return GenerateTestResults(testRun, start, DateTimeOffset.Now, settings); }
/// <summary> /// Generates TestResults based on Boost Test result output. /// </summary> /// <param name="testRun">The tests which have been executed in the prior test run.</param> /// <param name="start">The test execution start time.</param> /// <param name="end">The test execution end time.</param> /// <param name="settings">boost test adapter settings</param> /// <returns>A Visual Studio TestResult related to the executed test.</returns> private static IEnumerable<VSTestResult> GenerateTestResults(TestRun testRun, DateTimeOffset start, DateTimeOffset end, BoostTestAdapterSettings settings) { TestResultCollection results = new TestResultCollection(); try { results.Parse(testRun.Arguments, settings); } catch (XmlException) { string text = ((File.Exists(testRun.Arguments.ReportFile)) ? File.ReadAllText(testRun.Arguments.ReportFile) : string.Empty); if (text.Trim().StartsWith(TestNotFound, StringComparison.Ordinal)) { return testRun.Tests.Select(GenerateNotFoundResult); } else { // Represent result parsing exception as a test fatal error if (string.IsNullOrEmpty(text)) { text = "Boost Test result file was not found or is empty."; } return testRun.Tests.Select(test => { Boost.Results.TestResult exception = new Boost.Results.TestResult(results); exception.Unit = Boost.Test.TestUnit.FromFullyQualifiedName(test.FullyQualifiedName); // NOTE Divide by 10 to compensate for duration calculation described in VSTestResult.AsVSTestResult(this Boost.Results.TestResult, VSTestCase) exception.Duration = ((ulong)(end - start).Ticks) / 10; exception.Result = TestResultType.Failed; exception.LogEntries.Add(new Boost.Results.LogEntryTypes.LogEntryFatalError(text)); return GenerateResult(test, exception, start, end); }); } } return testRun.Tests. Select(test => { // Locate the test result associated to the current test Boost.Results.TestResult result = results[test.FullyQualifiedName]; return (result == null) ? null : GenerateResult(test, result, start, end); }). Where(result => (result != null)); }
/// <summary> /// Executes the provided test batch /// </summary> /// <param name="run">The test batch which will be executed.</param> /// <param name="runContext">The RunContext for this TestCase. Determines whether the test should be debugged or not.</param> /// <param name="frameworkHandle">The FrameworkHandle for this test execution instance.</param> /// <returns></returns> private static bool ExecuteTests(TestRun run, IRunContext runContext, IFrameworkHandle frameworkHandle) { if (run.Runner != null) { if (runContext.IsBeingDebugged) { run.Debug(frameworkHandle); } else { run.Run(); } } else { Logger.Error("No suitable executor found for [{0}].", string.Join(", ", run.Tests)); } return run.Runner != null; }
/// <summary> /// Executes the provided test batch /// </summary> /// <param name="run">The test batch which will be executed.</param> /// <param name="runContext">The RunContext for this TestCase. Determines whether the test should be debugged or not.</param> /// <param name="frameworkHandle">The FrameworkHandle for this test execution instance.</param> /// <returns></returns> private static bool ExecuteTests(TestRun run, IRunContext runContext, IFrameworkHandle frameworkHandle) { if (run.Runner != null) { using (var context = CreateExecutionContext(runContext, frameworkHandle)) { run.Execute(context); } } else { Logger.Error("No suitable executor found for [{0}].", string.Join(", ", run.Tests)); } return run.Runner != null; }