TestStarter.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.IO;
  3. using UnityEditor.TestRunner.CommandLineParser;
  4. using UnityEditor.TestTools.TestRunner.Api;
  5. using UnityEngine;
  6. using UnityEditor.Compilation;
  7. using System.Linq;
  8. using UnityEngine.TestTools;
  9. namespace UnityEditor.TestTools.TestRunner.CommandLineTest
  10. {
  11. [InitializeOnLoad]
  12. static class TestStarter
  13. {
  14. static TestStarter()
  15. {
  16. if (!ShouldRunTests())
  17. {
  18. return;
  19. }
  20. if (EditorApplication.isCompiling)
  21. {
  22. return;
  23. }
  24. if (RunData.instance.isRunning)
  25. {
  26. executer.ExitOnCompileErrors();
  27. executer.SetUpCallbacks(RunData.instance.executionSettings);
  28. return;
  29. }
  30. EditorApplication.update += UpdateWatch;
  31. }
  32. static void UpdateWatch()
  33. {
  34. EditorApplication.update -= UpdateWatch;
  35. if (RunData.instance.isRunning)
  36. {
  37. return;
  38. }
  39. RunData.instance.isRunning = true;
  40. var commandLineArgs = Environment.GetCommandLineArgs();
  41. RunData.instance.executionSettings = executer.BuildExecutionSettings(commandLineArgs);
  42. executer.SetUpCallbacks(RunData.instance.executionSettings);
  43. executer.InitializeAndExecuteRun(commandLineArgs);
  44. }
  45. static bool ShouldRunTests()
  46. {
  47. var shouldRunTests = false;
  48. var optionSet = new CommandLineOptionSet(
  49. new CommandLineOption("runTests", () => { shouldRunTests = true; }),
  50. new CommandLineOption("runEditorTests", () => { shouldRunTests = true; })
  51. );
  52. optionSet.Parse(Environment.GetCommandLineArgs());
  53. return shouldRunTests;
  54. }
  55. static Executer s_Executer;
  56. static Executer executer
  57. {
  58. get
  59. {
  60. if (s_Executer == null)
  61. {
  62. Func<bool> compilationCheck = () => EditorUtility.scriptCompilationFailed;
  63. Action<string> actionLogger = (string msg) => { Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, msg); };
  64. var apiSettingsBuilder = new SettingsBuilder(new TestSettingsDeserializer(() => new TestSettings()), actionLogger, Debug.LogWarning, File.Exists, compilationCheck);
  65. s_Executer = new Executer(ScriptableObject.CreateInstance<TestRunnerApi>(), apiSettingsBuilder, Debug.LogErrorFormat, Debug.LogException, EditorApplication.Exit, compilationCheck);
  66. }
  67. return s_Executer;
  68. }
  69. }
  70. }
  71. }