A game about forced loneliness, made by TACStudios
1using System;
2using System.Collections;
3using System.Linq;
4using UnityEditor.SceneManagement;
5using UnityEngine;
6using UnityEngine.TestTools;
7using UnityEngine.TestTools.TestRunner;
8using Object = UnityEngine.Object;
9
10namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks
11{
12 internal class CreateBootstrapSceneTask : TestTaskBase
13 {
14 private bool m_includeTestController;
15 private bool m_saveScene;
16 private NewSceneSetup m_SceneSetup;
17
18 public CreateBootstrapSceneTask(bool mIncludeTestController, bool saveScene, NewSceneSetup sceneSetup)
19 {
20 m_includeTestController = mIncludeTestController;
21 m_saveScene = saveScene;
22 m_SceneSetup = sceneSetup;
23 }
24
25 public override IEnumerator Execute(TestJobData testJobData)
26 {
27 if (m_saveScene)
28 {
29 testJobData.InitTestScenePath = "Assets/InitTestScene" + Guid.NewGuid() + ".unity";
30 }
31
32 testJobData.InitTestScene = EditorSceneManager.NewScene(m_SceneSetup, NewSceneMode.Single);
33
34 /* This code from 2.0 is likely not needed and can be removed once backporting has finished.
35 while (PlaymodeTestsController.IsControllerOnScene())
36 {
37 var gameObject = PlaymodeTestsController.GetController().gameObject;
38 Object.DestroyImmediate(gameObject);
39 }
40 */
41
42 var settings = PlaymodeTestsControllerSettings.CreateRunnerSettings(testJobData.executionSettings.filters
43 .Select(filter => filter.ToRuntimeTestRunnerFilter(testJobData.executionSettings.runSynchronously)).ToArray(), testJobData.executionSettings.orderedTestNames,
44 testJobData.executionSettings.randomOrderSeed, testJobData.executionSettings.featureFlags, testJobData.executionSettings.retryCount, testJobData.executionSettings.repeatCount, IsAutomated());
45
46 if (m_includeTestController)
47 {
48 var go = new GameObject(PlaymodeTestsController.kPlaymodeTestControllerName);
49
50 var editorLoadedTestAssemblyProvider =
51 new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(),
52 new EditorAssembliesProxy());
53
54 var runner = go.AddComponent<PlaymodeTestsController>();
55 runner.AssembliesWithTests = editorLoadedTestAssemblyProvider
56 .GetAssembliesGroupedByType(TestPlatform.PlayMode).Select(x => x.Assembly.GetName().Name)
57 .ToList();
58 runner.settings = settings;
59 testJobData.PlaymodeTestsController = runner;
60 }
61
62 testJobData.PlayModeSettings = settings;
63
64 if (m_saveScene)
65 {
66 EditorSceneManager.MarkSceneDirty(testJobData.InitTestScene);
67 AssetDatabase.SaveAssets();
68 EditorSceneManager.SaveScene(testJobData.InitTestScene, testJobData.InitTestScenePath, false);
69 }
70
71 yield break;
72 }
73 }
74}