first commit
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user