diff --git a/common/keyboard.go b/common/keyboard.go index d56c4a689..cd2665d60 100644 --- a/common/keyboard.go +++ b/common/keyboard.go @@ -182,6 +182,7 @@ func (k *Keyboard) keyDefinitionFromKey(key keyboardlayout.KeyInput) keyboardlay } var keyDef keyboardlayout.KeyDefinition + keyDef.Code = srcKeyDef.Code if srcKeyDef.Key != "" { keyDef.Key = srcKeyDef.Key } @@ -194,9 +195,6 @@ func (k *Keyboard) keyDefinitionFromKey(key keyboardlayout.KeyInput) keyboardlay if srcKeyDef.KeyCode != 0 { keyDef.KeyCode = srcKeyDef.KeyCode } - if key != "" { - keyDef.Code = string(key) - } if srcKeyDef.Location != 0 { keyDef.Location = srcKeyDef.Location } diff --git a/common/keyboard_test.go b/common/keyboard_test.go index d543fbe34..0e711b485 100644 --- a/common/keyboard_test.go +++ b/common/keyboard_test.go @@ -4,6 +4,7 @@ import ( "testing" "github.com/grafana/xk6-browser/k6ext/k6test" + "github.com/grafana/xk6-browser/keyboardlayout" "github.com/stretchr/testify/assert" ) @@ -76,3 +77,110 @@ func TestKeyboardPress(t *testing.T) { assert.Panics(t, func() { k.Press("", nil) }) }) } + +func TestKeyDefinitionCode(t *testing.T) { + var ( + vu = k6test.NewVU(t) + k = NewKeyboard(vu.Context(), nil) + ) + + tests := []struct { + key keyboardlayout.KeyInput + expectedCodes []string + }{ + {key: "Escape", expectedCodes: []string{"Escape"}}, + {key: "F1", expectedCodes: []string{"F1"}}, + {key: "F2", expectedCodes: []string{"F2"}}, + {key: "F3", expectedCodes: []string{"F3"}}, + {key: "F4", expectedCodes: []string{"F4"}}, + {key: "F5", expectedCodes: []string{"F5"}}, + {key: "F6", expectedCodes: []string{"F6"}}, + {key: "F7", expectedCodes: []string{"F7"}}, + {key: "F8", expectedCodes: []string{"F8"}}, + {key: "F9", expectedCodes: []string{"F9"}}, + {key: "F10", expectedCodes: []string{"F10"}}, + {key: "F11", expectedCodes: []string{"F11"}}, + {key: "F12", expectedCodes: []string{"F12"}}, + {key: "`", expectedCodes: []string{"Backquote"}}, + {key: "-", expectedCodes: []string{"Minus", "NumpadSubtract"}}, + {key: "=", expectedCodes: []string{"Equal"}}, + {key: "\\", expectedCodes: []string{"Backslash"}}, + {key: "Backspace", expectedCodes: []string{"Backspace"}}, + {key: "Tab", expectedCodes: []string{"Tab"}}, + {key: "q", expectedCodes: []string{"KeyQ"}}, + {key: "w", expectedCodes: []string{"KeyW"}}, + {key: "e", expectedCodes: []string{"KeyE"}}, + {key: "r", expectedCodes: []string{"KeyR"}}, + {key: "t", expectedCodes: []string{"KeyT"}}, + {key: "y", expectedCodes: []string{"KeyY"}}, + {key: "u", expectedCodes: []string{"KeyU"}}, + {key: "i", expectedCodes: []string{"KeyI"}}, + {key: "o", expectedCodes: []string{"KeyO"}}, + {key: "p", expectedCodes: []string{"KeyP"}}, + {key: "[", expectedCodes: []string{"BracketLeft"}}, + {key: "]", expectedCodes: []string{"BracketRight"}}, + {key: "CapsLock", expectedCodes: []string{"CapsLock"}}, + {key: "a", expectedCodes: []string{"KeyA"}}, + {key: "s", expectedCodes: []string{"KeyS"}}, + {key: "d", expectedCodes: []string{"KeyD"}}, + {key: "f", expectedCodes: []string{"KeyF"}}, + {key: "g", expectedCodes: []string{"KeyG"}}, + {key: "h", expectedCodes: []string{"KeyH"}}, + {key: "j", expectedCodes: []string{"KeyJ"}}, + {key: "k", expectedCodes: []string{"KeyK"}}, + {key: "l", expectedCodes: []string{"KeyL"}}, + {key: ";", expectedCodes: []string{"Semicolon"}}, + {key: "'", expectedCodes: []string{"Quote"}}, + {key: "Shift", expectedCodes: []string{"ShiftLeft", "ShiftRight"}}, + {key: "z", expectedCodes: []string{"KeyZ"}}, + {key: "x", expectedCodes: []string{"KeyX"}}, + {key: "c", expectedCodes: []string{"KeyC"}}, + {key: "v", expectedCodes: []string{"KeyV"}}, + {key: "b", expectedCodes: []string{"KeyB"}}, + {key: "n", expectedCodes: []string{"KeyN"}}, + {key: "m", expectedCodes: []string{"KeyM"}}, + {key: ",", expectedCodes: []string{"Comma"}}, + {key: "/", expectedCodes: []string{"Slash", "NumpadDivide"}}, + {key: "Control", expectedCodes: []string{"ControlLeft", "ControlRight"}}, + {key: "Meta", expectedCodes: []string{"MetaLeft", "MetaRight"}}, + {key: "Alt", expectedCodes: []string{"AltLeft", "AltRight"}}, + {key: " ", expectedCodes: []string{"Space"}}, + {key: "AltGraph", expectedCodes: []string{"AltGraph"}}, + {key: "ConTextMenu", expectedCodes: []string{"ConTextMenu"}}, + {key: "PrintScreen", expectedCodes: []string{"PrintScreen"}}, + {key: "ScrollLock", expectedCodes: []string{"ScrollLock"}}, + {key: "Pause", expectedCodes: []string{"Pause"}}, + {key: "PageUp", expectedCodes: []string{"PageUp"}}, + {key: "PageDown", expectedCodes: []string{"PageDown"}}, + {key: "Insert", expectedCodes: []string{"Insert"}}, + {key: "Delete", expectedCodes: []string{"Delete"}}, + {key: "Home", expectedCodes: []string{"Home"}}, + {key: "End", expectedCodes: []string{"End"}}, + {key: "ArrowLeft", expectedCodes: []string{"ArrowLeft"}}, + {key: "ArrowUp", expectedCodes: []string{"ArrowUp"}}, + {key: "ArrowRight", expectedCodes: []string{"ArrowRight"}}, + {key: "ArrowDown", expectedCodes: []string{"ArrowDown"}}, + {key: "NumLock", expectedCodes: []string{"NumLock"}}, + {key: "*", expectedCodes: []string{"NumpadMultiply"}}, + {key: "7", expectedCodes: []string{"Numpad7", "Digit7"}}, + {key: "8", expectedCodes: []string{"Numpad8", "Digit8"}}, + {key: "9", expectedCodes: []string{"Numpad9", "Digit9"}}, + {key: "4", expectedCodes: []string{"Numpad4", "Digit4"}}, + {key: "5", expectedCodes: []string{"Numpad5", "Digit5"}}, + {key: "6", expectedCodes: []string{"Numpad6", "Digit6"}}, + {key: "+", expectedCodes: []string{"NumpadAdd"}}, + {key: "1", expectedCodes: []string{"Numpad1", "Digit1"}}, + {key: "2", expectedCodes: []string{"Numpad2", "Digit2"}}, + {key: "3", expectedCodes: []string{"Numpad3", "Digit3"}}, + {key: "0", expectedCodes: []string{"Numpad0", "Digit0"}}, + {key: ".", expectedCodes: []string{"NumpadDecimal", "Period"}}, + {key: "Enter", expectedCodes: []string{"NumpadEnter", "Enter"}}, + } + + for _, tt := range tests { + t.Run(string(tt.key), func(t *testing.T) { + kd := k.keyDefinitionFromKey(tt.key) + assert.Contains(t, tt.expectedCodes, kd.Code) + }) + } +} diff --git a/keyboardlayout/us.go b/keyboardlayout/us.go index 0f9e1dce4..0fd7d2bde 100644 --- a/keyboardlayout/us.go +++ b/keyboardlayout/us.go @@ -260,127 +260,127 @@ func initUS() { } Keys := map[KeyInput]KeyDefinition{ // Functions row - "Escape": {KeyCode: 27, Key: "Escape"}, - "F1": {KeyCode: 112, Key: "F1"}, - "F2": {KeyCode: 113, Key: "F2"}, - "F3": {KeyCode: 114, Key: "F3"}, - "F4": {KeyCode: 115, Key: "F4"}, - "F5": {KeyCode: 116, Key: "F5"}, - "F6": {KeyCode: 117, Key: "F6"}, - "F7": {KeyCode: 118, Key: "F7"}, - "F8": {KeyCode: 119, Key: "F8"}, - "F9": {KeyCode: 120, Key: "F9"}, - "F10": {KeyCode: 121, Key: "F10"}, - "F11": {KeyCode: 122, Key: "F11"}, - "F12": {KeyCode: 123, Key: "F12"}, + "Escape": {Code: "Escape", KeyCode: 27, Key: "Escape"}, + "F1": {Code: "F1", KeyCode: 112, Key: "F1"}, + "F2": {Code: "F2", KeyCode: 113, Key: "F2"}, + "F3": {Code: "F3", KeyCode: 114, Key: "F3"}, + "F4": {Code: "F4", KeyCode: 115, Key: "F4"}, + "F5": {Code: "F5", KeyCode: 116, Key: "F5"}, + "F6": {Code: "F6", KeyCode: 117, Key: "F6"}, + "F7": {Code: "F7", KeyCode: 118, Key: "F7"}, + "F8": {Code: "F8", KeyCode: 119, Key: "F8"}, + "F9": {Code: "F9", KeyCode: 120, Key: "F9"}, + "F10": {Code: "F10", KeyCode: 121, Key: "F10"}, + "F11": {Code: "F11", KeyCode: 122, Key: "F11"}, + "F12": {Code: "F12", KeyCode: 123, Key: "F12"}, // Numbers row - "Backquote": {KeyCode: 192, ShiftKey: "~", Key: "`"}, - "Digit1": {KeyCode: 49, ShiftKey: "!", Key: "1"}, - "Digit2": {KeyCode: 50, ShiftKey: "@", Key: "2"}, - "Digit3": {KeyCode: 51, ShiftKey: "#", Key: "3"}, - "Digit4": {KeyCode: 52, ShiftKey: "$", Key: "4"}, - "Digit5": {KeyCode: 53, ShiftKey: "%", Key: "5"}, - "Digit6": {KeyCode: 54, ShiftKey: "^", Key: "6"}, - "Digit7": {KeyCode: 55, ShiftKey: "&", Key: "7"}, - "Digit8": {KeyCode: 56, ShiftKey: "*", Key: "8"}, - "Digit9": {KeyCode: 57, ShiftKey: "(", Key: "9"}, - "Digit0": {KeyCode: 48, ShiftKey: ")", Key: "0"}, - "Minus": {KeyCode: 189, ShiftKey: "_", Key: "-"}, - "Equal": {KeyCode: 187, ShiftKey: "+", Key: "="}, - "Backslash": {KeyCode: 220, ShiftKey: "|", Key: "\\"}, - "Backspace": {KeyCode: 8, Key: "Backspace"}, + "Backquote": {Code: "Backquote", KeyCode: 192, ShiftKey: "~", Key: "`"}, + "Digit1": {Code: "Digit1", KeyCode: 49, ShiftKey: "!", Key: "1"}, + "Digit2": {Code: "Digit2", KeyCode: 50, ShiftKey: "@", Key: "2"}, + "Digit3": {Code: "Digit3", KeyCode: 51, ShiftKey: "#", Key: "3"}, + "Digit4": {Code: "Digit4", KeyCode: 52, ShiftKey: "$", Key: "4"}, + "Digit5": {Code: "Digit5", KeyCode: 53, ShiftKey: "%", Key: "5"}, + "Digit6": {Code: "Digit6", KeyCode: 54, ShiftKey: "^", Key: "6"}, + "Digit7": {Code: "Digit7", KeyCode: 55, ShiftKey: "&", Key: "7"}, + "Digit8": {Code: "Digit8", KeyCode: 56, ShiftKey: "*", Key: "8"}, + "Digit9": {Code: "Digit9", KeyCode: 57, ShiftKey: "(", Key: "9"}, + "Digit0": {Code: "Digit0", KeyCode: 48, ShiftKey: ")", Key: "0"}, + "Minus": {Code: "Minus", KeyCode: 189, ShiftKey: "_", Key: "-"}, + "Equal": {Code: "Equal", KeyCode: 187, ShiftKey: "+", Key: "="}, + "Backslash": {Code: "Backslash", KeyCode: 220, ShiftKey: "|", Key: "\\"}, + "Backspace": {Code: "Backspace", KeyCode: 8, Key: "Backspace"}, // First row - "Tab": {KeyCode: 9, Key: "Tab"}, - "KeyQ": {KeyCode: 81, ShiftKey: "Q", Key: "q"}, - "KeyW": {KeyCode: 87, ShiftKey: "W", Key: "w"}, - "KeyE": {KeyCode: 69, ShiftKey: "E", Key: "e"}, - "KeyR": {KeyCode: 82, ShiftKey: "R", Key: "r"}, - "KeyT": {KeyCode: 84, ShiftKey: "T", Key: "t"}, - "KeyY": {KeyCode: 89, ShiftKey: "Y", Key: "y"}, - "KeyU": {KeyCode: 85, ShiftKey: "U", Key: "u"}, - "KeyI": {KeyCode: 73, ShiftKey: "I", Key: "i"}, - "KeyO": {KeyCode: 79, ShiftKey: "O", Key: "o"}, - "KeyP": {KeyCode: 80, ShiftKey: "P", Key: "p"}, - "BracketLeft": {KeyCode: 219, ShiftKey: "{", Key: "["}, - "BracketRight": {KeyCode: 221, ShiftKey: "}", Key: "]"}, + "Tab": {Code: "Tab", KeyCode: 9, Key: "Tab"}, + "KeyQ": {Code: "KeyQ", KeyCode: 81, ShiftKey: "Q", Key: "q"}, + "KeyW": {Code: "KeyW", KeyCode: 87, ShiftKey: "W", Key: "w"}, + "KeyE": {Code: "KeyE", KeyCode: 69, ShiftKey: "E", Key: "e"}, + "KeyR": {Code: "KeyR", KeyCode: 82, ShiftKey: "R", Key: "r"}, + "KeyT": {Code: "KeyT", KeyCode: 84, ShiftKey: "T", Key: "t"}, + "KeyY": {Code: "KeyY", KeyCode: 89, ShiftKey: "Y", Key: "y"}, + "KeyU": {Code: "KeyU", KeyCode: 85, ShiftKey: "U", Key: "u"}, + "KeyI": {Code: "KeyI", KeyCode: 73, ShiftKey: "I", Key: "i"}, + "KeyO": {Code: "KeyO", KeyCode: 79, ShiftKey: "O", Key: "o"}, + "KeyP": {Code: "KeyP", KeyCode: 80, ShiftKey: "P", Key: "p"}, + "BracketLeft": {Code: "BracketLeft", KeyCode: 219, ShiftKey: "{", Key: "["}, + "BracketRight": {Code: "BracketRight", KeyCode: 221, ShiftKey: "}", Key: "]"}, // Second row - "CapsLock": {KeyCode: 20, Key: "CapsLock"}, - "KeyA": {KeyCode: 65, ShiftKey: "A", Key: "a"}, - "KeyS": {KeyCode: 83, ShiftKey: "S", Key: "s"}, - "KeyD": {KeyCode: 68, ShiftKey: "D", Key: "d"}, - "KeyF": {KeyCode: 70, ShiftKey: "F", Key: "f"}, - "KeyG": {KeyCode: 71, ShiftKey: "G", Key: "g"}, - "KeyH": {KeyCode: 72, ShiftKey: "H", Key: "h"}, - "KeyJ": {KeyCode: 74, ShiftKey: "J", Key: "j"}, - "KeyK": {KeyCode: 75, ShiftKey: "K", Key: "k"}, - "KeyL": {KeyCode: 76, ShiftKey: "L", Key: "l"}, - "Semicolon": {KeyCode: 186, ShiftKey: ":", Key: ";"}, - "Quote": {KeyCode: 222, ShiftKey: "\"", Key: "'"}, - "Enter": {KeyCode: 13, Key: "Enter", Text: "\r"}, + "CapsLock": {Code: "CapsLock", KeyCode: 20, Key: "CapsLock"}, + "KeyA": {Code: "KeyA", KeyCode: 65, ShiftKey: "A", Key: "a"}, + "KeyS": {Code: "KeyS", KeyCode: 83, ShiftKey: "S", Key: "s"}, + "KeyD": {Code: "KeyD", KeyCode: 68, ShiftKey: "D", Key: "d"}, + "KeyF": {Code: "KeyF", KeyCode: 70, ShiftKey: "F", Key: "f"}, + "KeyG": {Code: "KeyG", KeyCode: 71, ShiftKey: "G", Key: "g"}, + "KeyH": {Code: "KeyH", KeyCode: 72, ShiftKey: "H", Key: "h"}, + "KeyJ": {Code: "KeyJ", KeyCode: 74, ShiftKey: "J", Key: "j"}, + "KeyK": {Code: "KeyK", KeyCode: 75, ShiftKey: "K", Key: "k"}, + "KeyL": {Code: "KeyL", KeyCode: 76, ShiftKey: "L", Key: "l"}, + "Semicolon": {Code: "Semicolon", KeyCode: 186, ShiftKey: ":", Key: ";"}, + "Quote": {Code: "Quote", KeyCode: 222, ShiftKey: "\"", Key: "'"}, + "Enter": {Code: "Enter", KeyCode: 13, Key: "Enter", Text: "\r"}, // Third row - "ShiftLeft": {KeyCode: 160, KeyCodeWithoutLocation: 16, Key: "Shift", Location: 1}, - "KeyZ": {KeyCode: 90, ShiftKey: "Z", Key: "z"}, - "KeyX": {KeyCode: 88, ShiftKey: "X", Key: "x"}, - "KeyC": {KeyCode: 67, ShiftKey: "C", Key: "c"}, - "KeyV": {KeyCode: 86, ShiftKey: "V", Key: "v"}, - "KeyB": {KeyCode: 66, ShiftKey: "B", Key: "b"}, - "KeyN": {KeyCode: 78, ShiftKey: "N", Key: "n"}, - "KeyM": {KeyCode: 77, ShiftKey: "M", Key: "m"}, - "Comma": {KeyCode: 188, ShiftKey: "<", Key: ","}, - "Period": {KeyCode: 190, ShiftKey: ">", Key: "."}, - "Slash": {KeyCode: 191, ShiftKey: "?", Key: "/"}, - "ShiftRight": {KeyCode: 161, KeyCodeWithoutLocation: 16, Key: "Shift", Location: 2}, + "ShiftLeft": {Code: "ShiftLeft", KeyCode: 160, KeyCodeWithoutLocation: 16, Key: "Shift", Location: 1}, + "KeyZ": {Code: "KeyZ", KeyCode: 90, ShiftKey: "Z", Key: "z"}, + "KeyX": {Code: "KeyX", KeyCode: 88, ShiftKey: "X", Key: "x"}, + "KeyC": {Code: "KeyC", KeyCode: 67, ShiftKey: "C", Key: "c"}, + "KeyV": {Code: "KeyV", KeyCode: 86, ShiftKey: "V", Key: "v"}, + "KeyB": {Code: "KeyB", KeyCode: 66, ShiftKey: "B", Key: "b"}, + "KeyN": {Code: "KeyN", KeyCode: 78, ShiftKey: "N", Key: "n"}, + "KeyM": {Code: "KeyM", KeyCode: 77, ShiftKey: "M", Key: "m"}, + "Comma": {Code: "Comma", KeyCode: 188, ShiftKey: "<", Key: ","}, + "Period": {Code: "Period", KeyCode: 190, ShiftKey: ">", Key: "."}, + "Slash": {Code: "Slash", KeyCode: 191, ShiftKey: "?", Key: "/"}, + "ShiftRight": {Code: "ShiftRight", KeyCode: 161, KeyCodeWithoutLocation: 16, Key: "Shift", Location: 2}, // Last row - "ControlLeft": {KeyCode: 162, KeyCodeWithoutLocation: 17, Key: "Control", Location: 1}, - "MetaLeft": {KeyCode: 91, Key: "Meta", Location: 1}, - "AltLeft": {KeyCode: 164, KeyCodeWithoutLocation: 18, Key: "Alt", Location: 1}, - "Space": {KeyCode: 32, Key: " "}, - "AltRight": {KeyCode: 165, KeyCodeWithoutLocation: 18, Key: "Alt", Location: 2}, - "AltGraph": {KeyCode: 225, Key: "AltGraph"}, - "MetaRight": {KeyCode: 92, Key: "Meta", Location: 2}, - "ConTextMenu": {KeyCode: 93, Key: "ConTextMenu"}, - "ControlRight": {KeyCode: 163, KeyCodeWithoutLocation: 17, Key: "Control", Location: 2}, + "ControlLeft": {Code: "ControlLeft", KeyCode: 162, KeyCodeWithoutLocation: 17, Key: "Control", Location: 1}, + "MetaLeft": {Code: "MetaLeft", KeyCode: 91, Key: "Meta", Location: 1}, + "AltLeft": {Code: "AltLeft", KeyCode: 164, KeyCodeWithoutLocation: 18, Key: "Alt", Location: 1}, + "Space": {Code: "Space", KeyCode: 32, Key: " "}, + "AltRight": {Code: "AltRight", KeyCode: 165, KeyCodeWithoutLocation: 18, Key: "Alt", Location: 2}, + "AltGraph": {Code: "AltGraph", KeyCode: 225, Key: "AltGraph"}, + "MetaRight": {Code: "MetaRight", KeyCode: 92, Key: "Meta", Location: 2}, + "ConTextMenu": {Code: "ConTextMenu", KeyCode: 93, Key: "ConTextMenu"}, + "ControlRight": {Code: "ControlRight", KeyCode: 163, KeyCodeWithoutLocation: 17, Key: "Control", Location: 2}, // Center block - "PrintScreen": {KeyCode: 44, Key: "PrintScreen"}, - "ScrollLock": {KeyCode: 145, Key: "ScrollLock"}, - "Pause": {KeyCode: 19, Key: "Pause"}, + "PrintScreen": {Code: "PrintScreen", KeyCode: 44, Key: "PrintScreen"}, + "ScrollLock": {Code: "ScrollLock", KeyCode: 145, Key: "ScrollLock"}, + "Pause": {Code: "Pause", KeyCode: 19, Key: "Pause"}, - "PageUp": {KeyCode: 33, Key: "PageUp"}, - "PageDown": {KeyCode: 34, Key: "PageDown"}, - "Insert": {KeyCode: 45, Key: "Insert"}, - "Delete": {KeyCode: 46, Key: "Delete"}, - "Home": {KeyCode: 36, Key: "Home"}, - "End": {KeyCode: 35, Key: "End"}, + "PageUp": {Code: "PageUp", KeyCode: 33, Key: "PageUp"}, + "PageDown": {Code: "PageDown", KeyCode: 34, Key: "PageDown"}, + "Insert": {Code: "Insert", KeyCode: 45, Key: "Insert"}, + "Delete": {Code: "Delete", KeyCode: 46, Key: "Delete"}, + "Home": {Code: "Home", KeyCode: 36, Key: "Home"}, + "End": {Code: "End", KeyCode: 35, Key: "End"}, - "ArrowLeft": {KeyCode: 37, Key: "ArrowLeft"}, - "ArrowUp": {KeyCode: 38, Key: "ArrowUp"}, - "ArrowRight": {KeyCode: 39, Key: "ArrowRight"}, - "ArrowDown": {KeyCode: 40, Key: "ArrowDown"}, + "ArrowLeft": {Code: "ArrowLeft", KeyCode: 37, Key: "ArrowLeft"}, + "ArrowUp": {Code: "ArrowUp", KeyCode: 38, Key: "ArrowUp"}, + "ArrowRight": {Code: "ArrowRight", KeyCode: 39, Key: "ArrowRight"}, + "ArrowDown": {Code: "ArrowDown", KeyCode: 40, Key: "ArrowDown"}, // Numpad - "NumLock": {KeyCode: 144, Key: "NumLock"}, - "NumpadDivide": {KeyCode: 111, Key: "/", Location: 3}, - "NumpadMultiply": {KeyCode: 106, Key: "*", Location: 3}, - "NumpadSubtract": {KeyCode: 109, Key: "-", Location: 3}, - "Numpad7": {KeyCode: 36, ShiftKeyCode: 103, Key: "Home", ShiftKey: "7", Location: 3}, - "Numpad8": {KeyCode: 38, ShiftKeyCode: 104, Key: "ArrowUp", ShiftKey: "8", Location: 3}, - "Numpad9": {KeyCode: 33, ShiftKeyCode: 105, Key: "PageUp", ShiftKey: "9", Location: 3}, - "Numpad4": {KeyCode: 37, ShiftKeyCode: 100, Key: "ArrowLeft", ShiftKey: "4", Location: 3}, - "Numpad5": {KeyCode: 12, ShiftKeyCode: 101, Key: "Clear", ShiftKey: "5", Location: 3}, - "Numpad6": {KeyCode: 39, ShiftKeyCode: 102, Key: "ArrowRight", ShiftKey: "6", Location: 3}, - "NumpadAdd": {KeyCode: 107, Key: "+", Location: 3}, - "Numpad1": {KeyCode: 35, ShiftKeyCode: 97, Key: "End", ShiftKey: "1", Location: 3}, - "Numpad2": {KeyCode: 40, ShiftKeyCode: 98, Key: "ArrowDown", ShiftKey: "2", Location: 3}, - "Numpad3": {KeyCode: 34, ShiftKeyCode: 99, Key: "PageDown", ShiftKey: "3", Location: 3}, - "Numpad0": {KeyCode: 45, ShiftKeyCode: 96, Key: "Insert", ShiftKey: "0", Location: 3}, - "NumpadDecimal": {KeyCode: 46, ShiftKeyCode: 110, Key: "\u0000", ShiftKey: ".", Location: 3}, - "NumpadEnter": {KeyCode: 13, Key: "Enter", Text: "\r", Location: 3}, + "NumLock": {Code: "NumLock", KeyCode: 144, Key: "NumLock"}, + "NumpadDivide": {Code: "NumpadDivide", KeyCode: 111, Key: "/", Location: 3}, + "NumpadMultiply": {Code: "NumpadMultiply", KeyCode: 106, Key: "*", Location: 3}, + "NumpadSubtract": {Code: "NumpadSubtract", KeyCode: 109, Key: "-", Location: 3}, + "Numpad7": {Code: "Numpad7", KeyCode: 36, ShiftKeyCode: 103, Key: "Home", ShiftKey: "7", Location: 3}, + "Numpad8": {Code: "Numpad8", KeyCode: 38, ShiftKeyCode: 104, Key: "ArrowUp", ShiftKey: "8", Location: 3}, + "Numpad9": {Code: "Numpad9", KeyCode: 33, ShiftKeyCode: 105, Key: "PageUp", ShiftKey: "9", Location: 3}, + "Numpad4": {Code: "Numpad4", KeyCode: 37, ShiftKeyCode: 100, Key: "ArrowLeft", ShiftKey: "4", Location: 3}, + "Numpad5": {Code: "Numpad5", KeyCode: 12, ShiftKeyCode: 101, Key: "Clear", ShiftKey: "5", Location: 3}, + "Numpad6": {Code: "Numpad6", KeyCode: 39, ShiftKeyCode: 102, Key: "ArrowRight", ShiftKey: "6", Location: 3}, + "NumpadAdd": {Code: "NumpadAdd", KeyCode: 107, Key: "+", Location: 3}, + "Numpad1": {Code: "Numpad1", KeyCode: 35, ShiftKeyCode: 97, Key: "End", ShiftKey: "1", Location: 3}, + "Numpad2": {Code: "Numpad2", KeyCode: 40, ShiftKeyCode: 98, Key: "ArrowDown", ShiftKey: "2", Location: 3}, + "Numpad3": {Code: "Numpad3", KeyCode: 34, ShiftKeyCode: 99, Key: "PageDown", ShiftKey: "3", Location: 3}, + "Numpad0": {Code: "Numpad0", KeyCode: 45, ShiftKeyCode: 96, Key: "Insert", ShiftKey: "0", Location: 3}, + "NumpadDecimal": {Code: "NumpadDecimal", KeyCode: 46, ShiftKeyCode: 110, Key: "\u0000", ShiftKey: ".", Location: 3}, + "NumpadEnter": {Code: "NumpadEnter", KeyCode: 13, Key: "Enter", Text: "\r", Location: 3}, } register("us", validKeys, Keys)