in src/dotnet/Rider.Plugins.TrxPlugin/TrxManager.cs [218:357]
private async Task DisplayResults(CancellationToken ct, List<UnitTestResult> results, string id, string trxFilePath)
{
var existingSession = _mySessionRepository.GetById(new Guid(id));
if (existingSession != null)
{
await _mySessionConductor.CloseSession(existingSession);
}
IUnitTestSession
session = this._mySessionRepository.CreateSession(NothingCriterion.Instance,
Path.GetFileName(trxFilePath), new Guid(id));
HashSet<IUnitTestElement> elements = [];
IUnitTestTransactionCommitResult transactionCommitResult = await this._myElementRepository.BeginTransaction(
(tx =>
{
foreach (var result in results)
{
var outerElement = TestElementCreator(result, tx, elements, id);
if (outerElement is null)
{
continue;
}
var realElement = _myRealElementsFinder.FindRealElement(result);
if (realElement is null)
{
var ns = result.Definition?.TestMethod?.ClassName == null
? UnitTestElementNamespace.Create("")
: UnitTestElementNamespace.Create(
TrxParser.GetNamespaceFromClassName(result.Definition.TestMethod.ClassName));
if (result.Definition?.TestMethod?.ClassName is null)
{
tx.Create(outerElement);
elements.Add(outerElement);
continue;
}
var parent =
new TestElement(TrxParser.GetOnlyClassName(result.Definition?.TestMethod?.ClassName),
ns)
{
NaturalId = UT.CreateId(
_myProjectCache.GetProject(_mySolution.SolutionDirectory.ToString()),
TargetFrameworkId.Default,
this._myTestProvider,
id + result.Definition?.TestMethod?.ClassName +
TrxParser.GetOnlyClassName(result.Definition?.TestMethod?.ClassName))
};
if (parent.Equals(outerElement))
{
tx.Create(outerElement);
elements.Add(outerElement);
continue;
}
if (elements.Contains(parent))
{
outerElement.Parent = elements.FirstOrDefault(e => e.Equals(parent));
}
else
{
tx.Create(parent);
elements.Add(parent);
outerElement.Parent = parent;
}
tx.Create(outerElement);
elements.Add(outerElement);
}
else
{
elements.Add(realElement);
}
}
}), ct);
UT.Facade.Append(
new TestElementCriterion(elements)).To
.Session(session);
foreach (var element in elements)
{
var result = results.FirstOrDefault(r =>
(TrxParser.GetNamespaceFromClassName(r.Definition?.TestMethod?.ClassName ?? "")) ==
element.GetNamespace().ToString() &&
r.TestName == element.ShortName);
if (result == null)
{
continue;
}
switch (result.Outcome?.ToLower())
{
case null:
break;
case "passed":
_myResultManager.TestFinishing(element, session, UnitTestStatus.Success, null,
TimeSpan.Parse(result.Duration ?? "0", CultureInfo.InvariantCulture));
break;
case "failed":
_myResultManager.TestFinishing(element, session, UnitTestStatus.Failed,
result.Output?.ErrorInfo?.Message,
TimeSpan.Parse(result.Duration ?? "0", CultureInfo.InvariantCulture));
var exceptions = new List<TestException>
{
new TestException(null, result.Output?.ErrorInfo?.Message,
result.Output?.ErrorInfo?.StackTrace)
};
_myResultManager.TestException(element, session, exceptions);
break;
case "aborted":
_myResultManager.TestFinishing(element, session, UnitTestStatus.Aborted,
null, TimeSpan.Parse(result.Duration ?? "0", CultureInfo.InvariantCulture));
break;
case "running":
_myResultManager.TestFinishing(element, session, UnitTestStatus.Running,
null, TimeSpan.Parse(result.Duration ?? "0", CultureInfo.InvariantCulture));
break;
case "inconclusive":
_myResultManager.TestFinishing(element, session, UnitTestStatus.Inconclusive, null,
TimeSpan.Parse(result.Duration ?? "0", CultureInfo.InvariantCulture));
break;
case "pending":
_myResultManager.TestFinishing(element, session, UnitTestStatus.Pending,
null, TimeSpan.Parse(result.Duration ?? "0", CultureInfo.InvariantCulture));
break;
case "notexecuted":
_myResultManager.TestFinishing(element, session, UnitTestStatus.Ignored,
result.Output?.ErrorInfo?.Message);
break;
default:
_myResultManager.TestFinishing(element, session, UnitTestStatus.Unknown,
null, TimeSpan.Parse(result.Duration ?? "0", CultureInfo.InvariantCulture));
break;
}
_myResultManager.TestOutput(element, session, result.Output?.StdOut, TestOutputType.STDOUT);
}
IUnitTestSessionTreeViewModel sessionTreeViewModel = await this._mySessionConductor.OpenSession(session);
sessionTreeViewModel.Grouping.Value = new UnitTestingGroupingSelection(UnitTestSessionTreeGroupings
.GetSessionProviders(_mySolution, session)
.Where(p => p.Key == "Namespace").ToArray());
}