75 lines
2.9 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|