A game about forced loneliness, made by TACStudios
1using System; 2using System.Collections; 3using NUnit.Framework.Interfaces; 4using NUnit.Framework.Internal; 5using NUnit.Framework.Internal.Commands; 6using Unity.Profiling; 7using UnityEngine.TestRunner.NUnitExtensions.Runner; 8using UnityEngine.TestTools.TestRunner; 9 10namespace UnityEngine.TestTools 11{ 12 internal class TaskTestMethodCommand : TestCommand, IEnumerableTestMethodCommand 13 { 14 private readonly TestMethod testMethod; 15 16 public TaskTestMethodCommand(TestMethod testMethod) 17 : base(testMethod) 18 { 19 this.testMethod = testMethod; 20 } 21 22 public IEnumerable ExecuteEnumerable(ITestExecutionContext context) 23 { 24 yield return null; 25 26 IEnumerator currentExecutingTestEnumerator; 27 try 28 { 29 currentExecutingTestEnumerator = new TestTaskWrapper(testMethod).Execute(context); 30 } 31 catch (Exception ex) 32 { 33 context.CurrentResult.RecordException(ex); 34 yield break; 35 } 36 37 if (currentExecutingTestEnumerator != null) 38 { 39 var testEnumeraterYieldInstruction = new TestEnumerator(context, currentExecutingTestEnumerator); 40 41 yield return testEnumeraterYieldInstruction; 42 43 var enumerator = testEnumeraterYieldInstruction.Execute(); 44 45 var executingEnumerator = ExecuteEnumerableAndRecordExceptions(enumerator, context); 46 while (AdvanceEnumerator(executingEnumerator)) 47 { 48 yield return executingEnumerator.Current; 49 } 50 } 51 else 52 { 53 if (context.CurrentResult.ResultState != ResultState.Ignored) 54 { 55 context.CurrentResult.SetResult(ResultState.Success); 56 } 57 } 58 } 59 60 private bool AdvanceEnumerator(IEnumerator enumerator) 61 { 62 using (new ProfilerMarker(testMethod.MethodName).Auto()) 63 return enumerator.MoveNext(); 64 } 65 66 private static IEnumerator ExecuteEnumerableAndRecordExceptions(IEnumerator enumerator, ITestExecutionContext context) 67 { 68 while (true) 69 { 70 try 71 { 72 if (!enumerator.MoveNext()) 73 { 74 break; 75 } 76 } 77 catch (Exception ex) 78 { 79 context.CurrentResult.RecordException(ex); 80 break; 81 } 82 83 if (enumerator.Current is IEnumerator) 84 { 85 var current = (IEnumerator)enumerator.Current; 86 yield return ExecuteEnumerableAndRecordExceptions(current, context); 87 } 88 else 89 { 90 yield return enumerator.Current; 91 } 92 } 93 } 94 95 public override TestResult Execute(ITestExecutionContext context) 96 { 97 throw new NotImplementedException("Use ExecuteEnumerable"); 98 } 99 } 100}