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.

InitializeTestProgressTask.cs 2.5KB

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