123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using NUnit.Framework;
- using NUnit.Framework.Interfaces;
- using NUnit.Framework.Internal;
- using NUnit.Framework.Internal.Execution;
- namespace UnityEngine.TestRunner.NUnitExtensions.Runner
- {
- internal abstract class UnityWorkItem
- {
- protected readonly WorkItemFactory m_Factory;
- protected bool m_ExecuteTestStartEvent;
- protected bool m_DontRunRestoringResult;
- protected const int k_DefaultTimeout = 1000 * 180;
- public event EventHandler Completed;
- public bool ResultedInDomainReload { get; internal set; }
- public UnityTestExecutionContext Context { get; private set; }
- public Test Test { get; private set; }
- public TestResult Result { get; protected set; }
- public WorkItemState State { get; private set; }
- public List<ITestAction> Actions { get; private set; }
- protected UnityWorkItem(Test test, WorkItemFactory factory)
- {
- m_Factory = factory;
- Test = test;
- Actions = new List<ITestAction>();
- Result = test.MakeTestResult();
- State = WorkItemState.Ready;
- m_ExecuteTestStartEvent = ShouldExecuteStartEvent();
- m_DontRunRestoringResult = ShouldRestore(test);
- }
- protected static bool ShouldRestore(ITest loadedTest)
- {
- return UnityWorkItemDataHolder.alreadyExecutedTests != null &&
- UnityWorkItemDataHolder.alreadyExecutedTests.Contains(loadedTest.GetUniqueName());
- }
- protected bool ShouldExecuteStartEvent()
- {
- return UnityWorkItemDataHolder.alreadyStartedTests != null &&
- UnityWorkItemDataHolder.alreadyStartedTests.All(x => x != Test.GetUniqueName()) &&
- !ShouldRestore(Test);
- }
- protected abstract IEnumerable PerformWork();
- public void InitializeContext(UnityTestExecutionContext context)
- {
- Context = context;
- if (Test is TestAssembly)
- Actions.AddRange(ActionsHelper.GetActionsFromTestAssembly((TestAssembly)Test));
- else if (Test is ParameterizedMethodSuite)
- Actions.AddRange(ActionsHelper.GetActionsFromTestMethodInfo(Test.Method));
- else if (Test.TypeInfo != null)
- Actions.AddRange(ActionsHelper.GetActionsFromTypesAttributes(Test.TypeInfo.Type));
- }
- public virtual IEnumerable Execute()
- {
- Context.CurrentTest = this.Test;
- Context.CurrentResult = this.Result;
- if (m_ExecuteTestStartEvent)
- {
- Context.Listener.TestStarted(Test);
- }
- Context.StartTime = DateTime.UtcNow;
- Context.StartTicks = Stopwatch.GetTimestamp();
- State = WorkItemState.Running;
- return PerformWork();
- }
- protected void WorkItemComplete()
- {
- State = WorkItemState.Complete;
- Result.StartTime = Context.StartTime;
- Result.EndTime = DateTime.UtcNow;
- long tickCount = Stopwatch.GetTimestamp() - Context.StartTicks;
- double seconds = (double)tickCount / Stopwatch.Frequency;
- Result.Duration = seconds;
- //Result.AssertCount += Context.AssertCount;
- Context.Listener.TestFinished(Result);
- if (Completed != null)
- Completed(this, EventArgs.Empty);
- Context.TestObject = null;
- Test.Fixture = null;
- }
- public virtual void Cancel(bool force)
- {
- Result.SetResult(ResultState.Cancelled, "Cancelled by user");
- Context.Listener.TestFinished(Result);
- }
- }
- }
|