| 
 | 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