File: ObjectModel\TestRunSummary.cs
Web Access
Project: src\src\vstest\src\Microsoft.TestPlatform.Extensions.TrxLogger\Microsoft.TestPlatform.Extensions.TrxLogger.csproj (Microsoft.VisualStudio.TestPlatform.Extensions.Trx.TestLogger)
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using System.Collections.Generic;
using System.Xml;

using Microsoft.TestPlatform.Extensions.TrxLogger.XML;

namespace Microsoft.TestPlatform.Extensions.TrxLogger.ObjectModel;

/// <summary>
/// XML object for saving test summary - Outcome and counts (passed, failed etc)
/// </summary>
internal class TestRunSummary : IXmlTestStore
{
    [StoreXmlSimpleField("Counters/@total")]
    private readonly int _totalTests;
    [StoreXmlSimpleField("Counters/@executed")]
    private readonly int _executedTests;
    [StoreXmlSimpleField("Counters/@passed")]
    private readonly int _passedTests;
    [StoreXmlSimpleField("Counters/@failed")]
    private readonly int _failedTests;
    [StoreXmlSimpleField("Counters/@error")]
    private readonly int _errorTests;
    [StoreXmlSimpleField("Counters/@timeout")]
    private readonly int _timeoutTests;
    [StoreXmlSimpleField("Counters/@aborted")]
    private readonly int _abortedTests;
    [StoreXmlSimpleField("Counters/@inconclusive")]
    private readonly int _inconclusiveTests;
    [StoreXmlSimpleField("Counters/@passedButRunAborted")]
    private readonly int _passedButRunAborted;
    [StoreXmlSimpleField("Counters/@notRunnable")]
    private readonly int _notRunnable;
    [StoreXmlSimpleField("Counters/@notExecuted")]
    private readonly int _notExecuted;
    [StoreXmlSimpleField("Counters/@disconnected")]
    private readonly int _disconnected;
    [StoreXmlSimpleField("Counters/@warning")]
    private readonly int _warning;
    [StoreXmlSimpleField("Counters/@completed")]
    private readonly int _completed;
    [StoreXmlSimpleField("Counters/@inProgress")]
    private readonly int _inProgress;
    [StoreXmlSimpleField("Counters/@pending")]
    private readonly int _pending;
    [StoreXmlSimpleField("@outcome")]
    private readonly TestOutcome _outcome = TestOutcome.Pending;
    [StoreXmlSimpleField("Output/StdOut", "")]
    private readonly string _stdOut = string.Empty;

    private readonly List<RunInfo> _runLevelErrorsAndWarnings;

    private readonly List<CollectorDataEntry> _collectorDataEntries;

    private readonly IList<string> _resultFiles;

    /// <summary>
    /// Initializes a new instance of the <see cref="TestRunSummary"/> class.
    /// </summary>
    /// <param name="total">
    /// The total number of tests discover in this run.
    /// </param>
    /// <param name="executed">
    /// The executed tests.
    /// </param>
    /// <param name="pass">
    /// The pass tests.
    /// </param>
    /// <param name="fail">
    /// The fail tests.
    /// </param>
    /// <param name="outcome">
    /// The outcome.
    /// </param>
    /// <param name="runMessages">
    /// The run messages.
    /// </param>
    /// <param name="stdOut">
    /// The standard out.
    /// </param>
    /// <param name="resultFiles">
    /// The result files.
    /// </param>
    /// <param name="dataCollectors">
    /// The data collectors.
    /// </param>
    public TestRunSummary(
        int total,
        int executed,
        int pass,
        int fail,
        TestOutcome outcome,
        List<RunInfo> runMessages,
        string stdOut,
        IList<string> resultFiles,
        List<CollectorDataEntry> dataCollectors)
    {
        _totalTests = total;
        _executedTests = executed;
        _passedTests = pass;
        _failedTests = fail;
        int countForNonExistingResults = 0; // if below values are assigned constants 0, compiler gives warning CS0414
        _abortedTests = countForNonExistingResults;
        _errorTests = countForNonExistingResults;
        _timeoutTests = countForNonExistingResults;
        _inconclusiveTests = countForNonExistingResults;
        _passedButRunAborted = countForNonExistingResults;
        _notRunnable = countForNonExistingResults;
        _notExecuted = countForNonExistingResults;
        _disconnected = countForNonExistingResults;
        _warning = countForNonExistingResults;
        _completed = countForNonExistingResults;
        _inProgress = countForNonExistingResults;
        _pending = countForNonExistingResults;

        _outcome = outcome;
        _stdOut = stdOut;

        _runLevelErrorsAndWarnings = runMessages;
        _resultFiles = resultFiles;
        _collectorDataEntries = dataCollectors;
    }


    #region IXmlTestStore Members

    /// <summary>
    /// Saves the class under the XmlElement..
    /// </summary>
    /// <param name="element">
    /// The parent xml.
    /// </param>
    /// <param name="parameters">
    /// The parameter
    /// </param>
    public void Save(XmlElement element, XmlTestStoreParameters? parameters)
    {
        XmlPersistence helper = new();
        helper.SaveSingleFields(element, this, parameters);
        helper.SaveIEnumerable(_runLevelErrorsAndWarnings, element, "RunInfos", ".", "RunInfo", parameters);
        helper.SaveIEnumerable(_resultFiles, element, "ResultFiles", "@path", "ResultFile", parameters);
        helper.SaveIEnumerable(_collectorDataEntries, element, "CollectorDataEntries", ".", "Collector", parameters);
    }

    #endregion
}