123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using System;
- using System.Collections;
- using System.Linq;
- using NUnit.Framework.Interfaces;
- using NUnit.Framework.Internal;
- using NUnit.Framework.Internal.Commands;
- using NUnit.Framework.Internal.Execution;
- using UnityEngine.TestTools;
- using SetUpTearDownCommand = NUnit.Framework.Internal.Commands.SetUpTearDownCommand;
- using TestActionCommand = NUnit.Framework.Internal.Commands.TestActionCommand;
- namespace UnityEngine.TestRunner.NUnitExtensions.Runner
- {
- internal class EditModeTestCallbacks
- {
- public static Action RestoringTestContext { get; set; }
- }
- internal class DefaultTestWorkItem : UnityWorkItem
- {
- private TestCommand _command;
- public DefaultTestWorkItem(TestMethod test, ITestFilter filter)
- : base(test, null)
- {
- _command = TestCommandBuilder.BuildTestCommand(test, filter);
- }
- protected override IEnumerable PerformWork()
- {
- if (m_DontRunRestoringResult && EditModeTestCallbacks.RestoringTestContext != null)
- {
- EditModeTestCallbacks.RestoringTestContext();
- Result = Context.CurrentResult;
- yield break;
- }
- try
- {
- if (_command is SkipCommand || _command is FailCommand)
- {
- Result = _command.Execute(Context);
- yield break;
- }
- if (!(_command is IEnumerableTestMethodCommand))
- {
- Debug.LogError("Cannot perform work on " + _command.GetType().Name);
- yield break;
- }
- foreach (var workItemStep in ((IEnumerableTestMethodCommand)_command).ExecuteEnumerable(Context))
- {
- ResultedInDomainReload = false;
- if (workItemStep is IEditModeTestYieldInstruction)
- {
- var editModeTestYieldInstruction = (IEditModeTestYieldInstruction)workItemStep;
- yield return editModeTestYieldInstruction;
- var enumerator = editModeTestYieldInstruction.Perform();
- while (true)
- {
- bool moveNext;
- try
- {
- moveNext = enumerator.MoveNext();
- }
- catch (Exception e)
- {
- Context.CurrentResult.RecordException(e);
- break;
- }
- if (!moveNext)
- {
- break;
- }
- yield return null;
- }
- }
- else
- {
- yield return workItemStep;
- }
- }
- Result = Context.CurrentResult;
- }
- finally
- {
- WorkItemComplete();
- }
- }
- }
- }
|