No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TestResultSerializer.cs 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 double endTimeAO;
  25. [SerializeField] private string status;
  26. [SerializeField] public string uniqueName;
  27. public static TestResultSerializer MakeFromTestResult(ITestResult result)
  28. {
  29. var wrapper = new TestResultSerializer();
  30. wrapper.id = result.Test.Id;
  31. wrapper.fullName = result.FullName;
  32. wrapper.status = result.ResultState.Status.ToString();
  33. wrapper.label = result.ResultState.Label;
  34. wrapper.site = result.ResultState.Site.ToString();
  35. wrapper.output = result.Output;
  36. wrapper.duration = result.Duration;
  37. wrapper.stacktrace = result.StackTrace;
  38. wrapper.message = result.Message;
  39. wrapper.startTimeAO = result.StartTime.ToOADate();
  40. wrapper.endTimeAO = result.EndTime.ToOADate();
  41. wrapper.uniqueName = result.Test.GetUniqueName();
  42. return wrapper;
  43. }
  44. public void RestoreTestResult(TestResult result)
  45. {
  46. var resultState = new ResultState((TestStatus)Enum.Parse(typeof(TestStatus), status), label,
  47. (FailureSite)Enum.Parse(typeof(FailureSite), site));
  48. var baseType = result.GetType().BaseType;
  49. baseType.GetField("_resultState", flags).SetValue(result, resultState);
  50. baseType.GetField("_output", flags).SetValue(result, new StringBuilder(output));
  51. baseType.GetField("_duration", flags).SetValue(result, duration);
  52. if (!string.IsNullOrEmpty(message))
  53. {
  54. baseType.GetField("_message", flags).SetValue(result, message);
  55. }
  56. baseType.GetField("_stackTrace", flags).SetValue(result, stacktrace);
  57. baseType.GetProperty("StartTime", flags)
  58. .SetValue(result, DateTime.FromOADate(startTimeAO), null);
  59. baseType.GetProperty("EndTime", flags)
  60. .SetValue(result, DateTime.FromOADate(endTimeAO), null);
  61. }
  62. public bool IsPassed()
  63. {
  64. return status == TestStatus.Passed.ToString();
  65. }
  66. }
  67. }