From 6504c53d1f8ab33a95601ef75ae10734c52c55b8 Mon Sep 17 00:00:00 2001 From: Aswin Gopal Date: Mon, 7 Apr 2025 20:18:15 +0530 Subject: [PATCH 1/7] Added test to cover the fix --- .../CustomProcessorEnumTest.cs | 112 ++++++++++++++++++ .../CustomProcessorEnumTest.cs.meta | 2 + 2 files changed, 114 insertions(+) create mode 100644 Assets/Tests/InputSystem.Editor/CustomProcessorEnumTest.cs create mode 100644 Assets/Tests/InputSystem.Editor/CustomProcessorEnumTest.cs.meta diff --git a/Assets/Tests/InputSystem.Editor/CustomProcessorEnumTest.cs b/Assets/Tests/InputSystem.Editor/CustomProcessorEnumTest.cs new file mode 100644 index 0000000000..71c62036c3 --- /dev/null +++ b/Assets/Tests/InputSystem.Editor/CustomProcessorEnumTest.cs @@ -0,0 +1,112 @@ +#if UNITY_EDITOR && UNITY_INPUT_SYSTEM_PROJECT_WIDE_ACTIONS && UNITY_6000_0_OR_NEWER + +using System; +using NUnit.Framework; +using System.Collections; +using System.Linq; +using UnityEditor; +using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.Editor; +using UnityEngine.TestTools; +using UnityEngine.UIElements; + +public enum SomeEnum +{ + OptionA = 10, + OptionB = 20, + OptionC = 50, + OptionD = 100 +} + +#if UNITY_EDITOR +[InitializeOnLoad] +#endif +public class CustomProcessor : InputProcessor +{ + public SomeEnum SomeEnum; + +#if UNITY_EDITOR + static CustomProcessor() + { + Initialize(); + } +#endif + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + private static void Initialize() + { + InputSystem.RegisterProcessor(); + } + + public override float Process(float value, InputControl control) + { + return value; + } +} + +internal class CustomProcessorEnumTest : UIToolkitBaseTestWindow +{ + InputActionAsset m_Asset; + + public override void OneTimeSetUp() + { + base.OneTimeSetUp(); + m_Asset = AssetDatabaseUtils.CreateAsset(); + + var actionMap = m_Asset.AddActionMap("Action Map"); + + actionMap.AddAction("Action", InputActionType.Value, processors: "Custom(SomeEnum=10)"); + } + + public override void OneTimeTearDown() + { + AssetDatabaseUtils.Restore(); + base.OneTimeTearDown(); + } + + public override IEnumerator UnitySetup() + { + m_Window = InputActionsEditorWindow.OpenEditor(m_Asset); + yield return base.UnitySetup(); + } + + [UnityTest] + public IEnumerator CustomProcessorEnum_SerialiseTheValue_InAsset() + { + var json = m_Window.currentAssetInEditor.ToJson(); + + Assert.That(json.Contains("Custom(SomeEnum=10)"), Is.True, + "Serialized JSON does not contain the expected custom processor string for OptionA."); + + var dropdownList = m_Window.rootVisualElement.Query().Where(d => d.choices != null && d.choices.Contains("OptionA") && d.choices.Contains("OptionB")).ToList(); + Assume.That(dropdownList.Count > 0, Is.True, "Enum parameter dropdown not found in the UI."); + + var dropdown = dropdownList.First(); + + var newIndex = dropdown.choices.IndexOf("OptionB"); + var oldValue = dropdown.value; + var newValue = dropdown.choices[newIndex]; + + dropdown.value = newValue; + + var changeEvent = ChangeEvent.GetPooled(SomeEnum.OptionA, SomeEnum.OptionC); + changeEvent.target = dropdown; + dropdown.SendEvent(changeEvent); + + var saveButton = m_Window.rootVisualElement.Q