84 lines
3.0 KiB
C#
84 lines
3.0 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using NUnit.Framework.Interfaces;
|
|
using NUnit.Framework.Internal;
|
|
using UnityEngine;
|
|
using UnityEngine.TestRunner.NUnitExtensions;
|
|
|
|
namespace UnityEditor.TestTools.TestRunner
|
|
{
|
|
[Serializable]
|
|
internal class TestResultSerializer
|
|
{
|
|
private static readonly BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public |
|
|
BindingFlags.Instance | BindingFlags.FlattenHierarchy;
|
|
|
|
[SerializeField] public string id;
|
|
|
|
[SerializeField] public string fullName;
|
|
|
|
[SerializeField] private double duration;
|
|
|
|
[SerializeField] private string label;
|
|
|
|
[SerializeField] private string message;
|
|
|
|
[SerializeField] private string output;
|
|
|
|
[SerializeField] private string site;
|
|
|
|
[SerializeField] private string stacktrace;
|
|
|
|
[SerializeField] private double startTimeAO;
|
|
|
|
[SerializeField] private double endTimeAO;
|
|
|
|
[SerializeField] private string status;
|
|
|
|
[SerializeField] public string uniqueName;
|
|
|
|
public static TestResultSerializer MakeFromTestResult(ITestResult result)
|
|
{
|
|
var wrapper = new TestResultSerializer();
|
|
wrapper.id = result.Test.Id;
|
|
wrapper.fullName = result.FullName;
|
|
wrapper.status = result.ResultState.Status.ToString();
|
|
wrapper.label = result.ResultState.Label;
|
|
wrapper.site = result.ResultState.Site.ToString();
|
|
wrapper.output = result.Output;
|
|
wrapper.duration = result.Duration;
|
|
wrapper.stacktrace = result.StackTrace;
|
|
wrapper.message = result.Message;
|
|
wrapper.startTimeAO = result.StartTime.ToOADate();
|
|
wrapper.endTimeAO = result.EndTime.ToOADate();
|
|
wrapper.uniqueName = result.Test.GetUniqueName();
|
|
return wrapper;
|
|
}
|
|
|
|
public void RestoreTestResult(TestResult result)
|
|
{
|
|
var resultState = new ResultState((TestStatus)Enum.Parse(typeof(TestStatus), status), label,
|
|
(FailureSite)Enum.Parse(typeof(FailureSite), site));
|
|
var baseType = result.GetType().BaseType;
|
|
baseType.GetField("_resultState", flags).SetValue(result, resultState);
|
|
baseType.GetField("_output", flags).SetValue(result, new StringBuilder(output));
|
|
baseType.GetField("_duration", flags).SetValue(result, duration);
|
|
if (!string.IsNullOrEmpty(message))
|
|
{
|
|
baseType.GetField("_message", flags).SetValue(result, message);
|
|
}
|
|
baseType.GetField("_stackTrace", flags).SetValue(result, stacktrace);
|
|
baseType.GetProperty("StartTime", flags)
|
|
.SetValue(result, DateTime.FromOADate(startTimeAO), null);
|
|
baseType.GetProperty("EndTime", flags)
|
|
.SetValue(result, DateTime.FromOADate(endTimeAO), null);
|
|
}
|
|
|
|
public bool IsPassed()
|
|
{
|
|
return status == TestStatus.Passed.ToString();
|
|
}
|
|
}
|
|
}
|