in BoostTestAdapter/BoostTestExecutor.cs [514:565]
private static IEnumerable<VSTestResult> GenerateTestResults(TestRun testRun, DateTimeOffset start, DateTimeOffset end, BoostTestAdapterSettings settings)
{
IDictionary<string, BoostTestResult> results;
try
{
results = BoostTestResultParser.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 = Resources.ResultFileNotFound;
}
return testRun.Tests.Select(test => {
var exception = new BoostTestResult();
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()
{
Detail = text
});
return GenerateResult(test, exception, start, end);
});
}
}
return testRun.Tests.
Select(test =>
{
// Locate the test result associated to the current test
BoostTestResult result = null;
return (results.TryGetValue(test.FullyQualifiedName, out result)) ? GenerateResult(test, result, start, end) : null;
}).
Where(result => (result != null));
}