84 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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();
 | |
|         }
 | |
|     }
 | |
| }
 |