52 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|