예제 #1
0
        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, new UnityTestTimeoutException(Context.TestCaseTimeout).Message);
                }

                while (executeEnumerable.MoveNext())
                {
                }

                Result = Context.CurrentResult;
            }
            finally
            {
                WorkItemComplete();
            }
        }