|
| 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 | +} |
0 commit comments