Rasagar/Library/PackageCache/com.unity.test-framework/UnityEngine.TestRunner/TestRunner/TestTaskWrapper.cs
2024-08-26 23:07:20 +03:00

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