123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using System;
- using System.Collections;
- using NUnit.Framework.Interfaces;
- using NUnit.Framework.Internal;
- using NUnit.Framework.Internal.Commands;
- using NUnit.Framework.Internal.Execution;
- using UnityEngine.TestTools.Utils;
- namespace UnityEngine.TestRunner.NUnitExtensions.Runner
- {
- internal class CoroutineTestWorkItem : UnityWorkItem
- {
- private static MonoBehaviour m_MonoBehaviourCoroutineRunner;
- private TestCommand m_Command;
- public static MonoBehaviour monoBehaviourCoroutineRunner
- {
- get
- {
- if (m_MonoBehaviourCoroutineRunner == null)
- {
- throw new NullReferenceException("MonoBehaviour coroutine runner not set");
- }
- return m_MonoBehaviourCoroutineRunner;
- }
- set { m_MonoBehaviourCoroutineRunner = value; }
- }
- public CoroutineTestWorkItem(TestMethod test, ITestFilter filter)
- : base(test, null)
- {
- m_Command = m_Command = TestCommandBuilder.BuildTestCommand(test, filter);
- }
- protected override IEnumerable PerformWork()
- {
- if (m_Command is SkipCommand)
- {
- m_Command.Execute(Context);
- Result = Context.CurrentResult;
- WorkItemComplete();
- yield break;
- }
- if (m_Command is ApplyChangesToContextCommand)
- {
- var applyChangesToContextCommand = (ApplyChangesToContextCommand)m_Command;
- applyChangesToContextCommand.ApplyChanges(Context);
- m_Command = applyChangesToContextCommand.GetInnerCommand();
- }
- var enumerableTestMethodCommand = (IEnumerableTestMethodCommand)m_Command;
- try
- {
- var executeEnumerable = enumerableTestMethodCommand.ExecuteEnumerable(Context).GetEnumerator();
- var coroutineRunner = new CoroutineRunner(monoBehaviourCoroutineRunner, Context);
- yield return coroutineRunner.HandleEnumerableTest(executeEnumerable);
- if (coroutineRunner.HasFailedWithTimeout())
- {
- Context.CurrentResult.SetResult(ResultState.Failure, string.Format("Test exceeded Timeout value of {0}ms", Context.TestCaseTimeout));
- }
- while (executeEnumerable.MoveNext()) {}
- Result = Context.CurrentResult;
- }
- finally
- {
- WorkItemComplete();
- }
- }
- }
- }
|