76 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Linq;
 | |
| using NUnit.Framework.Interfaces;
 | |
| using UnityEditor.Events;
 | |
| using UnityEditor.SceneManagement;
 | |
| using UnityEngine;
 | |
| using UnityEngine.SceneManagement;
 | |
| using UnityEngine.TestRunner.NUnitExtensions.Runner;
 | |
| using UnityEngine.TestTools;
 | |
| using UnityEngine.TestTools.NUnitExtensions;
 | |
| using UnityEngine.TestTools.TestRunner;
 | |
| using UnityEngine.TestTools.Utils;
 | |
| 
 | |
| namespace UnityEditor.TestTools.TestRunner
 | |
| {
 | |
|     internal abstract class RuntimeTestLauncherBase : TestLauncherBase
 | |
|     {
 | |
|         internal readonly PlaymodeTestsControllerSettings m_Settings;
 | |
| 
 | |
|         protected RuntimeTestLauncherBase(PlaymodeTestsControllerSettings mSettings)
 | |
|         {
 | |
|             m_Settings = mSettings;
 | |
|         }
 | |
| 
 | |
|         protected UnityTestAssemblyRunner LoadTests(ITestFilter filter)
 | |
|         {
 | |
|             var editorLoadedTestAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy());
 | |
|             var assembliesWithTests = editorLoadedTestAssemblyProvider.GetAssembliesGroupedByType(TestPlatform.PlayMode).Select(x => x.Assembly.GetName().Name).ToList();
 | |
| 
 | |
|             var nUnitTestAssemblyRunner = new UnityTestAssemblyRunner(new UnityTestAssemblyBuilder(m_Settings.orderedTestNames, m_Settings.randomOrderSeed), null, UnityTestExecutionContext.CurrentContext);
 | |
|             var assemblyProvider = new PlayerTestAssemblyProvider(new AssemblyLoadProxy(), assembliesWithTests);
 | |
|             nUnitTestAssemblyRunner.Load(assemblyProvider.GetUserAssemblies().Select(a => a.Assembly).ToArray(), TestPlatform.PlayMode, UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(TestPlatform.PlayMode));
 | |
|             return nUnitTestAssemblyRunner;
 | |
|         }
 | |
| 
 | |
|         protected static void ReopenOriginalScene(string originalSceneName)
 | |
|         {
 | |
|             EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects);
 | |
|             if (!string.IsNullOrEmpty(originalSceneName))
 | |
|             {
 | |
|                 EditorSceneManager.OpenScene(originalSceneName);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     internal static class PlaymodeTestsControllerExtensions
 | |
|     {
 | |
|         internal static T AddEventHandlerMonoBehaviour<T>(this PlaymodeTestsController controller) where T : MonoBehaviour, ITestRunnerListener
 | |
|         {
 | |
|             var eventHandler = controller.gameObject.AddComponent<T>();
 | |
|             SetListeners(controller, eventHandler);
 | |
|             return eventHandler;
 | |
|         }
 | |
| 
 | |
|         internal static T AddEventHandlerScriptableObject<T>(this PlaymodeTestsController controller) where T : ScriptableObject, ITestRunnerListener
 | |
|         {
 | |
|             var eventListener = ScriptableObject.CreateInstance<T>();
 | |
|             AddEventHandlerScriptableObject(controller, eventListener);
 | |
|             return eventListener;
 | |
|         }
 | |
| 
 | |
|         internal static void AddEventHandlerScriptableObject(this PlaymodeTestsController controller, ITestRunnerListener obj)
 | |
|         {
 | |
|             SetListeners(controller, obj);
 | |
|         }
 | |
| 
 | |
|         private static void SetListeners(PlaymodeTestsController controller, ITestRunnerListener eventHandler)
 | |
|         {
 | |
|             UnityEventTools.AddPersistentListener(controller.testStartedEvent, eventHandler.TestStarted);
 | |
|             UnityEventTools.AddPersistentListener(controller.testFinishedEvent, eventHandler.TestFinished);
 | |
|             UnityEventTools.AddPersistentListener(controller.runStartedEvent, eventHandler.RunStarted);
 | |
|             UnityEventTools.AddPersistentListener(controller.runFinishedEvent, eventHandler.RunFinished);
 | |
|         }
 | |
|     }
 | |
| }
 |