Maze / Library /PackageCache /com.unity.test-framework@1.1.33 /UnityEngine.TestRunner /TestRunner /PlaymodeTestsController.cs
| using System; | |
| using System.Collections; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using UnityEngine.SceneManagement; | |
| using UnityEngine.TestRunner.NUnitExtensions; | |
| using UnityEngine.TestRunner.NUnitExtensions.Runner; | |
| using UnityEngine.TestTools.NUnitExtensions; | |
| using UnityEngine.TestTools.Utils; | |
| namespace UnityEngine.TestTools.TestRunner | |
| { | |
| [] | |
| [] | |
| internal class PlaymodeTestsController : MonoBehaviour | |
| { | |
| private IEnumerator m_TestSteps; | |
| [] | |
| private List<string> m_AssembliesWithTests; | |
| public List<string> AssembliesWithTests | |
| { | |
| get | |
| { | |
| return m_AssembliesWithTests; | |
| } | |
| set | |
| { | |
| m_AssembliesWithTests = value; | |
| } | |
| } | |
| [] | |
| internal TestStartedEvent testStartedEvent = new TestStartedEvent(); | |
| [] | |
| internal TestFinishedEvent testFinishedEvent = new TestFinishedEvent(); | |
| [] | |
| internal RunStartedEvent runStartedEvent = new RunStartedEvent(); | |
| [] | |
| internal RunFinishedEvent runFinishedEvent = new RunFinishedEvent(); | |
| internal const string kPlaymodeTestControllerName = "Code-based tests runner"; | |
| [] | |
| public PlaymodeTestsControllerSettings settings = new PlaymodeTestsControllerSettings(); | |
| internal UnityTestAssemblyRunner m_Runner; | |
| public IEnumerator Start() | |
| { | |
| //Skip 2 frame because Unity. | |
| yield return null; | |
| yield return null; | |
| StartCoroutine(Run()); | |
| } | |
| internal static bool IsControllerOnScene() | |
| { | |
| return GameObject.Find(kPlaymodeTestControllerName) != null; | |
| } | |
| internal static PlaymodeTestsController GetController() | |
| { | |
| return GameObject.Find(kPlaymodeTestControllerName).GetComponent<PlaymodeTestsController>(); | |
| } | |
| public IEnumerator TestRunnerCoroutine() | |
| { | |
| while (m_TestSteps.MoveNext()) | |
| { | |
| yield return m_TestSteps.Current; | |
| } | |
| if (m_Runner.IsTestComplete) | |
| { | |
| runFinishedEvent.Invoke(m_Runner.Result); | |
| Cleanup(); | |
| yield return null; | |
| } | |
| } | |
| public IEnumerator Run() | |
| { | |
| CoroutineTestWorkItem.monoBehaviourCoroutineRunner = this; | |
| gameObject.hideFlags |= HideFlags.DontSave; | |
| if (settings.sceneBased) | |
| { | |
| SceneManager.LoadScene(1, LoadSceneMode.Additive); | |
| yield return null; | |
| } | |
| var testListUtil = new PlayerTestAssemblyProvider(new AssemblyLoadProxy(), m_AssembliesWithTests); | |
| m_Runner = new UnityTestAssemblyRunner(new UnityTestAssemblyBuilder(settings.orderedTestNames), new PlaymodeWorkItemFactory()); | |
| var loadedTests = m_Runner.Load(testListUtil.GetUserAssemblies().Select(a => a.Assembly).ToArray(), TestPlatform.PlayMode, UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(TestPlatform.PlayMode)); | |
| loadedTests.ParseForNameDuplicates(); | |
| runStartedEvent.Invoke(m_Runner.LoadedTest); | |
| var testListenerWrapper = new TestListenerWrapper(testStartedEvent, testFinishedEvent); | |
| m_TestSteps = m_Runner.Run(testListenerWrapper, settings.BuildNUnitFilter()).GetEnumerator(); | |
| yield return TestRunnerCoroutine(); | |
| } | |
| public void Cleanup() | |
| { | |
| if (m_Runner != null) | |
| { | |
| m_Runner.StopRun(); | |
| m_Runner = null; | |
| } | |
| if (Application.isEditor) | |
| { | |
| Destroy(gameObject); | |
| } | |
| } | |
| public static void TryCleanup() | |
| { | |
| var controller = GetController(); | |
| if (controller != null) | |
| { | |
| controller.Cleanup(); | |
| } | |
| } | |
| } | |
| } | |