pixelgon/Library/PackageCache/com.unity.test-framework@1.1.3/UnityEditor.TestRunner/Api/TestLauncherFactory.cs
2020-06-05 11:54:36 -07:00

75 lines
2.9 KiB
C#

using System;
using System.Linq;
using UnityEngine.TestTools;
using UnityEngine.TestTools.TestRunner;
namespace UnityEditor.TestTools.TestRunner.Api
{
internal class TestLauncherFactory : ITestLauncherFactory
{
public TestLauncherBase GetLauncher(ExecutionSettings executionSettings)
{
var filters = GetFilters(executionSettings);
if (filters[0].testMode == TestMode.EditMode || filters[0].testMode == 0)
{
return GetEditModeLauncher(GetFilters(executionSettings), executionSettings.runSynchronously);
}
else
{
if (executionSettings.runSynchronously)
throw new NotSupportedException("Playmode tests cannot be run synchronously.");
var settings = PlaymodeTestsControllerSettings.CreateRunnerSettings(filters.Select(filter => filter.ToTestRunnerFilter()).ToArray());
return GetPlayModeLauncher(settings, executionSettings);
}
}
static Filter[] GetFilters(ExecutionSettings executionSettings)
{
if (executionSettings.filters != null && executionSettings.filters.Length > 0)
{
return executionSettings.filters;
}
return new[] {executionSettings.filter ?? new Filter()};
}
static TestLauncherBase GetEditModeLauncher(Filter[] filters, bool runSynchronously)
{
return GetEditModeLauncherForProvidedAssemblies(filters, TestPlatform.EditMode, runSynchronously);
}
static TestLauncherBase GetPlayModeLauncher(PlaymodeTestsControllerSettings settings, ExecutionSettings executionSettings)
{
if (executionSettings.targetPlatform != null)
{
return GetPlayerLauncher(settings, executionSettings);
}
if (PlayerSettings.runPlayModeTestAsEditModeTest)
{
return GetEditModeLauncherForProvidedAssemblies(executionSettings.filters, TestPlatform.PlayMode, false);
}
return GetPlayModeLauncher(settings);
}
static TestLauncherBase GetEditModeLauncherForProvidedAssemblies(Filter[] filters, TestPlatform testPlatform, bool runSynchronously)
{
return new EditModeLauncher(filters, testPlatform, runSynchronously);
}
static TestLauncherBase GetPlayModeLauncher(PlaymodeTestsControllerSettings settings)
{
return new PlaymodeLauncher(settings);
}
static TestLauncherBase GetPlayerLauncher(PlaymodeTestsControllerSettings settings, ExecutionSettings executionSettings)
{
return new PlayerLauncher(
settings,
executionSettings.targetPlatform.Value,
executionSettings.overloadTestRunSettings);
}
}
}