A game about forced loneliness, made by TACStudios
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Linq;
5using NUnit.Framework.Interfaces;
6using UnityEngine;
7
8namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks
9{
10 internal class InitializeTestProgressTask : TestTaskBase
11 {
12 public InitializeTestProgressTask()
13 {
14 RerunAfterResume = true;
15 }
16
17 public override IEnumerator Execute(TestJobData testJobData)
18 {
19 testJobData.TestStartedEvent.AddListener(test => OnTestStarted(test, testJobData));
20 testJobData.TestFinishedEvent.AddListener(test => OnTestFinished(test, testJobData));
21
22 if (testJobData.taskInfoStack.Peek().taskMode == TaskMode.Resume)
23 {
24 yield break;
25 }
26
27 if (testJobData.testTree == null)
28 {
29 throw new RequiredTestRunDataMissingException(nameof(testJobData.testTree));
30 }
31
32 var allTests =
33 GetTestsExpectedToRun(testJobData.testTree, testJobData.executionSettings.BuildNUnitFilter());
34 testJobData.testProgress = new TestProgress(allTests.ToArray());
35 var numTasks = testJobData.Tasks.Count();
36 var numTests = testJobData.testProgress.AllTestsToRun.Length;
37 var progressAvailableToTests = 1.0f - numTasks * RunProgress.progressPrTask;
38
39 if (numTests > 0)
40 {
41 testJobData.runProgress.progressPrTest = progressAvailableToTests / numTests;
42 }
43 }
44
45 private void OnTestStarted(ITest test, TestJobData data)
46 {
47 if (!test.IsSuite)
48 {
49 data.runProgress.stepName = test.Name;
50 }
51 }
52
53 private void OnTestFinished(ITestResult result, TestJobData data)
54 {
55 if (!result.Test.IsSuite)
56 {
57 data.runProgress.progress += data.runProgress.progressPrTest;
58 }
59 }
60
61 private static List<string> GetTestsExpectedToRun(ITest test, ITestFilter filter)
62 {
63 var expectedTests = new List<string>();
64
65 if (filter.Pass(test))
66 {
67 if (test.IsSuite)
68 {
69 expectedTests.AddRange(test.Tests.SelectMany(subTest => GetTestsExpectedToRun(subTest, filter)));
70 }
71 else
72 {
73 expectedTests.Add(test.FullName);
74 }
75 }
76
77 return expectedTests;
78 }
79 }
80}