2022-01-12 10:06:03 +03:00
using System ;
using System.Linq ;
using NUnit.Framework.Interfaces ;
using NUnit.Framework.Internal.Filters ;
using UnityEngine ;
namespace UnityEditor.TestTools.TestRunner.Api
{
/// <summary>
/// A set of execution settings defining how to run tests, using the <see cref="TestRunnerApi"/>.
/// </summary>
[Serializable]
public class ExecutionSettings
{
/// <summary>
/// Creates an instance with a given set of filters, if any.
/// </summary>
/// <param name="filtersToExecute">Set of filters</param>
public ExecutionSettings ( params Filter [ ] filtersToExecute )
{
filters = filtersToExecute ;
}
[SerializeField]
internal BuildTarget ? targetPlatform ;
2022-01-12 10:39:15 +03:00
/// <summary>
2022-01-12 10:06:03 +03:00
/// An instance of <see cref="ITestRunSettings"/> to set up before running tests on a Player.
2022-01-12 10:39:15 +03:00
/// </summary>
2022-01-12 10:06:03 +03:00
// Note: Is not available after serialization
public ITestRunSettings overloadTestRunSettings ;
[SerializeField]
internal Filter filter ;
2022-01-12 10:39:15 +03:00
///<summary>
///A collection of <see cref="Filter"/> to execute tests on.
///</summary>
2022-01-12 10:06:03 +03:00
[SerializeField]
public Filter [ ] filters ;
/// <summary>
/// Note that this is only supported for EditMode tests, and that tests which take multiple frames (i.e. [UnityTest] tests, or tests with [UnitySetUp] or [UnityTearDown] scaffolding) will be filtered out.
/// </summary>
/// <returns>If true, the call to Execute() will run tests synchronously, guaranteeing that all tests have finished running by the time the call returns.</returns>
[SerializeField]
public bool runSynchronously ;
2022-01-12 10:39:15 +03:00
/// <summary>
2022-01-12 10:06:03 +03:00
/// The time, in seconds, the editor should wait for heartbeats after starting a test run on a player. This defaults to 10 minutes.
2022-01-12 10:39:15 +03:00
/// </summary>
2022-01-12 10:06:03 +03:00
[SerializeField]
public int playerHeartbeatTimeout = 60 * 10 ;
internal bool EditModeIncluded ( )
{
return filters . Any ( f = > IncludesTestMode ( f . testMode , TestMode . EditMode ) ) ;
}
internal bool PlayModeInEditorIncluded ( )
{
return filters . Any ( f = > IncludesTestMode ( f . testMode , TestMode . PlayMode ) & & targetPlatform = = null ) ;
}
internal bool PlayerIncluded ( )
{
return filters . Any ( f = > IncludesTestMode ( f . testMode , TestMode . PlayMode ) & & targetPlatform ! = null ) ;
}
private static bool IncludesTestMode ( TestMode testMode , TestMode modeToCheckFor )
{
return ( testMode & modeToCheckFor ) = = modeToCheckFor ;
}
internal ITestFilter BuildNUnitFilter ( )
{
return new OrFilter ( filters . Select ( f = > f . ToRuntimeTestRunnerFilter ( runSynchronously ) . BuildNUnitFilter ( ) ) . ToArray ( ) ) ;
}
}
}