123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- using System;
- using System.IO;
- using UnityEditor.TestRunner.CommandLineParser;
- using UnityEditor.TestTools.TestRunner.Api;
- using UnityEditor.TestTools.TestRunner.GUI;
-
- namespace UnityEditor.TestTools.TestRunner.CommandLineTest
- {
- internal class SettingsBuilder : ISettingsBuilder
- {
- private ITestSettingsDeserializer m_TestSettingsDeserializer;
- private Action<string> m_LogAction;
- private Action<string> m_LogWarningAction;
- private Func<string, bool> m_FileExistsCheck;
- private Func<bool> m_ScriptCompilationFailedCheck;
- public SettingsBuilder(ITestSettingsDeserializer testSettingsDeserializer, Action<string> logAction, Action<string> logWarningAction, Func<string, bool> fileExistsCheck, Func<bool> scriptCompilationFailedCheck)
- {
- m_LogAction = logAction;
- m_LogWarningAction = logWarningAction;
- m_FileExistsCheck = fileExistsCheck;
- m_ScriptCompilationFailedCheck = scriptCompilationFailedCheck;
- m_TestSettingsDeserializer = testSettingsDeserializer;
- }
-
- public Api.ExecutionSettings BuildApiExecutionSettings(string[] commandLineArgs)
- {
- var quit = false;
- string testPlatform = TestMode.EditMode.ToString();
- string[] testFilters = null;
- string[] testCategories = null;
- string testSettingsFilePath = null;
- int testRepetitions = 1;
- int? playerHeartbeatTimeout = null;
- bool runSynchronously = false;
- string[] testAssemblyNames = null;
- string buildPlayerPath = string.Empty;
-
-
- var optionSet = new CommandLineOptionSet(
- new CommandLineOption("quit", () => { quit = true; }),
- new CommandLineOption("testPlatform", platform => { testPlatform = platform; }),
- new CommandLineOption("editorTestsFilter", filters => { testFilters = filters; }),
- new CommandLineOption("testFilter", filters => { testFilters = filters; }),
- new CommandLineOption("editorTestsCategories", catagories => { testCategories = catagories; }),
- new CommandLineOption("testCategory", catagories => { testCategories = catagories; }),
- new CommandLineOption("testSettingsFile", settingsFilePath => { testSettingsFilePath = settingsFilePath; }),
- new CommandLineOption("testRepetitions", reps => { testRepetitions = int.Parse(reps); }),
- new CommandLineOption("playerHeartbeatTimeout", timeout => { playerHeartbeatTimeout = int.Parse(timeout); }),
- new CommandLineOption("runSynchronously", () => { runSynchronously = true; }),
- new CommandLineOption("assemblyNames", assemblyNames => { testAssemblyNames = assemblyNames; }),
- new CommandLineOption("buildPlayerPath", buildPath => { buildPlayerPath = buildPath; })
- );
- optionSet.Parse(commandLineArgs);
-
- DisplayQuitWarningIfQuitIsGiven(quit);
-
- CheckForScriptCompilationErrors();
-
- LogParametersForRun(testPlatform, testFilters, testCategories, testSettingsFilePath);
-
- var testSettings = GetTestSettings(testSettingsFilePath);
-
- var filter = new Filter()
- {
- groupNames = testFilters,
- categoryNames = testCategories,
- assemblyNames = testAssemblyNames
- };
-
- var buildTarget = SetFilterAndGetBuildTarget(testPlatform, filter);
-
- RerunCallbackData.instance.runFilters = new []{new UITestRunnerFilter()
- {
- categoryNames = filter.categoryNames,
- groupNames = filter.groupNames,
- testRepetitions = testRepetitions
- }};
-
- RerunCallbackData.instance.testMode = filter.testMode;
-
- var settings = new Api.ExecutionSettings()
- {
- filters = new []{filter},
- overloadTestRunSettings = new RunSettings(testSettings),
- targetPlatform = buildTarget,
- runSynchronously = runSynchronously,
- playerSavePath = buildPlayerPath
- };
-
- if (playerHeartbeatTimeout != null)
- {
- settings.playerHeartbeatTimeout = playerHeartbeatTimeout.Value;
- }
-
- return settings;
- }
-
- public ExecutionSettings BuildExecutionSettings(string[] commandLineArgs)
- {
- string resultFilePath = null;
- string deviceLogsDirectory = null;
-
- var optionSet = new CommandLineOptionSet(
- new CommandLineOption("editorTestsResultFile", filePath => { resultFilePath = filePath; }),
- new CommandLineOption("testResults", filePath => { resultFilePath = filePath; }),
- new CommandLineOption("deviceLogs", dirPath => { deviceLogsDirectory = dirPath; })
- );
- optionSet.Parse(commandLineArgs);
-
- return new ExecutionSettings()
- {
- TestResultsFile = resultFilePath,
- DeviceLogsDirectory = deviceLogsDirectory
- };
- }
-
- void DisplayQuitWarningIfQuitIsGiven(bool quitIsGiven)
- {
- if (quitIsGiven)
- {
- m_LogWarningAction("Running tests from command line arguments will not work when \"quit\" is specified.");
- }
- }
-
- void CheckForScriptCompilationErrors()
- {
- if (m_ScriptCompilationFailedCheck())
- {
- throw new SetupException(SetupException.ExceptionType.ScriptCompilationFailed);
- }
- }
-
- void LogParametersForRun(string testPlatform, string[] testFilters, string[] testCategories, string testSettingsFilePath)
- {
- m_LogAction("Running tests for " + testPlatform);
- if (testFilters != null && testFilters.Length > 0)
- {
- m_LogAction("With test filter: " + string.Join(", ", testFilters));
- }
- if (testCategories != null && testCategories.Length > 0)
- {
- m_LogAction("With test categories: " + string.Join(", ", testCategories));
- }
- if (!string.IsNullOrEmpty(testSettingsFilePath))
- {
- m_LogAction("With test settings file: " + testSettingsFilePath);
- }
- }
-
- ITestSettings GetTestSettings(string testSettingsFilePath)
- {
- ITestSettings testSettings = null;
- if (!string.IsNullOrEmpty(testSettingsFilePath))
- {
- if (!m_FileExistsCheck(testSettingsFilePath))
- {
- throw new SetupException(SetupException.ExceptionType.TestSettingsFileNotFound, testSettingsFilePath);
- }
-
- testSettings = m_TestSettingsDeserializer.GetSettingsFromJsonFile(testSettingsFilePath);
- }
- return testSettings;
- }
-
- static BuildTarget? SetFilterAndGetBuildTarget(string testPlatform, Filter filter)
- {
- BuildTarget? buildTarget = null;
- if (testPlatform.ToLower() == "editmode")
- {
- filter.testMode = TestMode.EditMode;
- }
- else if (testPlatform.ToLower() == "playmode")
- {
- filter.testMode = TestMode.PlayMode;
- }
- else
- {
- try
- {
- buildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), testPlatform, true);
-
- filter.testMode = TestMode.PlayMode;
- }
- catch (ArgumentException)
- {
- throw new SetupException(SetupException.ExceptionType.PlatformNotFound, testPlatform);
- }
- }
- return buildTarget;
- }
- }
- }
|