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}