From c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 19 Apr 2020 17:19:32 -0400 Subject: Inital commit --- .../Commands/EnumerableTestMethodCommand.cs | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs (limited to 'Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs') diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs new file mode 100644 index 0000000..17be307 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableTestMethodCommand : TestCommand, IEnumerableTestMethodCommand + { + private readonly TestMethod testMethod; + + public EnumerableTestMethodCommand(TestMethod testMethod) + : base(testMethod) + { + this.testMethod = testMethod; + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + yield return null; + + var currentExecutingTestEnumerator = new TestEnumeratorWrapper(testMethod).GetEnumerator(context); + if (currentExecutingTestEnumerator != null) + { + var testEnumeraterYieldInstruction = new TestEnumerator(context, currentExecutingTestEnumerator); + + yield return testEnumeraterYieldInstruction; + + var enumerator = testEnumeraterYieldInstruction.Execute(); + + var executingEnumerator = ExecuteEnumerableAndRecordExceptions(enumerator, context); + while (executingEnumerator.MoveNext()) + { + yield return executingEnumerator.Current; + } + } + else + { + if (context.CurrentResult.ResultState != ResultState.Ignored) + { + context.CurrentResult.SetResult(ResultState.Success); + } + } + } + + private static IEnumerator ExecuteEnumerableAndRecordExceptions(IEnumerator enumerator, ITestExecutionContext context) + { + while (true) + { + try + { + if (!enumerator.MoveNext()) + { + break; + } + } + catch (Exception ex) + { + context.CurrentResult.RecordException(ex); + break; + } + + if (enumerator.Current is IEnumerator) + { + var current = (IEnumerator)enumerator.Current; + yield return ExecuteEnumerableAndRecordExceptions(current, context); + } + else + { + yield return enumerator.Current; + } + } + } + + public override TestResult Execute(ITestExecutionContext context) + { + throw new NotImplementedException("Use ExecuteEnumerable"); + } + } +} -- cgit v1.2.3