A game about forced loneliness, made by TACStudios
1using System;
2using System.Collections;
3using System.Linq;
4using UnityEngine;
5using UnityEngine.TestRunner.NUnitExtensions.Runner;
6using UnityEngine.TestTools.TestRunner;
7
8namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks
9{
10 internal class PlayModeRunTask : TestTaskBase
11 {
12 public PlayModeRunTask()
13 {
14 SupportsResumingEnumerator = true;
15 }
16 public override IEnumerator Execute(TestJobData testJobData)
17 {
18 yield return null; // Allow for setting the test job data after a resume.
19
20 // Saving of the scene causes serialization of the runner, so the events needs to be resubscribed. This is temporary for now.
21 // Wait for the active controller
22 while (PlaymodeTestsController.ActiveController == null)
23 {
24 yield return null;
25 }
26
27 var controller = PlaymodeTestsController.ActiveController;
28
29 if (controller.m_Runner != null && controller.m_Runner.IsTestComplete)
30 {
31 //Already finished, likely zero tests.
32 testJobData.RunStartedEvent.Invoke(controller.m_Runner.LoadedTest);
33 testJobData.RunFinishedEvent.Invoke(controller.m_Runner.Result);
34 yield break;
35 }
36
37 controller.runStartedEvent.AddListener(testJobData.RunStartedEvent.Invoke);
38 controller.testStartedEvent.AddListener(testJobData.TestStartedEvent.Invoke);
39 controller.testFinishedEvent.AddListener(testJobData.TestFinishedEvent.Invoke);
40 controller.runFinishedEvent.AddListener(testJobData.RunFinishedEvent.Invoke);
41
42 controller.RunInfrastructureHasRegistered = true;
43
44 var runDone = false;
45 controller.runFinishedEvent.AddListener((_) =>
46 {
47 runDone = true;
48 });
49
50 while (!runDone)
51 {
52 if (controller.RaisedException != null)
53 {
54 throw controller.RaisedException;
55 }
56 yield return null;
57 }
58
59 yield return null;
60 }
61 }
62}