BuildTestTreeTask.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System;
  2. using System.Collections;
  3. using System.Linq;
  4. using UnityEditor.TestTools.TestRunner.Api;
  5. using UnityEngine.TestRunner.NUnitExtensions;
  6. using UnityEngine.TestTools;
  7. using UnityEngine.TestTools.NUnitExtensions;
  8. namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks
  9. {
  10. internal class BuildTestTreeTask : TestTaskBase
  11. {
  12. private TestPlatform m_TestPlatform;
  13. public BuildTestTreeTask(TestPlatform testPlatform)
  14. {
  15. m_TestPlatform = testPlatform;
  16. }
  17. internal IEditorLoadedTestAssemblyProvider m_testAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy());
  18. internal IAsyncTestAssemblyBuilder m_testAssemblyBuilder = new UnityTestAssemblyBuilder();
  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 enumerator = m_testAssemblyBuilder.BuildAsync(assemblies, Enumerable.Repeat(m_TestPlatform, assemblies.Length).ToArray(), buildSettings);
  38. while (enumerator.MoveNext())
  39. {
  40. yield return null;
  41. }
  42. var testList = enumerator.Current;
  43. if (testList== null)
  44. {
  45. throw new Exception("Test list not retrieved.");
  46. }
  47. testList.ParseForNameDuplicates();
  48. testJobData.testTree = testList;
  49. m_CallbacksDelegator.TestTreeRebuild(testList);
  50. }
  51. }
  52. }