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}