53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using System.Collections; | ||
|  | using System.Reflection; | ||
|  | using System.Runtime.ExceptionServices; | ||
|  | using System.Threading.Tasks; | ||
|  | using NUnit.Framework; | ||
|  | using NUnit.Framework.Interfaces; | ||
|  | using NUnit.Framework.Internal; | ||
|  | 
 | ||
|  | namespace UnityEngine.TestTools.TestRunner | ||
|  | { | ||
|  |     internal class TestTaskWrapper | ||
|  |     { | ||
|  |         private readonly TestMethod m_TestMethod; | ||
|  | 
 | ||
|  |         public TestTaskWrapper(TestMethod testMethod) | ||
|  |         { | ||
|  |             m_TestMethod = testMethod; | ||
|  |         } | ||
|  | 
 | ||
|  |         public IEnumerator Execute(ITestExecutionContext context) | ||
|  |         { | ||
|  |             var task = HandleEnumerableTest(context); | ||
|  |             while (!task.IsCompleted) | ||
|  |             { | ||
|  |                 yield return null; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (task.IsFaulted) | ||
|  |             { | ||
|  |                 ExceptionDispatchInfo.Capture(task.Exception.InnerExceptions.Count == 1 ? task.Exception.InnerException : task.Exception).Throw(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         private Task HandleEnumerableTest(ITestExecutionContext context) | ||
|  |         { | ||
|  |             try | ||
|  |             { | ||
|  |                 return m_TestMethod.Method.MethodInfo.Invoke(context.TestObject, m_TestMethod.parms != null ? m_TestMethod.parms.OriginalArguments : null) as Task; | ||
|  |             } | ||
|  |             catch (TargetInvocationException e) | ||
|  |             { | ||
|  |                 if (e.InnerException is IgnoreException) | ||
|  |                 { | ||
|  |                     context.CurrentResult.SetResult(ResultState.Ignored, e.InnerException.Message); | ||
|  |                     return null; | ||
|  |                 } | ||
|  |                 throw; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |