TestEnumeratorWrapper.cs
1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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;
}
}
}
}