TestResultSerializer.cs 2.8 KB

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