59 lines
1.9 KiB
C#
59 lines
1.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using NUnit.Framework.Interfaces;
|
|
using NUnit.Framework.Internal;
|
|
using NUnit.Framework.Internal.Commands;
|
|
using UnityEditor;
|
|
using UnityEngine.TestRunner.NUnitExtensions.Runner;
|
|
#if UNITY_EDITOR
|
|
using UnityEditorInternal;
|
|
#endif
|
|
|
|
namespace UnityEngine.TestTools
|
|
{
|
|
internal class StrictCheckCommand : DelegatingTestCommand, IEnumerableTestMethodCommand
|
|
{
|
|
public StrictCheckCommand(TestCommand innerCommand) : base(innerCommand)
|
|
{
|
|
}
|
|
|
|
public override TestResult Execute(ITestExecutionContext context)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public IEnumerable ExecuteEnumerable(ITestExecutionContext context)
|
|
{
|
|
var unityContext = UnityTestExecutionContext.CurrentContext;
|
|
var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context);
|
|
foreach (var iterator in executeEnumerable)
|
|
{
|
|
yield return iterator;
|
|
}
|
|
|
|
if (!unityContext.FeatureFlags.strictDomainReload)
|
|
{
|
|
yield break;
|
|
}
|
|
// Refreshing the asset database before the check, to ensure that
|
|
// no potential pending domain reloads propagate to the following test
|
|
// (due to ex. creation or deletion of asset files in the TearDown of a test).
|
|
#if UNITY_EDITOR
|
|
AssetDatabase.Refresh();
|
|
#endif
|
|
if (isDomainReloadPending())
|
|
{
|
|
context.CurrentResult.SetResult(ResultState.Failure, "A pending domain reload was detected.");
|
|
}
|
|
}
|
|
private static bool isDomainReloadPending()
|
|
{
|
|
#if UNITY_EDITOR
|
|
return (InternalEditorUtility.IsScriptReloadRequested() || EditorApplication.isCompiling);
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
}
|
|
}
|