A game about forced loneliness, made by TACStudios
1using System; 2using System.Reflection; 3using System.Text; 4using NUnit.Framework.Interfaces; 5using NUnit.Framework.Internal; 6using UnityEngine; 7using UnityEngine.TestRunner.NUnitExtensions; 8 9namespace UnityEditor.TestTools.TestRunner 10{ 11 [Serializable] 12 internal class TestResultSerializer 13 { 14 private static readonly BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | 15 BindingFlags.Instance | BindingFlags.FlattenHierarchy; 16 17 [SerializeField] public string id; 18 19 [SerializeField] public string fullName; 20 21 [SerializeField] private double duration; 22 23 [SerializeField] private string label; 24 25 [SerializeField] private string message; 26 27 [SerializeField] private string output; 28 29 [SerializeField] private string site; 30 31 [SerializeField] private string stacktrace; 32 33 [SerializeField] private double startTimeAO; 34 35 [SerializeField] private double endTimeAO; 36 37 [SerializeField] private string status; 38 39 [SerializeField] public string uniqueName; 40 41 public static TestResultSerializer MakeFromTestResult(ITestResult result) 42 { 43 var wrapper = new TestResultSerializer(); 44 wrapper.id = result.Test.Id; 45 wrapper.fullName = result.FullName; 46 wrapper.status = result.ResultState.Status.ToString(); 47 wrapper.label = result.ResultState.Label; 48 wrapper.site = result.ResultState.Site.ToString(); 49 wrapper.output = result.Output; 50 wrapper.duration = result.Duration; 51 wrapper.stacktrace = result.StackTrace; 52 wrapper.message = result.Message; 53 wrapper.startTimeAO = result.StartTime.ToOADate(); 54 wrapper.endTimeAO = result.EndTime.ToOADate(); 55 wrapper.uniqueName = result.Test.GetUniqueName(); 56 return wrapper; 57 } 58 59 public void RestoreTestResult(TestResult result) 60 { 61 var resultState = new ResultState((TestStatus)Enum.Parse(typeof(TestStatus), status), label, 62 (FailureSite)Enum.Parse(typeof(FailureSite), site)); 63 var baseType = result.GetType().BaseType; 64 baseType.GetField("_resultState", flags).SetValue(result, resultState); 65 baseType.GetField("_output", flags).SetValue(result, new StringBuilder(output)); 66 baseType.GetField("_duration", flags).SetValue(result, duration); 67 if (!string.IsNullOrEmpty(message)) 68 { 69 baseType.GetField("_message", flags).SetValue(result, message); 70 } 71 baseType.GetField("_stackTrace", flags).SetValue(result, stacktrace); 72 baseType.GetProperty("StartTime", flags) 73 .SetValue(result, DateTime.FromOADate(startTimeAO), null); 74 baseType.GetProperty("EndTime", flags) 75 .SetValue(result, DateTime.FromOADate(endTimeAO), null); 76 } 77 78 public bool IsPassed() 79 { 80 return status == TestStatus.Passed.ToString(); 81 } 82 } 83}