A game about forced loneliness, made by TACStudios
1using System; 2using UnityEditor.TestRunner.CommandLineParser; 3using UnityEditor.TestTools.TestRunner.Api; 4using UnityEngine; 5 6namespace UnityEditor.TestTools.TestRunner.CommandLineTest 7{ 8 internal class TestStarter 9 { 10 [InitializeOnLoadMethod] 11 internal static void Initialize() 12 { 13 new TestStarter().Init(); 14 } 15 16 internal Action<EditorApplication.CallbackFunction> registerEditorUpdateCallback = action => 17 { 18 EditorApplication.update += action; 19 }; 20 internal Action<EditorApplication.CallbackFunction> unregisterEditorUpdateCallback = action => 21 { 22 EditorApplication.update -= action; 23 }; 24 internal Func<bool> isCompiling = () => EditorApplication.isCompiling; 25 internal IRunData runData = RunData.instance; 26 internal Func<string[]> GetCommandLineArgs = Environment.GetCommandLineArgs; 27 28 internal void Init() 29 { 30 if (!ShouldRunTests()) 31 { 32 return; 33 } 34 35 if (isCompiling()) 36 { 37 return; 38 } 39 40 executer.ExitOnCompileErrors(); 41 42 if (runData.IsRunning) 43 { 44 executer.SetUpCallbacks(runData.ExecutionSettings); 45 registerEditorUpdateCallback(executer.ExitIfRunIsCompleted); 46 return; 47 } 48 49 // Execute the test run on the next editor update to allow other framework components 50 // (the TestJobDataHolder.ResumeRunningJobs method in particular) to register themselves 51 // or modify the test run environment using InitializeOnLoad and InitializeOnLoadMethod calls 52 registerEditorUpdateCallback(InitializeAndExecuteRun); 53 } 54 55 internal void InitializeAndExecuteRun() 56 { 57 unregisterEditorUpdateCallback(InitializeAndExecuteRun); 58 59 runData.IsRunning = true; 60 var commandLineArgs = GetCommandLineArgs(); 61 runData.ExecutionSettings = executer.BuildExecutionSettings(commandLineArgs); 62 executer.SetUpCallbacks(runData.ExecutionSettings); 63 runData.RunState = default; 64 runData.RunId = executer.InitializeAndExecuteRun(commandLineArgs); 65 registerEditorUpdateCallback(executer.ExitIfRunIsCompleted); 66 } 67 68 private bool ShouldRunTests() 69 { 70 var shouldRunTests = false; 71 var optionSet = new CommandLineOptionSet( 72 new CommandLineOption("runTests", () => { shouldRunTests = true; }), 73 new CommandLineOption("runEditorTests", () => { shouldRunTests = true; }) 74 ); 75 optionSet.Parse(GetCommandLineArgs()); 76 return shouldRunTests; 77 } 78 79 internal IExecuter m_Executer; 80 private IExecuter executer 81 { 82 get 83 { 84 if (m_Executer == null) 85 { 86 Func<bool> compilationCheck = () => EditorUtility.scriptCompilationFailed; 87 Action<string> actionLogger = msg => { Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, msg); }; 88 var apiSettingsBuilder = new SettingsBuilder(new TestSettingsDeserializer(() => new TestSettings()), actionLogger, Debug.LogWarning, compilationCheck); 89 m_Executer = new Executer(ScriptableObject.CreateInstance<TestRunnerApi>(), apiSettingsBuilder, Debug.LogErrorFormat, Debug.LogException, Debug.Log, EditorApplication.Exit, compilationCheck, TestRunnerApi.IsRunActive); 90 } 91 92 return m_Executer; 93 } 94 } 95 } 96}