2023-06-21 13:28:15 -04:00
|
|
|
using System;
|
|
|
|
using System.IO;
|
|
|
|
using System.Xml;
|
|
|
|
using NUnit.Framework.Interfaces;
|
|
|
|
using UnityEditor.TestTools.TestRunner.Api;
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
namespace UnityEditor.TestTools.TestRunner.CommandLineTest
|
|
|
|
{
|
|
|
|
internal class ResultsWriter
|
|
|
|
{
|
|
|
|
private const string k_nUnitVersion = "3.5.0.0";
|
|
|
|
|
|
|
|
private const string k_TestRunNode = "test-run";
|
|
|
|
private const string k_Id = "id";
|
|
|
|
private const string k_Testcasecount = "testcasecount";
|
|
|
|
private const string k_Result = "result";
|
|
|
|
private const string k_Total = "total";
|
|
|
|
private const string k_Passed = "passed";
|
|
|
|
private const string k_Failed = "failed";
|
|
|
|
private const string k_Inconclusive = "inconclusive";
|
|
|
|
private const string k_Skipped = "skipped";
|
|
|
|
private const string k_Asserts = "asserts";
|
|
|
|
private const string k_EngineVersion = "engine-version";
|
|
|
|
private const string k_ClrVersion = "clr-version";
|
|
|
|
private const string k_StartTime = "start-time";
|
|
|
|
private const string k_EndTime = "end-time";
|
|
|
|
private const string k_Duration = "duration";
|
|
|
|
|
|
|
|
private const string k_TimeFormat = "u";
|
|
|
|
|
|
|
|
public void WriteResultToFile(ITestResultAdaptor result, string filePath)
|
|
|
|
{
|
|
|
|
Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Saving results to: {0}", filePath);
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if (!Directory.Exists(filePath))
|
|
|
|
{
|
|
|
|
CreateDirectory(filePath);
|
|
|
|
}
|
|
|
|
|
|
|
|
using (var fileStream = File.CreateText(filePath))
|
|
|
|
{
|
|
|
|
WriteResultToStream(result, fileStream);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
Debug.LogError("Saving result file failed.");
|
|
|
|
Debug.LogException(ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CreateDirectory(string filePath)
|
|
|
|
{
|
|
|
|
var driectoryPath = Path.GetDirectoryName(filePath);
|
|
|
|
if (!String.IsNullOrEmpty(driectoryPath))
|
|
|
|
{
|
|
|
|
Directory.CreateDirectory(driectoryPath);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void WriteResultToStream(ITestResultAdaptor result, StreamWriter streamWriter, XmlWriterSettings settings = null)
|
|
|
|
{
|
|
|
|
settings = settings ?? new XmlWriterSettings();
|
|
|
|
settings.Indent = true;
|
|
|
|
settings.NewLineOnAttributes = false;
|
|
|
|
|
|
|
|
using (var xmlWriter = XmlWriter.Create(streamWriter, settings))
|
|
|
|
{
|
|
|
|
WriteResultsToXml(result, xmlWriter);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void WriteResultsToXml(ITestResultAdaptor result, XmlWriter xmlWriter)
|
|
|
|
{
|
|
|
|
// XML format as specified at https://github.com/nunit/docs/wiki/Test-Result-XML-Format
|
|
|
|
|
|
|
|
var testRunNode = new TNode(k_TestRunNode);
|
|
|
|
|
|
|
|
testRunNode.AddAttribute(k_Id, "2");
|
|
|
|
testRunNode.AddAttribute(k_Testcasecount, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString());
|
|
|
|
testRunNode.AddAttribute(k_Result, result.ResultState.ToString());
|
|
|
|
testRunNode.AddAttribute(k_Total, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString());
|
|
|
|
testRunNode.AddAttribute(k_Passed, result.PassCount.ToString());
|
|
|
|
testRunNode.AddAttribute(k_Failed, result.FailCount.ToString());
|
|
|
|
testRunNode.AddAttribute(k_Inconclusive, result.InconclusiveCount.ToString());
|
|
|
|
testRunNode.AddAttribute(k_Skipped, result.SkipCount.ToString());
|
|
|
|
testRunNode.AddAttribute(k_Asserts, result.AssertCount.ToString());
|
|
|
|
testRunNode.AddAttribute(k_EngineVersion, k_nUnitVersion);
|
|
|
|
testRunNode.AddAttribute(k_ClrVersion, Environment.Version.ToString());
|
|
|
|
testRunNode.AddAttribute(k_StartTime, result.StartTime.ToString(k_TimeFormat));
|
|
|
|
testRunNode.AddAttribute(k_EndTime, result.EndTime.ToString(k_TimeFormat));
|
|
|
|
testRunNode.AddAttribute(k_Duration, result.Duration.ToString());
|
|
|
|
|
|
|
|
var resultNode = result.ToXml();
|
|
|
|
testRunNode.ChildNodes.Add(resultNode);
|
|
|
|
|
|
|
|
testRunNode.WriteTo(xmlWriter);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|