97 lines
3.6 KiB
C#
97 lines
3.6 KiB
C#
|
using System;
|
||
|
using UnityEditor.TestRunner.CommandLineParser;
|
||
|
using UnityEditor.TestTools.TestRunner.Api;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace UnityEditor.TestTools.TestRunner.CommandLineTest
|
||
|
{
|
||
|
internal class TestStarter
|
||
|
{
|
||
|
[InitializeOnLoadMethod]
|
||
|
internal static void Initialize()
|
||
|
{
|
||
|
new TestStarter().Init();
|
||
|
}
|
||
|
|
||
|
internal Action<EditorApplication.CallbackFunction> registerEditorUpdateCallback = action =>
|
||
|
{
|
||
|
EditorApplication.update += action;
|
||
|
};
|
||
|
internal Action<EditorApplication.CallbackFunction> unregisterEditorUpdateCallback = action =>
|
||
|
{
|
||
|
EditorApplication.update -= action;
|
||
|
};
|
||
|
internal Func<bool> isCompiling = () => EditorApplication.isCompiling;
|
||
|
internal IRunData runData = RunData.instance;
|
||
|
internal Func<string[]> GetCommandLineArgs = Environment.GetCommandLineArgs;
|
||
|
|
||
|
internal void Init()
|
||
|
{
|
||
|
if (!ShouldRunTests())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (isCompiling())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
executer.ExitOnCompileErrors();
|
||
|
|
||
|
if (runData.IsRunning)
|
||
|
{
|
||
|
executer.SetUpCallbacks(runData.ExecutionSettings);
|
||
|
registerEditorUpdateCallback(executer.ExitIfRunIsCompleted);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Execute the test run on the next editor update to allow other framework components
|
||
|
// (the TestJobDataHolder.ResumeRunningJobs method in particular) to register themselves
|
||
|
// or modify the test run environment using InitializeOnLoad and InitializeOnLoadMethod calls
|
||
|
registerEditorUpdateCallback(InitializeAndExecuteRun);
|
||
|
}
|
||
|
|
||
|
internal void InitializeAndExecuteRun()
|
||
|
{
|
||
|
unregisterEditorUpdateCallback(InitializeAndExecuteRun);
|
||
|
|
||
|
runData.IsRunning = true;
|
||
|
var commandLineArgs = GetCommandLineArgs();
|
||
|
runData.ExecutionSettings = executer.BuildExecutionSettings(commandLineArgs);
|
||
|
executer.SetUpCallbacks(runData.ExecutionSettings);
|
||
|
runData.RunState = default;
|
||
|
runData.RunId = executer.InitializeAndExecuteRun(commandLineArgs);
|
||
|
registerEditorUpdateCallback(executer.ExitIfRunIsCompleted);
|
||
|
}
|
||
|
|
||
|
private bool ShouldRunTests()
|
||
|
{
|
||
|
var shouldRunTests = false;
|
||
|
var optionSet = new CommandLineOptionSet(
|
||
|
new CommandLineOption("runTests", () => { shouldRunTests = true; }),
|
||
|
new CommandLineOption("runEditorTests", () => { shouldRunTests = true; })
|
||
|
);
|
||
|
optionSet.Parse(GetCommandLineArgs());
|
||
|
return shouldRunTests;
|
||
|
}
|
||
|
|
||
|
internal IExecuter m_Executer;
|
||
|
private IExecuter executer
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if (m_Executer == null)
|
||
|
{
|
||
|
Func<bool> compilationCheck = () => EditorUtility.scriptCompilationFailed;
|
||
|
Action<string> actionLogger = msg => { Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, msg); };
|
||
|
var apiSettingsBuilder = new SettingsBuilder(new TestSettingsDeserializer(() => new TestSettings()), actionLogger, Debug.LogWarning, compilationCheck);
|
||
|
m_Executer = new Executer(ScriptableObject.CreateInstance<TestRunnerApi>(), apiSettingsBuilder, Debug.LogErrorFormat, Debug.LogException, Debug.Log, EditorApplication.Exit, compilationCheck, TestRunnerApi.IsRunActive);
|
||
|
}
|
||
|
|
||
|
return m_Executer;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|