RerunCallback.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using UnityEditor.TestTools.TestRunner.Api;
  2. using UnityEditor.TestTools.TestRunner.CommandLineTest;
  3. using UnityEngine.TestTools.TestRunner.GUI;
  4. using UnityEngine;
  5. namespace UnityEditor.TestTools.TestRunner
  6. {
  7. internal class RerunCallback : ScriptableObject, ICallbacks
  8. {
  9. public static bool useMockRunFilter = false;
  10. public static TestRunnerFilter mockRunFilter = null;
  11. public void RunFinished(ITestResultAdaptor result)
  12. {
  13. if (RerunCallbackData.instance.runFilters == null || RerunCallbackData.instance.runFilters.Length == 0)
  14. RerunCallbackData.instance.runFilters = new[] {new TestRunnerFilter()};
  15. var runFilter = RerunCallbackData.instance.runFilters[0];
  16. if (useMockRunFilter)
  17. {
  18. runFilter = mockRunFilter;
  19. }
  20. runFilter.testRepetitions--;
  21. if (runFilter.testRepetitions <= 0 || result.TestStatus != TestStatus.Passed)
  22. {
  23. ExitCallbacks.preventExit = false;
  24. return;
  25. }
  26. ExitCallbacks.preventExit = true;
  27. if (EditorApplication.isPlaying)
  28. {
  29. EditorApplication.playModeStateChanged += WaitForExitPlaymode;
  30. return;
  31. }
  32. if (!useMockRunFilter)
  33. {
  34. ExecuteTestRunnerAPI();
  35. }
  36. }
  37. private static void WaitForExitPlaymode(PlayModeStateChange state)
  38. {
  39. if (state == PlayModeStateChange.EnteredEditMode)
  40. {
  41. ExecuteTestRunnerAPI();
  42. }
  43. }
  44. private static void ExecuteTestRunnerAPI()
  45. {
  46. var runFilter = RerunCallbackData.instance.runFilters[0];
  47. var testMode = RerunCallbackData.instance.testMode;
  48. var testRunnerApi = ScriptableObject.CreateInstance<TestRunnerApi>();
  49. testRunnerApi.Execute(new Api.ExecutionSettings()
  50. {
  51. filters = new[]
  52. {
  53. new Filter()
  54. {
  55. categoryNames = runFilter.categoryNames,
  56. groupNames = runFilter.groupNames,
  57. testMode = testMode,
  58. testNames = runFilter.testNames
  59. }
  60. }
  61. });
  62. }
  63. public void TestStarted(ITestAdaptor test)
  64. {
  65. }
  66. public void TestFinished(ITestResultAdaptor result)
  67. {
  68. }
  69. public void RunStarted(ITestAdaptor testsToRun)
  70. {
  71. }
  72. }
  73. }