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);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |