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.

UnityTestAssemblyRunner.cs 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Reflection;
  7. using NUnit;
  8. using NUnit.Framework.Interfaces;
  9. using NUnit.Framework.Internal;
  10. using UnityEngine.TestTools;
  11. using UnityEngine.TestTools.NUnitExtensions;
  12. namespace UnityEngine.TestRunner.NUnitExtensions.Runner
  13. {
  14. internal interface IUnityTestAssemblyRunner
  15. {
  16. ITest LoadedTest { get; }
  17. ITestResult Result { get; }
  18. bool IsTestLoaded { get; }
  19. bool IsTestRunning { get; }
  20. bool IsTestComplete { get; }
  21. UnityWorkItem TopLevelWorkItem { get; set; }
  22. UnityTestExecutionContext GetCurrentContext();
  23. ITest Load(Assembly[] assemblies, TestPlatform testPlatform, IDictionary<string, object> settings);
  24. IEnumerable Run(ITestListener listener, ITestFilter filter);
  25. void StopRun();
  26. }
  27. internal class UnityTestAssemblyRunner : IUnityTestAssemblyRunner
  28. {
  29. private readonly UnityTestAssemblyBuilder unityBuilder;
  30. private readonly WorkItemFactory m_Factory;
  31. protected UnityTestExecutionContext Context { get; set; }
  32. public UnityTestExecutionContext GetCurrentContext()
  33. {
  34. return UnityTestExecutionContext.CurrentContext;
  35. }
  36. protected IDictionary<string, object> Settings { get; set; }
  37. public ITest LoadedTest { get; protected set; }
  38. public ITestResult Result
  39. {
  40. get { return TopLevelWorkItem == null ? null : TopLevelWorkItem.Result; }
  41. }
  42. public bool IsTestLoaded
  43. {
  44. get { return LoadedTest != null; }
  45. }
  46. public bool IsTestRunning
  47. {
  48. get { return TopLevelWorkItem != null && TopLevelWorkItem.State == NUnit.Framework.Internal.Execution.WorkItemState.Running; }
  49. }
  50. public bool IsTestComplete
  51. {
  52. get { return TopLevelWorkItem != null && TopLevelWorkItem.State == NUnit.Framework.Internal.Execution.WorkItemState.Complete; }
  53. }
  54. public UnityTestAssemblyRunner(UnityTestAssemblyBuilder builder, WorkItemFactory factory)
  55. {
  56. unityBuilder = builder;
  57. m_Factory = factory;
  58. Context = new UnityTestExecutionContext();
  59. }
  60. public ITest Load(Assembly[] assemblies, TestPlatform testPlatform, IDictionary<string, object> settings)
  61. {
  62. Settings = settings;
  63. if (settings.ContainsKey(FrameworkPackageSettings.RandomSeed))
  64. Randomizer.InitialSeed = (int)settings[FrameworkPackageSettings.RandomSeed];
  65. var tree = unityBuilder.Build(assemblies, Enumerable.Repeat(testPlatform, assemblies.Length).ToArray(), settings);
  66. return LoadedTest = tree;
  67. }
  68. public IEnumerable Run(ITestListener listener, ITestFilter filter)
  69. {
  70. TopLevelWorkItem = m_Factory.Create(LoadedTest, filter);
  71. TopLevelWorkItem.InitializeContext(Context);
  72. UnityTestExecutionContext.CurrentContext = Context;
  73. Context.Listener = listener;
  74. return TopLevelWorkItem.Execute();
  75. }
  76. public UnityWorkItem TopLevelWorkItem { get; set; }
  77. public void StopRun()
  78. {
  79. if (IsTestRunning)
  80. {
  81. TopLevelWorkItem.Cancel(false);
  82. }
  83. }
  84. }
  85. }