1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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();
- }
- }
- }
|