You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
3.0 KiB
83 lines
3.0 KiB
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(); |
|
} |
|
} |
|
}
|
|
|