Skip to content

Commit b36bf50

Browse files
authored
Merge branch 'develop' into migrate_ci_to_recipe_engine
2 parents a519e93 + d1d72d5 commit b36bf50

File tree

16 files changed

+440
-43
lines changed

16 files changed

+440
-43
lines changed

Assets/Tests/InputSystem/CorePerformanceTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,6 @@ public void Performance_ReadEveryKey()
126126
int keyIndex = 0;
127127
foreach (var key in keyboard.allKeys)
128128
{
129-
if (++keyIndex == (int)KeyEx.IMESelected) // Skip IMESelected as it's not a real key.
130-
continue;
131129
key.ReadValue();
132130
}
133131
})

Assets/Tests/InputSystem/CoreTests_Devices.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2849,15 +2849,6 @@ public void Devices_CanGetNameOfCurrentKeyboardLayout()
28492849
Assert.That(keyboard.keyboardLayout, Is.EqualTo("new"));
28502850
}
28512851

2852-
[Test]
2853-
[Category("Devices")]
2854-
public void Devices_CanGetKeyCodeFromKeyboardKey()
2855-
{
2856-
var keyboard = InputSystem.AddDevice<Keyboard>();
2857-
2858-
Assert.That(keyboard.aKey.keyCode, Is.EqualTo(Key.A));
2859-
}
2860-
28612852
[Test]
28622853
[Category("Devices")]
28632854
public void Devices_CanLookUpKeyFromKeyboardUsingKeyCode()
Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
using System;
2+
using System.Linq;
3+
using NUnit.Framework;
4+
using UnityEngine;
5+
using UnityEngine.InputSystem;
6+
7+
// Functional testing of built-in device UnityEngine.InputSystem.Keyboard.
8+
9+
partial class CoreTests
10+
{
11+
private static readonly Key[] sKeys = Enum.GetValues(typeof(Key)).Cast<Key>().ToArray();
12+
13+
[Test]
14+
[Category("Devices")]
15+
public void Devices_Keyboard_CanGetKeyCodeFromKeyboardKey()
16+
{
17+
var keyboard = InputSystem.AddDevice<Keyboard>();
18+
19+
Assert.That(keyboard.spaceKey.keyCode, Is.EqualTo(Key.Space));
20+
Assert.That(keyboard.enterKey.keyCode, Is.EqualTo(Key.Enter));
21+
Assert.That(keyboard.tabKey.keyCode, Is.EqualTo(Key.Tab));
22+
Assert.That(keyboard.backquoteKey.keyCode, Is.EqualTo(Key.Backquote));
23+
Assert.That(keyboard.quoteKey.keyCode, Is.EqualTo(Key.Quote));
24+
Assert.That(keyboard.semicolonKey.keyCode, Is.EqualTo(Key.Semicolon));
25+
Assert.That(keyboard.commaKey.keyCode, Is.EqualTo(Key.Comma));
26+
Assert.That(keyboard.periodKey.keyCode, Is.EqualTo(Key.Period));
27+
Assert.That(keyboard.slashKey.keyCode, Is.EqualTo(Key.Slash));
28+
Assert.That(keyboard.backslashKey.keyCode, Is.EqualTo(Key.Backslash));
29+
Assert.That(keyboard.leftBracketKey.keyCode, Is.EqualTo(Key.LeftBracket));
30+
Assert.That(keyboard.rightBracketKey.keyCode, Is.EqualTo(Key.RightBracket));
31+
Assert.That(keyboard.minusKey.keyCode, Is.EqualTo(Key.Minus));
32+
Assert.That(keyboard.equalsKey.keyCode, Is.EqualTo(Key.Equals));
33+
34+
Assert.That(keyboard.aKey.keyCode, Is.EqualTo(Key.A));
35+
Assert.That(keyboard.bKey.keyCode, Is.EqualTo(Key.B));
36+
Assert.That(keyboard.cKey.keyCode, Is.EqualTo(Key.C));
37+
Assert.That(keyboard.dKey.keyCode, Is.EqualTo(Key.D));
38+
Assert.That(keyboard.eKey.keyCode, Is.EqualTo(Key.E));
39+
Assert.That(keyboard.fKey.keyCode, Is.EqualTo(Key.F));
40+
Assert.That(keyboard.gKey.keyCode, Is.EqualTo(Key.G));
41+
Assert.That(keyboard.hKey.keyCode, Is.EqualTo(Key.H));
42+
Assert.That(keyboard.iKey.keyCode, Is.EqualTo(Key.I));
43+
Assert.That(keyboard.jKey.keyCode, Is.EqualTo(Key.J));
44+
Assert.That(keyboard.kKey.keyCode, Is.EqualTo(Key.K));
45+
Assert.That(keyboard.lKey.keyCode, Is.EqualTo(Key.L));
46+
Assert.That(keyboard.mKey.keyCode, Is.EqualTo(Key.M));
47+
Assert.That(keyboard.nKey.keyCode, Is.EqualTo(Key.N));
48+
Assert.That(keyboard.oKey.keyCode, Is.EqualTo(Key.O));
49+
Assert.That(keyboard.pKey.keyCode, Is.EqualTo(Key.P));
50+
Assert.That(keyboard.qKey.keyCode, Is.EqualTo(Key.Q));
51+
Assert.That(keyboard.rKey.keyCode, Is.EqualTo(Key.R));
52+
Assert.That(keyboard.sKey.keyCode, Is.EqualTo(Key.S));
53+
Assert.That(keyboard.tKey.keyCode, Is.EqualTo(Key.T));
54+
Assert.That(keyboard.uKey.keyCode, Is.EqualTo(Key.U));
55+
Assert.That(keyboard.vKey.keyCode, Is.EqualTo(Key.V));
56+
Assert.That(keyboard.wKey.keyCode, Is.EqualTo(Key.W));
57+
Assert.That(keyboard.xKey.keyCode, Is.EqualTo(Key.X));
58+
Assert.That(keyboard.yKey.keyCode, Is.EqualTo(Key.Y));
59+
Assert.That(keyboard.zKey.keyCode, Is.EqualTo(Key.Z));
60+
61+
Assert.That(keyboard.digit1Key.keyCode, Is.EqualTo(Key.Digit1));
62+
Assert.That(keyboard.digit2Key.keyCode, Is.EqualTo(Key.Digit2));
63+
Assert.That(keyboard.digit3Key.keyCode, Is.EqualTo(Key.Digit3));
64+
Assert.That(keyboard.digit4Key.keyCode, Is.EqualTo(Key.Digit4));
65+
Assert.That(keyboard.digit5Key.keyCode, Is.EqualTo(Key.Digit5));
66+
Assert.That(keyboard.digit6Key.keyCode, Is.EqualTo(Key.Digit6));
67+
Assert.That(keyboard.digit7Key.keyCode, Is.EqualTo(Key.Digit7));
68+
Assert.That(keyboard.digit8Key.keyCode, Is.EqualTo(Key.Digit8));
69+
Assert.That(keyboard.digit9Key.keyCode, Is.EqualTo(Key.Digit9));
70+
Assert.That(keyboard.digit0Key.keyCode, Is.EqualTo(Key.Digit0));
71+
72+
Assert.That(keyboard.leftShiftKey.keyCode, Is.EqualTo(Key.LeftShift));
73+
Assert.That(keyboard.rightShiftKey.keyCode, Is.EqualTo(Key.RightShift));
74+
Assert.That(keyboard.leftAltKey.keyCode, Is.EqualTo(Key.LeftAlt));
75+
Assert.That(keyboard.rightAltKey.keyCode, Is.EqualTo(Key.RightAlt));
76+
Assert.That(keyboard.leftCtrlKey.keyCode, Is.EqualTo(Key.LeftCtrl));
77+
Assert.That(keyboard.rightCtrlKey.keyCode, Is.EqualTo(Key.RightCtrl));
78+
Assert.That(keyboard.leftMetaKey.keyCode, Is.EqualTo(Key.LeftMeta));
79+
Assert.That(keyboard.rightMetaKey.keyCode, Is.EqualTo(Key.RightMeta));
80+
Assert.That(keyboard.leftWindowsKey.keyCode, Is.EqualTo(Key.LeftWindows));
81+
Assert.That(keyboard.rightWindowsKey.keyCode, Is.EqualTo(Key.RightWindows));
82+
Assert.That(keyboard.leftAppleKey.keyCode, Is.EqualTo(Key.LeftApple));
83+
Assert.That(keyboard.rightAppleKey.keyCode, Is.EqualTo(Key.RightApple));
84+
Assert.That(keyboard.leftCommandKey.keyCode, Is.EqualTo(Key.LeftCommand));
85+
Assert.That(keyboard.rightCommandKey.keyCode, Is.EqualTo(Key.RightCommand));
86+
Assert.That(keyboard.contextMenuKey.keyCode, Is.EqualTo(Key.ContextMenu));
87+
Assert.That(keyboard.escapeKey.keyCode, Is.EqualTo(Key.Escape));
88+
Assert.That(keyboard.leftArrowKey.keyCode, Is.EqualTo(Key.LeftArrow));
89+
Assert.That(keyboard.rightArrowKey.keyCode, Is.EqualTo(Key.RightArrow));
90+
Assert.That(keyboard.upArrowKey.keyCode, Is.EqualTo(Key.UpArrow));
91+
Assert.That(keyboard.downArrowKey.keyCode, Is.EqualTo(Key.DownArrow));
92+
Assert.That(keyboard.backspaceKey.keyCode, Is.EqualTo(Key.Backspace));
93+
Assert.That(keyboard.pageDownKey.keyCode, Is.EqualTo(Key.PageDown));
94+
Assert.That(keyboard.pageUpKey.keyCode, Is.EqualTo(Key.PageUp));
95+
Assert.That(keyboard.homeKey.keyCode, Is.EqualTo(Key.Home));
96+
Assert.That(keyboard.endKey.keyCode, Is.EqualTo(Key.End));
97+
Assert.That(keyboard.insertKey.keyCode, Is.EqualTo(Key.Insert));
98+
Assert.That(keyboard.deleteKey.keyCode, Is.EqualTo(Key.Delete));
99+
Assert.That(keyboard.capsLockKey.keyCode, Is.EqualTo(Key.CapsLock));
100+
Assert.That(keyboard.scrollLockKey.keyCode, Is.EqualTo(Key.ScrollLock));
101+
Assert.That(keyboard.numLockKey.keyCode, Is.EqualTo(Key.NumLock));
102+
Assert.That(keyboard.printScreenKey.keyCode, Is.EqualTo(Key.PrintScreen));
103+
Assert.That(keyboard.pauseKey.keyCode, Is.EqualTo(Key.Pause));
104+
Assert.That(keyboard.numpadEnterKey.keyCode, Is.EqualTo(Key.NumpadEnter));
105+
Assert.That(keyboard.numpadDivideKey.keyCode, Is.EqualTo(Key.NumpadDivide));
106+
Assert.That(keyboard.numpadMultiplyKey.keyCode, Is.EqualTo(Key.NumpadMultiply));
107+
Assert.That(keyboard.numpadMinusKey.keyCode, Is.EqualTo(Key.NumpadMinus));
108+
Assert.That(keyboard.numpadPlusKey.keyCode, Is.EqualTo(Key.NumpadPlus));
109+
Assert.That(keyboard.numpadPeriodKey.keyCode, Is.EqualTo(Key.NumpadPeriod));
110+
Assert.That(keyboard.numpadEqualsKey.keyCode, Is.EqualTo(Key.NumpadEquals));
111+
Assert.That(keyboard.numpad0Key.keyCode, Is.EqualTo(Key.Numpad0));
112+
Assert.That(keyboard.numpad1Key.keyCode, Is.EqualTo(Key.Numpad1));
113+
Assert.That(keyboard.numpad2Key.keyCode, Is.EqualTo(Key.Numpad2));
114+
Assert.That(keyboard.numpad3Key.keyCode, Is.EqualTo(Key.Numpad3));
115+
Assert.That(keyboard.numpad4Key.keyCode, Is.EqualTo(Key.Numpad4));
116+
Assert.That(keyboard.numpad5Key.keyCode, Is.EqualTo(Key.Numpad5));
117+
Assert.That(keyboard.numpad6Key.keyCode, Is.EqualTo(Key.Numpad6));
118+
Assert.That(keyboard.numpad7Key.keyCode, Is.EqualTo(Key.Numpad7));
119+
Assert.That(keyboard.numpad8Key.keyCode, Is.EqualTo(Key.Numpad8));
120+
Assert.That(keyboard.numpad9Key.keyCode, Is.EqualTo(Key.Numpad9));
121+
Assert.That(keyboard.f1Key.keyCode, Is.EqualTo(Key.F1));
122+
Assert.That(keyboard.f2Key.keyCode, Is.EqualTo(Key.F2));
123+
Assert.That(keyboard.f3Key.keyCode, Is.EqualTo(Key.F3));
124+
Assert.That(keyboard.f4Key.keyCode, Is.EqualTo(Key.F4));
125+
Assert.That(keyboard.f5Key.keyCode, Is.EqualTo(Key.F5));
126+
Assert.That(keyboard.f6Key.keyCode, Is.EqualTo(Key.F6));
127+
Assert.That(keyboard.f7Key.keyCode, Is.EqualTo(Key.F7));
128+
Assert.That(keyboard.f8Key.keyCode, Is.EqualTo(Key.F8));
129+
Assert.That(keyboard.f9Key.keyCode, Is.EqualTo(Key.F9));
130+
Assert.That(keyboard.f10Key.keyCode, Is.EqualTo(Key.F10));
131+
Assert.That(keyboard.f11Key.keyCode, Is.EqualTo(Key.F11));
132+
Assert.That(keyboard.f12Key.keyCode, Is.EqualTo(Key.F12));
133+
Assert.That(keyboard.oem1Key.keyCode, Is.EqualTo(Key.OEM1));
134+
Assert.That(keyboard.oem2Key.keyCode, Is.EqualTo(Key.OEM2));
135+
Assert.That(keyboard.oem3Key.keyCode, Is.EqualTo(Key.OEM3));
136+
Assert.That(keyboard.oem4Key.keyCode, Is.EqualTo(Key.OEM4));
137+
Assert.That(keyboard.oem5Key.keyCode, Is.EqualTo(Key.OEM5));
138+
Assert.That(keyboard.f13Key.keyCode, Is.EqualTo(Key.F13));
139+
Assert.That(keyboard.f14Key.keyCode, Is.EqualTo(Key.F14));
140+
Assert.That(keyboard.f15Key.keyCode, Is.EqualTo(Key.F15));
141+
Assert.That(keyboard.f16Key.keyCode, Is.EqualTo(Key.F16));
142+
Assert.That(keyboard.f17Key.keyCode, Is.EqualTo(Key.F17));
143+
Assert.That(keyboard.f18Key.keyCode, Is.EqualTo(Key.F18));
144+
Assert.That(keyboard.f19Key.keyCode, Is.EqualTo(Key.F19));
145+
Assert.That(keyboard.f20Key.keyCode, Is.EqualTo(Key.F20));
146+
Assert.That(keyboard.f21Key.keyCode, Is.EqualTo(Key.F21));
147+
Assert.That(keyboard.f22Key.keyCode, Is.EqualTo(Key.F22));
148+
Assert.That(keyboard.f23Key.keyCode, Is.EqualTo(Key.F23));
149+
Assert.That(keyboard.f24Key.keyCode, Is.EqualTo(Key.F24));
150+
Assert.That(keyboard.mediaPlayPause.keyCode, Is.EqualTo(Key.MediaPlayPause));
151+
Assert.That(keyboard.mediaRewind.keyCode, Is.EqualTo(Key.MediaRewind));
152+
Assert.That(keyboard.mediaForward.keyCode, Is.EqualTo(Key.MediaForward));
153+
}
154+
155+
[Test, Description("https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-1541")]
156+
[Category("Devices")]
157+
public void Devices_Keyboard_AllKeysEnumeratesAllKeyControls()
158+
{
159+
var keyboard = InputSystem.AddDevice<Keyboard>();
160+
var index = 0;
161+
foreach (var key in keyboard.allKeys)
162+
{
163+
Assert.NotNull(key, $"Key at index {index++} was null");
164+
}
165+
}
166+
167+
[Test]
168+
[Category("Devices")]
169+
public void Devices_Keyboard_AllKeysShouldContainKeyControlsCorrespondingToAllKeys()
170+
{
171+
var keyboard = InputSystem.AddDevice<Keyboard>();
172+
var allKeys = keyboard.allKeys;
173+
foreach (var key in sKeys)
174+
{
175+
// Key.None is documented as an invalid key so skip it in this test.
176+
// Sub-script operator is documented to through for invalid key.
177+
if (key == Key.None)
178+
continue;
179+
180+
Assert.That(allKeys.Contains(keyboard[key]), Is.True);
181+
}
182+
}
183+
184+
[Test]
185+
[Category("Devices")]
186+
public void Devices_Keyboard_SubscriptOperatorCanLookupKeyControlOfCorrespondingKey()
187+
{
188+
var keyboard = InputSystem.AddDevice<Keyboard>();
189+
foreach (var key in sKeys)
190+
{
191+
// Key.None is documented as an invalid key so skip it in this test.
192+
// Sub-script operator is documented to through for invalid key.
193+
if (key == Key.None)
194+
continue;
195+
196+
var keyControl = keyboard[key];
197+
Assert.That(keyControl, Is.Not.Null);
198+
Assert.That(keyControl.keyCode, Is.EqualTo(key));
199+
}
200+
}
201+
202+
[Test(Description = "Verifies documented requirement 'This is equivalent to <c>allKeys[(int)key - 1]'")]
203+
[Category("Devices")]
204+
public void Devices_Keyboard_SubscriptOperatorShouldBeEquivalentToShiftedAllKeysLookup()
205+
{
206+
var keyboard = InputSystem.AddDevice<Keyboard>();
207+
var allKeys = keyboard.allKeys;
208+
foreach (var key in sKeys)
209+
{
210+
// Key.None is documented as an invalid key so skip it in this test.
211+
// Sub-script operator is documented to through for invalid key.
212+
if (key == Key.None)
213+
continue;
214+
215+
var keyControl = keyboard[key];
216+
Assert.That(keyControl, Is.EqualTo(allKeys[(int)key - 1]));
217+
}
218+
}
219+
220+
[Test]
221+
[Category("Devices")]
222+
public void Devices_Keyboard_SubscriptOperatorThrowsForInvalidOrOutOfRangeKey()
223+
{
224+
var keyboard = InputSystem.AddDevice<Keyboard>();
225+
var minKey = Enum.GetValues(typeof(Key)).Cast<Key>().Min();
226+
var invalidMin = (Key)((int)minKey) - 1;
227+
var maxKey = Enum.GetValues(typeof(Key)).Cast<Key>().Max();
228+
var invalidMax = (Key)((int)maxKey) + 1;
229+
Assert.Throws<ArgumentOutOfRangeException>(() => { _ = keyboard[Key.None]; });
230+
Assert.Throws<ArgumentOutOfRangeException>(() => { _ = keyboard[invalidMin]; });
231+
Assert.Throws<ArgumentOutOfRangeException>(() => { _ = keyboard[invalidMax]; });
232+
}
233+
}

