From c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 19 Apr 2020 17:19:32 -0400 Subject: Inital commit --- .../NUnitExtension/Attributes.meta | 8 + .../Attributes/AssetPipelineIgnore.cs | 63 ++++++++ .../Attributes/AssetPipelineIgnore.cs.meta | 11 ++ .../Attributes/ITestPlayerBuildModifier.cs | 7 + .../Attributes/ITestPlayerBuildModifier.cs.meta | 11 ++ .../Attributes/TestPlayerBuildModifierAttribute.cs | 25 ++++ .../TestPlayerBuildModifierAttribute.cs.meta | 11 ++ .../NUnitExtension/TestRunnerStateSerializer.cs | 162 +++++++++++++++++++++ .../TestRunnerStateSerializer.cs.meta | 11 ++ 9 files changed, 309 insertions(+) create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta (limited to 'Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension') diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes.meta new file mode 100644 index 0000000..585e7ee --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96c503bf059df984c86eecf572370347 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs new file mode 100644 index 0000000..d1d579f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs @@ -0,0 +1,63 @@ +using System; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEditor.TestTools +{ + /// + /// Ignore attributes dedicated to Asset Import Pipeline backend version handling. + /// + internal static class AssetPipelineIgnore + { + internal enum AssetPipelineBackend + { + V1, + V2 + } + + /// + /// Ignore the test when running with the legacy Asset Import Pipeline V1 backend. + /// + internal class IgnoreInV1 : AssetPipelineIgnoreAttribute + { + public IgnoreInV1(string ignoreReason) : base(AssetPipelineBackend.V1, ignoreReason) {} + } + + /// + /// Ignore the test when running with the latest Asset Import Pipeline V2 backend. + /// + internal class IgnoreInV2 : AssetPipelineIgnoreAttribute + { + public IgnoreInV2(string ignoreReason) : base(AssetPipelineBackend.V2, ignoreReason) {} + } + + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + internal class AssetPipelineIgnoreAttribute : NUnitAttribute, IApplyToTest + { + readonly string m_IgnoreReason; + readonly AssetPipelineBackend m_IgnoredBackend; + static readonly AssetPipelineBackend k_ActiveBackend = AssetDatabase.IsV2Enabled() + ? AssetPipelineBackend.V2 + : AssetPipelineBackend.V1; + + static string ActiveBackendName = Enum.GetName(typeof(AssetPipelineBackend), k_ActiveBackend); + + public AssetPipelineIgnoreAttribute(AssetPipelineBackend backend, string ignoreReason) + { + m_IgnoredBackend = backend; + m_IgnoreReason = ignoreReason; + } + + public void ApplyToTest(Test test) + { + if (k_ActiveBackend == m_IgnoredBackend) + { + test.RunState = RunState.Ignored; + var skipReason = string.Format("Not supported by asset pipeline {0} backend {1}", ActiveBackendName, m_IgnoreReason); + test.Properties.Add(PropertyNames.SkipReason, skipReason); + } + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta new file mode 100644 index 0000000..3d9d352 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b88caca58e05ee74486d86fb404c48e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs new file mode 100644 index 0000000..99d7515 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools +{ + public interface ITestPlayerBuildModifier + { + BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta new file mode 100644 index 0000000..b491f6b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d2f47eae5f447748892c46848956d5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs new file mode 100644 index 0000000..bcf7c24 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs @@ -0,0 +1,25 @@ +using System; + +namespace UnityEditor.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly)] + public class TestPlayerBuildModifierAttribute : Attribute + { + private Type m_Type; + public TestPlayerBuildModifierAttribute(Type type) + { + var interfaceType = typeof(ITestPlayerBuildModifier); + if (!interfaceType.IsAssignableFrom(type)) + { + throw new ArgumentException(string.Format("Type provided to {0} does not implement {1}", this.GetType().Name, interfaceType.Name)); + } + m_Type = type; + } + + internal ITestPlayerBuildModifier ConstructModifier() + { + return Activator.CreateInstance(m_Type) as ITestPlayerBuildModifier; + } + } +} + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta new file mode 100644 index 0000000..6020add --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd57b1176859fc84e93586103d3b5f73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs new file mode 100644 index 0000000..351e622 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs @@ -0,0 +1,162 @@ +using System; +using System.Reflection; +using System.Text; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.NUnitExtensions; +using UnityEngine.TestTools.Logging; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class TestRunnerStateSerializer : IStateSerializer + { + private const BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy; + + [SerializeField] + private HideFlags m_OriginalHideFlags; + + [SerializeField] + private bool m_ShouldRestore; + + [SerializeField] + private string m_TestObjectTypeName; + + [SerializeField] + private ScriptableObject m_TestObject; + + [SerializeField] + private string m_TestObjectTxt; + + [SerializeField] + private long StartTicks; + + [SerializeField] + private double StartTimeOA; + + [SerializeField] + private string output; + + [SerializeField] + private LogMatch[] m_ExpectedLogs; + + public bool ShouldRestore() + { + return m_ShouldRestore; + } + + public void SaveContext() + { + var currentContext = UnityTestExecutionContext.CurrentContext; + + if (currentContext.TestObject != null) + { + m_TestObjectTypeName = currentContext.TestObject.GetType().AssemblyQualifiedName; + m_TestObject = null; + m_TestObjectTxt = null; + if (currentContext.TestObject is ScriptableObject) + { + m_TestObject = currentContext.TestObject as ScriptableObject; + m_OriginalHideFlags = m_TestObject.hideFlags; + m_TestObject.hideFlags |= HideFlags.DontSave; + } + else + { + m_TestObjectTxt = JsonUtility.ToJson(currentContext.TestObject); + } + } + + output = currentContext.CurrentResult.Output; + StartTicks = currentContext.StartTicks; + StartTimeOA = currentContext.StartTime.ToOADate(); + if (LogScope.HasCurrentLogScope()) + { + m_ExpectedLogs = LogScope.Current.ExpectedLogs.ToArray(); + } + + m_ShouldRestore = true; + } + + public void RestoreContext() + { + var currentContext = UnityTestExecutionContext.CurrentContext; + + var outputProp = currentContext.CurrentResult.GetType().BaseType.GetField("_output", Flags); + (outputProp.GetValue(currentContext.CurrentResult) as StringBuilder).Append(output); + + currentContext.StartTicks = StartTicks; + currentContext.StartTime = DateTime.FromOADate(StartTimeOA); + if (LogScope.HasCurrentLogScope()) + { + LogScope.Current.ExpectedLogs = new Queue(m_ExpectedLogs); + } + + m_ShouldRestore = false; + } + + public bool CanRestoreFromScriptableObject(Type requestedType) + { + if (m_TestObject == null) + { + return false; + } + return m_TestObjectTypeName == requestedType.AssemblyQualifiedName; + } + + public ScriptableObject RestoreScriptableObjectInstance() + { + if (m_TestObject == null) + { + Debug.LogError("No object to restore"); + return null; + } + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + var temp = m_TestObject; + m_TestObject = null; + m_TestObjectTypeName = null; + return temp; + } + + public bool CanRestoreFromJson(Type requestedType) + { + if (string.IsNullOrEmpty(m_TestObjectTxt)) + { + return false; + } + return m_TestObjectTypeName == requestedType.AssemblyQualifiedName; + } + + public void RestoreClassFromJson(ref object instance) + { + if (string.IsNullOrEmpty(m_TestObjectTxt)) + { + Debug.LogWarning("No JSON representation to restore"); + return; + } + JsonUtility.FromJsonOverwrite(m_TestObjectTxt, instance); + m_TestObjectTxt = null; + m_TestObjectTypeName = null; + } + + private void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (m_TestObject == null) + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + return; + } + + //We set the DontSave flag here because the ScriptableObject would be nulled right before entering EditMode + if (state == PlayModeStateChange.ExitingPlayMode) + { + m_TestObject.hideFlags |= HideFlags.DontSave; + } + else if (state == PlayModeStateChange.EnteredEditMode) + { + m_TestObject.hideFlags = m_OriginalHideFlags; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta new file mode 100644 index 0000000..94495c1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 124533853216377448d786fd7c725701 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- cgit v1.2.3