A game about forced loneliness, made by TACStudios
1using System;
2using System.Collections;
3using System.Linq;
4using UnityEditor.TestTools.TestRunner.Api;
5using UnityEngine.TestTools;
6using UnityEngine.TestTools.NUnitExtensions;
7
8namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks
9{
10 internal class BuildTestTreeTask : TestTaskBase
11 {
12 private TestPlatform m_TestPlatform;
13
14 public BuildTestTreeTask(TestPlatform testPlatform)
15 {
16 m_TestPlatform = testPlatform;
17 RerunAfterResume = true;
18 }
19
20 internal IEditorLoadedTestAssemblyProvider m_testAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy());
21 internal Func<string[], int, IAsyncTestAssemblyBuilder> m_testAssemblyBuilderFactory = (orderedTestNames, seed) => new UnityTestAssemblyBuilder(orderedTestNames, seed);
22 internal ICallbacksDelegator m_CallbacksDelegator = CallbacksDelegator.instance;
23
24 public override IEnumerator Execute(TestJobData testJobData)
25 {
26 if (testJobData.testTree != null)
27 {
28 yield break;
29 }
30
31 var assembliesEnumerator = m_testAssemblyProvider.GetAssembliesGroupedByTypeAsync(m_TestPlatform);
32 while (assembliesEnumerator.MoveNext())
33 {
34 yield return null;
35 }
36
37 if (assembliesEnumerator.Current == null)
38 {
39 throw new Exception("Assemblies not retrieved.");
40 }
41
42 var assemblies = assembliesEnumerator.Current.Where(pair => m_TestPlatform.IsFlagIncluded(pair.Key)).SelectMany(pair => pair.Value).Select(x => x.Assembly).ToArray();
43 var buildSettings = UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(m_TestPlatform);
44 var testAssemblyBuilder = m_testAssemblyBuilderFactory(testJobData.executionSettings.orderedTestNames, testJobData.executionSettings.randomOrderSeed);
45 var enumerator = testAssemblyBuilder.BuildAsync(assemblies, Enumerable.Repeat(m_TestPlatform, assemblies.Length).ToArray(), buildSettings);
46 while (enumerator.MoveNext())
47 {
48 yield return null;
49 }
50
51 var testList = enumerator.Current;
52 if (testList== null)
53 {
54 throw new Exception("Test list not retrieved.");
55 }
56
57 testJobData.testTree = testList;
58 m_CallbacksDelegator.TestTreeRebuild(testList);
59 }
60 }
61}