52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections;
 | |
| using System.Reflection;
 | |
| using NUnit.Framework;
 | |
| using NUnit.Framework.Interfaces;
 | |
| using NUnit.Framework.Internal;
 | |
| 
 | |
| namespace UnityEngine.TestTools.TestRunner
 | |
| {
 | |
|     internal class TestEnumeratorWrapper
 | |
|     {
 | |
|         private readonly TestMethod m_TestMethod;
 | |
| 
 | |
|         public TestEnumeratorWrapper(TestMethod testMethod)
 | |
|         {
 | |
|             m_TestMethod = testMethod;
 | |
|         }
 | |
| 
 | |
|         public IEnumerator GetEnumerator(ITestExecutionContext context)
 | |
|         {
 | |
|             if (m_TestMethod.Method.ReturnType.Type == typeof(IEnumerator))
 | |
|             {
 | |
|                 return HandleEnumerableTest(context);
 | |
|             }
 | |
|             var message = string.Format("Return type {0} of {1} in {2} is not supported.",
 | |
|                 m_TestMethod.Method.ReturnType, m_TestMethod.Method.Name, m_TestMethod.Method.TypeInfo.FullName);
 | |
|             if (m_TestMethod.Method.ReturnType.Type == typeof(IEnumerable))
 | |
|             {
 | |
|                 message += "\nDid you mean IEnumerator?";
 | |
|             }
 | |
|             throw new InvalidSignatureException(message);
 | |
|         }
 | |
| 
 | |
|         private IEnumerator HandleEnumerableTest(ITestExecutionContext context)
 | |
|         {
 | |
|             try
 | |
|             {
 | |
|                 return m_TestMethod.Method.MethodInfo.Invoke(context.TestObject, m_TestMethod.parms != null ? m_TestMethod.parms.OriginalArguments : null) as IEnumerator;
 | |
|             }
 | |
|             catch (TargetInvocationException e)
 | |
|             {
 | |
|                 if (e.InnerException is IgnoreException)
 | |
|                 {
 | |
|                     context.CurrentResult.SetResult(ResultState.Ignored, e.InnerException.Message);
 | |
|                     return null;
 | |
|                 }
 | |
|                 throw;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |