50 lines
2.0 KiB
C#
50 lines
2.0 KiB
C#
using System;
|
|
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEditor.TestTools;
|
|
using UnityEngine;
|
|
using UnityEngine.TestTools;
|
|
using UnityTestRunnerAction;
|
|
|
|
[assembly: TestPlayerBuildModifier(typeof(HeadlessPlayModeSetup))]
|
|
[assembly: PostBuildCleanup(typeof(HeadlessPlayModeSetup))]
|
|
|
|
namespace UnityTestRunnerAction
|
|
{
|
|
public class HeadlessPlayModeSetup : ITestPlayerBuildModifier, IPostBuildCleanup
|
|
{
|
|
private static bool s_RunningPlayerTests;
|
|
public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions)
|
|
{
|
|
// Do not launch the player after the build completes. Disable the PlayerConnection.
|
|
playerOptions.options &= ~(BuildOptions.AutoRunPlayer | BuildOptions.ConnectToHost | BuildOptions.WaitForPlayerConnection);
|
|
|
|
// Not supporting Mac currently.
|
|
playerOptions.target = SystemInfo.operatingSystemFamily == OperatingSystemFamily.Windows ? BuildTarget.StandaloneWindows64 : BuildTarget.StandaloneLinux64;
|
|
|
|
string[] commandLineArgs = Environment.GetCommandLineArgs();
|
|
playerOptions.locationPathName = commandLineArgs[Array.IndexOf(commandLineArgs, "-builtTestRunnerPath") + 1]; ;
|
|
|
|
// Instruct the cleanup to exit the Editor if the run came from the command line.
|
|
// The variable is static because the cleanup is being invoked in a new instance of the class.
|
|
s_RunningPlayerTests = true;
|
|
return playerOptions;
|
|
}
|
|
|
|
public void Cleanup()
|
|
{
|
|
if (s_RunningPlayerTests && IsRunningTestsFromCommandLine())
|
|
{
|
|
// Exit the Editor on the next update, allowing for other PostBuildCleanup steps to run.
|
|
EditorApplication.update += () => { EditorApplication.Exit(0); };
|
|
}
|
|
}
|
|
|
|
private static bool IsRunningTestsFromCommandLine()
|
|
{
|
|
var commandLineArgs = Environment.GetCommandLineArgs();
|
|
return commandLineArgs.Any(value => value == "-runTests");
|
|
}
|
|
}
|
|
}
|