summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
commitc55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch)
treeee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs
downloadProject-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs')
-rw-r--r--Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs127
1 files changed, 127 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs
new file mode 100644
index 0000000..7cf2103
--- /dev/null
+++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs
@@ -0,0 +1,127 @@
+using System;
+using System.Collections;
+using System.Linq;
+using NUnit.Framework;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal;
+using NUnit.Framework.Internal.Commands;
+using UnityEngine.TestTools;
+
+namespace UnityEngine.TestRunner.NUnitExtensions.Runner
+{
+ internal static class TestCommandBuilder
+ {
+ public static TestCommand BuildTestCommand(TestMethod test, ITestFilter filter)
+ {
+ if (test.RunState != RunState.Runnable &&
+ !(test.RunState == RunState.Explicit && filter.IsExplicitMatch(test)))
+ {
+ return new SkipCommand(test);
+ }
+
+ var testReturnsIEnumerator = test.Method.ReturnType.Type == typeof(IEnumerator);
+
+ TestCommand command;
+ if (!testReturnsIEnumerator)
+ {
+ command = new TestMethodCommand(test);
+ }
+ else
+ {
+ command = new EnumerableTestMethodCommand(test);
+ }
+
+ command = new UnityLogCheckDelegatingCommand(command);
+ foreach (var wrapper in test.Method.GetCustomAttributes<IWrapTestMethod>(true))
+ {
+ command = wrapper.Wrap(command);
+ if (command == null)
+ {
+ var message = String.Format("IWrapTestMethod implementation '{0}' returned null as command.",
+ wrapper.GetType().FullName);
+ return new FailCommand(test, ResultState.Failure, message);
+ }
+
+ if (testReturnsIEnumerator && !(command is IEnumerableTestMethodCommand))
+ {
+ command = TryReplaceWithEnumerableCommand(command);
+ if (command != null)
+ {
+ continue;
+ }
+
+ var message = String.Format("'{0}' is not supported on {1} as it does not handle returning IEnumerator.",
+ wrapper.GetType().FullName,
+ GetTestBuilderName(test));
+ return new FailCommand(test, ResultState.Failure, message);
+ }
+ }
+
+ command = new UnityEngine.TestTools.TestActionCommand(command);
+ command = new UnityEngine.TestTools.SetUpTearDownCommand(command);
+
+ if (!testReturnsIEnumerator)
+ {
+ command = new ImmediateEnumerableCommand(command);
+ }
+
+ foreach (var wrapper in test.Method.GetCustomAttributes<IWrapSetUpTearDown>(true))
+ {
+ command = wrapper.Wrap(command);
+ if (command == null)
+ {
+ var message = String.Format("IWrapSetUpTearDown implementation '{0}' returned null as command.",
+ wrapper.GetType().FullName);
+ return new FailCommand(test, ResultState.Failure, message);
+ }
+
+ if (testReturnsIEnumerator && !(command is IEnumerableTestMethodCommand))
+ {
+ command = TryReplaceWithEnumerableCommand(command);
+ if (command != null)
+ {
+ continue;
+ }
+
+ var message = String.Format("'{0}' is not supported on {1} as it does not handle returning IEnumerator.",
+ wrapper.GetType().FullName,
+ GetTestBuilderName(test));
+ return new FailCommand(test, ResultState.Failure, message);
+ }
+ }
+
+ command = new EnumerableSetUpTearDownCommand(command);
+ command = new OuterUnityTestActionCommand(command);
+
+ IApplyToContext[] changes = test.Method.GetCustomAttributes<IApplyToContext>(true);
+ if (changes.Length > 0)
+ {
+ command = new EnumerableApplyChangesToContextCommand(command, changes);
+ }
+
+ return command;
+ }
+
+ private static string GetTestBuilderName(TestMethod testMethod)
+ {
+ return new[]
+ {
+ testMethod.Method.GetCustomAttributes<ITestBuilder>(true).Select(attribute => attribute.GetType().Name),
+ testMethod.Method.GetCustomAttributes<ISimpleTestBuilder>(true).Select(attribute => attribute.GetType().Name)
+ }.SelectMany(v => v).FirstOrDefault();
+ }
+
+ private static TestCommand TryReplaceWithEnumerableCommand(TestCommand command)
+ {
+ switch (command.GetType().Name)
+ {
+ case nameof(RepeatAttribute.RepeatedTestCommand):
+ return new EnumerableRepeatedTestCommand(command as RepeatAttribute.RepeatedTestCommand);
+ case nameof(RetryAttribute.RetryCommand):
+ return new EnumerableRetryTestCommand(command as RetryAttribute.RetryCommand);
+ default:
+ return null;
+ }
+ }
+ }
+} \ No newline at end of file