Assets/Tests/InputSystem/CoreTests_Devices_Keyboard.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Tests/InputSystem/Plugins/InputForUITests.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -535,19 +535,31 @@ public void DefaultActions_ShouldNotGenerateAnyVerificationWarnings(bool useProj
535535
LogAssert.NoUnexpectedReceived();
536536
}
537537

538-
[Ignore("We currently allow a PWA asset without an UI action map and rely on defaults instead. This allows users that do not want it or use something else to avoid using it.")]
539-
[Test(Description = "Verifies that user-supplied project-wide input actions generates warnings if action map is missing.")]
538+
[Test(Description = "Verifies that user-supplied project-wide actions do not generate warnings if action map is missing. We use default actions in this case.")]
540539
[Category(kTestCategory)]
541-
public void ActionsWithoutUIMap_ShouldGenerateWarnings()
540+
public void ActionsWithoutUIMap_ShouldNotGenerateWarnings()
542541
{
543542
var asset = ProjectWideActionsAsset.CreateDefaultAssetAtPath(kAssetPath);
544543
asset.RemoveActionMap(asset.FindActionMap("UI", throwIfNotFound: true));
545544

546545
InputSystem.s_Manager.actions = asset;
547546
Update();
548547

548+
LogAssert.NoUnexpectedReceived();
549+
}
550+
551+
[Test(Description = "Verifies that user-supplied project-wide input actions generates warnings if the UI map is present but actions are missing.")]
552+
[Category(kTestCategory)]
553+
public void ActionsWithUIMap_MissingActions_ShouldGenerateWarnings()
554+
{
555+
var asset = ProjectWideActionsAsset.CreateDefaultAssetAtPath(kAssetPath);
556+
asset.RemoveActionMap(asset.FindActionMap("UI", throwIfNotFound: true));
557+
asset.AddActionMap(new InputActionMap("UI")); // An empty UI map should log warnings.
558+
559+
InputSystem.s_Manager.actions = asset;
560+
Update();
561+
549562
var link = EditorHelpers.GetHyperlink(kAssetPath);
550-
LogAssert.Expect(LogType.Warning, new Regex($"^InputActionMap with path 'UI' in asset '{link}' could not be found."));
551563
if (InputActionAssetVerifier.DefaultReportPolicy == InputActionAssetVerifier.ReportPolicy.ReportAll)
552564
{
553565
LogAssert.Expect(LogType.Warning, new Regex($"^InputAction with path 'UI/Point' in asset '{link}' could not be found."));
@@ -559,8 +571,6 @@ public void ActionsWithoutUIMap_ShouldGenerateWarnings()
559571
LogAssert.Expect(LogType.Warning, new Regex($"^InputAction with path 'UI/RightClick' in asset '{link}' could not be found."));
560572
LogAssert.Expect(LogType.Warning, new Regex($"^InputAction with path 'UI/ScrollWheel' in asset '{link}' could not be found."));
561573
}
562-
// else: expect suppression of child errors
563-
LogAssert.NoUnexpectedReceived();
564574
}
565575

566576
[Test(Description = "Verifies that user-supplied project-wide input actions generates warnings if any required action is missing.")]

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)