59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using System.Threading; | ||
|  | using NUnit.Framework.Internal; | ||
|  | 
 | ||
|  | namespace UnityEngine.TestTools.NUnitExtensions | ||
|  | { | ||
|  |     internal abstract class BaseDelegator | ||
|  |     { | ||
|  |         protected ManualResetEvent m_Signal = new ManualResetEvent(false); | ||
|  | 
 | ||
|  |         protected object m_Result; | ||
|  |         protected Exception m_Exception; | ||
|  |         protected ITestExecutionContext m_Context; | ||
|  | 
 | ||
|  |         protected bool m_Aborted; | ||
|  | 
 | ||
|  |         protected object HandleResult() | ||
|  |         { | ||
|  |             SetCurrentTestContext(); | ||
|  |             if (m_Exception != null) | ||
|  |             { | ||
|  |                 var temp = m_Exception; | ||
|  |                 m_Exception = null; | ||
|  |                 throw temp; | ||
|  |             } | ||
|  |             var tempResult = m_Result; | ||
|  |             m_Result = null; | ||
|  |             return tempResult; | ||
|  |         } | ||
|  | 
 | ||
|  |         protected void WaitForSignal() | ||
|  |         { | ||
|  |             while (!m_Signal.WaitOne(100)) | ||
|  |             { | ||
|  |                 if (m_Aborted) | ||
|  |                 { | ||
|  |                     m_Aborted = false; | ||
|  |                     Reflect.MethodCallWrapper = null; | ||
|  |                     throw new Exception(); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public void Abort() | ||
|  |         { | ||
|  |             m_Aborted = true; | ||
|  |         } | ||
|  | 
 | ||
|  |         protected void SetCurrentTestContext() | ||
|  |         { | ||
|  |             var prop = typeof(TestExecutionContext).GetProperty("CurrentContext"); | ||
|  |             if (prop != null) | ||
|  |             { | ||
|  |                 prop.SetValue(null, m_Context, null); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |