167 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			167 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using System.Collections.Generic; | ||
|  | using System.Diagnostics; | ||
|  | using System.Globalization; | ||
|  | using System.IO; | ||
|  | using NUnit.Framework; | ||
|  | using NUnit.Framework.Constraints; | ||
|  | using NUnit.Framework.Interfaces; | ||
|  | using NUnit.Framework.Internal; | ||
|  | using NUnit.Framework.Internal.Execution; | ||
|  | using UnityEngine.TestTools; | ||
|  | 
 | ||
|  | namespace UnityEngine.TestRunner.NUnitExtensions.Runner | ||
|  | { | ||
|  |     internal class UnityTestExecutionContext : ITestExecutionContext | ||
|  |     { | ||
|  |         private readonly UnityTestExecutionContext _priorContext; | ||
|  |         private TestResult _currentResult; | ||
|  |         private int _assertCount; | ||
|  | 
 | ||
|  |         public static UnityTestExecutionContext CurrentContext { get; set; } | ||
|  | 
 | ||
|  |         public UnityTestExecutionContext Context { get; private set; } | ||
|  | 
 | ||
|  |         public bool Automated { get; set; } | ||
|  |          | ||
|  |         public Test CurrentTest { get; set; } | ||
|  |         public DateTime StartTime { get; set; } | ||
|  |         public long StartTicks { get; set; } | ||
|  |         public TestResult CurrentResult | ||
|  |         { | ||
|  |             get { return _currentResult; } | ||
|  |             set | ||
|  |             { | ||
|  |                 _currentResult = value; | ||
|  |                 if (value != null) | ||
|  |                     OutWriter = value.OutWriter; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public object TestObject { get; set; } | ||
|  |         public string WorkDirectory { get; set; } | ||
|  | 
 | ||
|  | 
 | ||
|  |         private TestExecutionStatus _executionStatus; | ||
|  |         public TestExecutionStatus ExecutionStatus | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 // ExecutionStatus may have been set to StopRequested or AbortRequested | ||
|  |                 // in a prior context. If so, reflect the same setting in this context. | ||
|  |                 if (_executionStatus == TestExecutionStatus.Running && _priorContext != null) | ||
|  |                     _executionStatus = _priorContext.ExecutionStatus; | ||
|  | 
 | ||
|  |                 return _executionStatus; | ||
|  |             } | ||
|  |             set | ||
|  |             { | ||
|  |                 _executionStatus = value; | ||
|  | 
 | ||
|  |                 // Push the same setting up to all prior contexts | ||
|  |                 if (_priorContext != null) | ||
|  |                     _priorContext.ExecutionStatus = value; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public List<ITestAction> UpstreamActions { get; private set; } | ||
|  |         public int TestCaseTimeout { get; set; } | ||
|  |         public CultureInfo CurrentCulture { get; set; } | ||
|  |         public CultureInfo CurrentUICulture { get; set; } | ||
|  |         public ITestListener Listener { get; set; } | ||
|  | 
 | ||
|  |         public UnityTestExecutionContext() | ||
|  |         { | ||
|  |             UpstreamActions = new List<ITestAction>(); | ||
|  |             SetUpTearDownState = new BeforeAfterTestCommandState(); | ||
|  |             OneTimeSetUpTearDownState = new BeforeAfterTestCommandState(); | ||
|  |             OuterUnityTestActionState = new BeforeAfterTestCommandState(); | ||
|  |             EnumerableTestState = new EnumerableTestState(); | ||
|  |         } | ||
|  | 
 | ||
|  |         public UnityTestExecutionContext(BeforeAfterTestCommandState setUpTearDownState, BeforeAfterTestCommandState oneTimeSetUpTearDownState, | ||
|  |             BeforeAfterTestCommandState outerUnityTestActionState, EnumerableTestState enumerableTestState) : this() | ||
|  |         { | ||
|  |             SetUpTearDownState = setUpTearDownState; | ||
|  |             OneTimeSetUpTearDownState = oneTimeSetUpTearDownState; | ||
|  |             OuterUnityTestActionState = outerUnityTestActionState; | ||
|  |             EnumerableTestState = enumerableTestState; | ||
|  |         } | ||
|  | 
 | ||
|  |         public UnityTestExecutionContext(UnityTestExecutionContext other) | ||
|  |         { | ||
|  |             _priorContext = other; | ||
|  | 
 | ||
|  |             CurrentTest = other.CurrentTest; | ||
|  |             CurrentResult = other.CurrentResult; | ||
|  |             TestObject = other.TestObject; | ||
|  |             WorkDirectory = other.WorkDirectory; | ||
|  |             Listener = other.Listener; | ||
|  |             TestCaseTimeout = other.TestCaseTimeout; | ||
|  |             UpstreamActions = new List<ITestAction>(other.UpstreamActions); | ||
|  |             SetUpTearDownState = other.SetUpTearDownState; | ||
|  |             OneTimeSetUpTearDownState = other.OneTimeSetUpTearDownState; | ||
|  |             OuterUnityTestActionState = other.OuterUnityTestActionState; | ||
|  |             EnumerableTestState = other.EnumerableTestState; | ||
|  | 
 | ||
|  |             TestContext.CurrentTestExecutionContext = this; | ||
|  | 
 | ||
|  |             CurrentCulture = other.CurrentCulture; | ||
|  |             CurrentUICulture = other.CurrentUICulture; | ||
|  |             TestMode = other.TestMode; | ||
|  |             IgnoreTests = other.IgnoreTests; | ||
|  |             FeatureFlags = other.FeatureFlags; | ||
|  |             CurrentContext = this; | ||
|  |             Automated = other.Automated; | ||
|  |             RepeatCount = other.RepeatCount; | ||
|  |             RetryCount = other.RetryCount; | ||
|  |         } | ||
|  | 
 | ||
|  |         public TextWriter OutWriter { get; private set; } | ||
|  |         public bool StopOnError { get; set; } | ||
|  | 
 | ||
|  |         public IWorkItemDispatcher Dispatcher { get; set; } | ||
|  | 
 | ||
|  |         public ParallelScope ParallelScope { get; set; } | ||
|  |         public string WorkerId { get; private set; } | ||
|  |         public Randomizer RandomGenerator { get; private set; } | ||
|  |         public ValueFormatter CurrentValueFormatter { get; private set; } | ||
|  |         public bool IsSingleThreaded { get; set; } | ||
|  |         public BeforeAfterTestCommandState SetUpTearDownState { get; set; } | ||
|  |         public BeforeAfterTestCommandState OneTimeSetUpTearDownState { get; set; } | ||
|  |         public BeforeAfterTestCommandState OuterUnityTestActionState { get; set; } | ||
|  |         public EnumerableTestState EnumerableTestState { get; set; } | ||
|  |         public IgnoreTest[] IgnoreTests { get; set; } | ||
|  |         public FeatureFlags FeatureFlags { get; set; } | ||
|  |         public int RetryCount { get; set; } | ||
|  |         public int RepeatCount { get; set; } | ||
|  |         public EnumerableTestState RetryRepeatState { get; set; } | ||
|  | 
 | ||
|  |         internal int AssertCount | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 return _assertCount; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public TestPlatform TestMode { get; set; } | ||
|  | 
 | ||
|  |         public void IncrementAssertCount() | ||
|  |         { | ||
|  |             _assertCount += 1; | ||
|  |         } | ||
|  | 
 | ||
|  |         public void AddFormatter(ValueFormatterFactory formatterFactory) | ||
|  |         { | ||
|  |             throw new NotImplementedException(); | ||
|  |         } | ||
|  |          | ||
|  |         public bool HasTimedOut() | ||
|  |         { | ||
|  |             return Stopwatch.GetTimestamp() - StartTicks > | ||
|  |                    TestCaseTimeout * (Stopwatch.Frequency / 1000f); | ||
|  |         } | ||
|  |     } | ||
|  | } |