UnityGame/Library/PackageCache/com.unity.test-framework/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs
2024-10-27 10:53:47 +03:00

52 lines
1.7 KiB
C#

using System;
using System.Collections;
using System.Reflection;
using NUnit.Framework;
using NUnit.Framework.Interfaces;
using NUnit.Framework.Internal;
namespace UnityEngine.TestTools.TestRunner
{
internal class TestEnumeratorWrapper
{
private readonly TestMethod m_TestMethod;
public TestEnumeratorWrapper(TestMethod testMethod)
{
m_TestMethod = testMethod;
}
public IEnumerator GetEnumerator(ITestExecutionContext context)
{
if (m_TestMethod.Method.ReturnType.Type == typeof(IEnumerator))
{
return HandleEnumerableTest(context);
}
var message = string.Format("Return type {0} of {1} in {2} is not supported.",
m_TestMethod.Method.ReturnType, m_TestMethod.Method.Name, m_TestMethod.Method.TypeInfo.FullName);
if (m_TestMethod.Method.ReturnType.Type == typeof(IEnumerable))
{
message += "\nDid you mean IEnumerator?";
}
throw new InvalidSignatureException(message);
}
private IEnumerator HandleEnumerableTest(ITestExecutionContext context)
{
try
{
return m_TestMethod.Method.MethodInfo.Invoke(context.TestObject, m_TestMethod.parms != null ? m_TestMethod.parms.OriginalArguments : null) as IEnumerator;
}
catch (TargetInvocationException e)
{
if (e.InnerException is IgnoreException)
{
context.CurrentResult.SetResult(ResultState.Ignored, e.InnerException.Message);
return null;
}
throw;
}
}
}
}