A game about forced loneliness, made by TACStudios
1using System; 2using System.Linq; 3using NUnit.Framework.Interfaces; 4using UnityEditor.Events; 5using UnityEditor.SceneManagement; 6using UnityEngine; 7using UnityEngine.SceneManagement; 8using UnityEngine.TestRunner.NUnitExtensions.Runner; 9using UnityEngine.TestTools; 10using UnityEngine.TestTools.NUnitExtensions; 11using UnityEngine.TestTools.TestRunner; 12using UnityEngine.TestTools.Utils; 13 14namespace UnityEditor.TestTools.TestRunner 15{ 16 internal abstract class RuntimeTestLauncherBase : TestLauncherBase 17 { 18 internal readonly PlaymodeTestsControllerSettings m_Settings; 19 20 protected RuntimeTestLauncherBase(PlaymodeTestsControllerSettings mSettings) 21 { 22 m_Settings = mSettings; 23 } 24 25 protected UnityTestAssemblyRunner LoadTests(ITestFilter filter) 26 { 27 var editorLoadedTestAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); 28 var assembliesWithTests = editorLoadedTestAssemblyProvider.GetAssembliesGroupedByType(TestPlatform.PlayMode).Select(x => x.Assembly.GetName().Name).ToList(); 29 30 var nUnitTestAssemblyRunner = new UnityTestAssemblyRunner(new UnityTestAssemblyBuilder(m_Settings.orderedTestNames, m_Settings.randomOrderSeed), null, UnityTestExecutionContext.CurrentContext); 31 var assemblyProvider = new PlayerTestAssemblyProvider(new AssemblyLoadProxy(), assembliesWithTests); 32 nUnitTestAssemblyRunner.Load(assemblyProvider.GetUserAssemblies().Select(a => a.Assembly).ToArray(), TestPlatform.PlayMode, UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(TestPlatform.PlayMode)); 33 return nUnitTestAssemblyRunner; 34 } 35 36 protected static void ReopenOriginalScene(string originalSceneName) 37 { 38 EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects); 39 if (!string.IsNullOrEmpty(originalSceneName)) 40 { 41 EditorSceneManager.OpenScene(originalSceneName); 42 } 43 } 44 } 45 46 internal static class PlaymodeTestsControllerExtensions 47 { 48 internal static T AddEventHandlerMonoBehaviour<T>(this PlaymodeTestsController controller) where T : MonoBehaviour, ITestRunnerListener 49 { 50 var eventHandler = controller.gameObject.AddComponent<T>(); 51 SetListeners(controller, eventHandler); 52 return eventHandler; 53 } 54 55 internal static T AddEventHandlerScriptableObject<T>(this PlaymodeTestsController controller) where T : ScriptableObject, ITestRunnerListener 56 { 57 var eventListener = ScriptableObject.CreateInstance<T>(); 58 AddEventHandlerScriptableObject(controller, eventListener); 59 return eventListener; 60 } 61 62 internal static void AddEventHandlerScriptableObject(this PlaymodeTestsController controller, ITestRunnerListener obj) 63 { 64 SetListeners(controller, obj); 65 } 66 67 private static void SetListeners(PlaymodeTestsController controller, ITestRunnerListener eventHandler) 68 { 69 UnityEventTools.AddPersistentListener(controller.testStartedEvent, eventHandler.TestStarted); 70 UnityEventTools.AddPersistentListener(controller.testFinishedEvent, eventHandler.TestFinished); 71 UnityEventTools.AddPersistentListener(controller.runStartedEvent, eventHandler.RunStarted); 72 UnityEventTools.AddPersistentListener(controller.runFinishedEvent, eventHandler.RunFinished); 73 } 74 } 75}