No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

BuildTestTreeTask.cs 2.5KB

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