123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- 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
- {
- [Serializable]
- [AddComponentMenu("")]
- internal class PlaymodeTestsController : MonoBehaviour
- {
- private IEnumerator m_TestSteps;
- [SerializeField]
- private List<string> m_AssembliesWithTests;
- public List<string> AssembliesWithTests
- {
- get
- {
- return m_AssembliesWithTests;
- }
- set
- {
- m_AssembliesWithTests = value;
- }
- }
- [SerializeField]
- internal TestStartedEvent testStartedEvent = new TestStartedEvent();
- [SerializeField]
- internal TestFinishedEvent testFinishedEvent = new TestFinishedEvent();
- [SerializeField]
- internal RunStartedEvent runStartedEvent = new RunStartedEvent();
- [SerializeField]
- internal RunFinishedEvent runFinishedEvent = new RunFinishedEvent();
- internal const string kPlaymodeTestControllerName = "Code-based tests runner";
- [SerializeField]
- 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(), 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();
- }
- }
- }
- }
|