Skip to content

Commit cbac8ed

Browse files
Added test for UI navigation when localMultiPlayerRoot is set null.
Added a new test to verify UI navigation and submit actions using a gamepad when the event system's playerRoot (localMultiPlayerRoot) is set and when it is null. Ensures navigation and submit functionality work correctly in both scenarios.
1 parent b40d8c1 commit cbac8ed

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

Assets/Tests/InputSystem/Plugins/UITests.cs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2764,6 +2764,81 @@ public void UI_ClickDraggingMouseDoesNotAllocateGCMemory()
27642764
}, Is.Not.AllocatingGCMemory());
27652765
}
27662766

2767+
[UnityTest]
2768+
[Category("UI")]
2769+
public IEnumerator UI_CanNavigateUI_WithLocalMultiPlayerRoot_Null_UsingGamepads()
2770+
{
2771+
// Setup navigation
2772+
var gamepad = InputSystem.AddDevice<Gamepad>();
2773+
var scene = CreateTestUI(makeSelectable: true);
2774+
2775+
// Create actions for navigation
2776+
var asset = ScriptableObject.CreateInstance<InputActionAsset>();
2777+
var map = asset.AddActionMap("map");
2778+
var moveAction = map.AddAction("move", type: InputActionType.Value, binding: "<Gamepad>/leftStick");
2779+
var submitAction = map.AddAction("submit", type: InputActionType.Button, binding: "<Gamepad>/buttonSouth");
2780+
2781+
// Assign actions to the UI module
2782+
scene.uiModule.move = InputActionReference.Create(moveAction);
2783+
scene.uiModule.submit = InputActionReference.Create(submitAction);
2784+
map.Enable();
2785+
2786+
// Test 1: Assign localMultiPlayerRoot to a value
2787+
scene.eventSystem.playerRoot = scene.parentGameObject;
2788+
2789+
// Initial selection
2790+
scene.eventSystem.SetSelectedGameObject(scene.leftGameObject);
2791+
yield return null;
2792+
2793+
// Move right
2794+
Set(gamepad.leftStick, new Vector2(1, 0));
2795+
yield return null;
2796+
2797+
Assert.That(scene.eventSystem.currentSelectedGameObject, Is.SameAs(scene.rightGameObject),"Right navigation did not work when localMultiPlayerRoot was set");
2798+
2799+
// Move left
2800+
Set(gamepad.leftStick, Vector2.zero);
2801+
yield return null;
2802+
Set(gamepad.leftStick, new Vector2(-1, 0));
2803+
yield return null;
2804+
2805+
Assert.That(scene.eventSystem.currentSelectedGameObject, Is.SameAs(scene.leftGameObject),"Left navigation did not work when localMultiPlayerRoot was set");
2806+
2807+
// Reset stick position
2808+
Set(gamepad.leftStick, Vector2.zero);
2809+
yield return null;
2810+
2811+
// Test 2: With localMultiPlayerRoot set to null
2812+
scene.eventSystem.playerRoot = null;
2813+
2814+
// Reset selection
2815+
scene.eventSystem.SetSelectedGameObject(scene.leftGameObject);
2816+
yield return null;
2817+
2818+
// Move right
2819+
Set(gamepad.leftStick, new Vector2(1, 0));
2820+
yield return null;
2821+
2822+
Assert.That(scene.eventSystem.currentSelectedGameObject, Is.SameAs(scene.rightGameObject),"Right navigation did not work when localMultiPlayerRoot was null");
2823+
2824+
// Move left
2825+
Set(gamepad.leftStick, Vector2.zero);
2826+
yield return null;
2827+
Set(gamepad.leftStick, new Vector2(-1, 0));
2828+
yield return null;
2829+
2830+
Assert.That(scene.eventSystem.currentSelectedGameObject, Is.SameAs(scene.leftGameObject),"Left navigation did not work when localMultiPlayerRoot was null");
2831+
2832+
// Submit
2833+
PressAndRelease(gamepad.buttonSouth);
2834+
yield return null;
2835+
2836+
Assert.That(scene.leftChildReceiver.events, Has.Exactly(1).With.Property("type").EqualTo(EventType.Submit),"Submit event was not received when localMultiPlayerRoot was null");
2837+
2838+
// Checking that localMultiPlayerRoot is null
2839+
Assert.AreEqual(null, scene.uiModule.localMultiPlayerRoot);
2840+
}
2841+
27672842
[UnityTest]
27682843
[Category("UI")]
27692844
// Check that two players can have separate UI, and that both selections will stay active when

0 commit comments

Comments
 (0)