A game about forced loneliness, made by TACStudios
1using System; 2using System.Collections; 3using System.Collections.Generic; 4using System.Linq; 5using System.Reflection; 6using NUnit; 7using NUnit.Framework.Interfaces; 8using NUnit.Framework.Internal; 9using NUnit.Framework.Internal.Execution; 10using UnityEngine.TestTools; 11using UnityEngine.TestTools.NUnitExtensions; 12 13namespace UnityEngine.TestRunner.NUnitExtensions.Runner 14{ 15 internal interface IUnityTestAssemblyRunner 16 { 17 ITest LoadedTest { get; } 18 ITestResult Result { get; } 19 bool IsTestLoaded { get; } 20 bool IsTestRunning { get; } 21 bool IsTestComplete { get; } 22 UnityWorkItem TopLevelWorkItem { get; set; } 23 UnityTestExecutionContext GetCurrentContext(); 24 ITest Load(Assembly[] assemblies, TestPlatform testPlatform, IDictionary<string, object> settings); 25 void LoadTestTree(ITest testTree); 26 IEnumerable Run(ITestListener listener, ITestFilter filter); 27 void StopRun(); 28 } 29 30 internal class UnityTestAssemblyRunner : IUnityTestAssemblyRunner 31 { 32 private readonly UnityTestAssemblyBuilder unityBuilder; 33 private readonly WorkItemFactory m_Factory; 34 35 protected UnityTestExecutionContext Context { get; set; } 36 37 public UnityTestExecutionContext GetCurrentContext() 38 { 39 return UnityTestExecutionContext.CurrentContext; 40 } 41 42 protected IDictionary<string, object> Settings { get; set; } 43 public ITest LoadedTest { get; protected set; } 44 45 public ITestResult Result 46 { 47 get { return TopLevelWorkItem == null ? null : TopLevelWorkItem.Result; } 48 } 49 50 public bool IsTestLoaded 51 { 52 get { return LoadedTest != null; } 53 } 54 55 public bool IsTestRunning 56 { 57 get { return TopLevelWorkItem != null && TopLevelWorkItem.State == WorkItemState.Running; } 58 } 59 public bool IsTestComplete 60 { 61 get { return TopLevelWorkItem != null && TopLevelWorkItem.State == WorkItemState.Complete; } 62 } 63 64 public UnityTestAssemblyRunner(UnityTestAssemblyBuilder builder, WorkItemFactory factory, UnityTestExecutionContext context) 65 { 66 unityBuilder = builder; 67 m_Factory = factory; 68 Context = context; 69 } 70 71 public ITest Load(Assembly[] assemblies, TestPlatform testPlatform, IDictionary<string, object> settings) 72 { 73 // The setting of the TestMode should happen when running tests. 74 if (Context != null) 75 { 76 Context.TestMode = testPlatform; 77 } 78 Settings = settings; 79 80 if (settings.ContainsKey(FrameworkPackageSettings.RandomSeed)) 81 Randomizer.InitialSeed = (int)settings[FrameworkPackageSettings.RandomSeed]; 82 83 var tree = unityBuilder.Build(assemblies, Enumerable.Repeat(testPlatform, assemblies.Length).ToArray(), settings); 84 85 return LoadedTest = tree; 86 } 87 88 public void LoadTestTree(ITest testTree) 89 { 90 LoadedTest = testTree; 91 } 92 93 public IEnumerable Run(ITestListener listener, ITestFilter filter) 94 { 95 TopLevelWorkItem = m_Factory.Create(LoadedTest, filter); 96 TopLevelWorkItem.InitializeContext(Context); 97 Context.Listener = listener; 98 99 return TopLevelWorkItem.Execute(); 100 } 101 102 public UnityWorkItem TopLevelWorkItem { get; set; } 103 104 public void StopRun() 105 { 106 if (IsTestRunning) 107 { 108 TopLevelWorkItem.Cancel(false); 109 } 110 } 111 } 112}