TestSuiteResult
Represents the result of running a test suite
using NUnit.Framework.Interfaces;
using System.Collections.Generic;
namespace NUnit.Framework.Internal
{
public class TestSuiteResult : TestResult
{
private int _passCount;
private int _failCount;
private int _warningCount;
private int _skipCount;
private int _inconclusiveCount;
private List<ITestResult> _children;
public override int FailCount => _failCount;
public override int PassCount => _passCount;
public override int WarningCount => _warningCount;
public override int SkipCount => _skipCount;
public override int InconclusiveCount => _inconclusiveCount;
public override bool HasChildren => _children.Count != 0;
public override IEnumerable<ITestResult> Children => _children;
public TestSuiteResult(TestSuite suite)
: base(suite)
{
_children = new List<ITestResult>();
}
public virtual void AddResult(ITestResult result)
{
_children.Add(result);
MergeChildResult(result);
}
private void MergeChildResult(ITestResult childResult)
{
if (base.ResultState != ResultState.Cancelled)
UpdateResultState(childResult.ResultState);
InternalAssertCount += childResult.AssertCount;
_passCount += childResult.PassCount;
_failCount += childResult.FailCount;
_warningCount += childResult.WarningCount;
_skipCount += childResult.SkipCount;
_inconclusiveCount += childResult.InconclusiveCount;
}
private void UpdateResultState(ResultState childResultState)
{
switch (childResultState.Status) {
case TestStatus.Passed:
if (base.ResultState.Status == TestStatus.Inconclusive)
SetResult(ResultState.Success);
break;
case TestStatus.Warning:
if (base.ResultState.Status == TestStatus.Inconclusive || base.ResultState.Status == TestStatus.Passed)
SetResult(childResultState, TestResult.CHILD_WARNINGS_MESSAGE);
break;
case TestStatus.Failed:
if (base.ResultState.Status != TestStatus.Failed)
SetResult(ResultState.ChildFailure, TestResult.CHILD_ERRORS_MESSAGE);
break;
case TestStatus.Skipped:
if (childResultState.Label == "Ignored" && (base.ResultState.Status == TestStatus.Inconclusive || base.ResultState.Status == TestStatus.Passed))
SetResult(ResultState.Ignored, TestResult.CHILD_IGNORE_MESSAGE);
break;
}
}
}
}