From 4f3a5f8ac8b49c2a96f3fc7846b6df440729c98b Mon Sep 17 00:00:00 2001 From: Zaydek Michels-Gualtieri Date: Fri, 17 Jul 2020 06:58:08 +0900 Subject: [PATCH] Prototyped new testKeyDown API and test suite --- .../utils/keyDownTypeFor/applyFormat.test.js | 80 +++++----- .../applyFormatMarkdown.test.js | 48 +++--- .../utils/keyDownTypeFor/deleteLTR.test.js | 32 ++-- .../utils/keyDownTypeFor/deleteRTL.test.js | 32 ++-- .../utils/keyDownTypeFor/history.test.js | 64 ++++---- .../utils/keyDownTypeFor/insertText.js | 19 +++ .../utils/keyDownTypeFor/insertText.test.js | 142 ++++++++++-------- src/lib/Client/testKeyDown/index.js | 76 ++++++++++ src/lib/Client/testKeyDown/index.test.js | 111 ++++++++++++++ 9 files changed, 412 insertions(+), 192 deletions(-) create mode 100644 src/lib/Client/testKeyDown/index.js create mode 100644 src/lib/Client/testKeyDown/index.test.js diff --git a/src/RichTextEditor/utils/keyDownTypeFor/applyFormat.test.js b/src/RichTextEditor/utils/keyDownTypeFor/applyFormat.test.js index 85566cd..1785930 100644 --- a/src/RichTextEditor/utils/keyDownTypeFor/applyFormat.test.js +++ b/src/RichTextEditor/utils/keyDownTypeFor/applyFormat.test.js @@ -12,20 +12,20 @@ import { // Unsorted test("em(...); non-macOS", () => { mockNonMacOS() expect(applyFormat.em({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("I"), })).toBeTruthy() }) test("em(...); macOS", () => { mockMacOS() expect(applyFormat.em({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("I"), })).toBeTruthy() }) @@ -36,20 +36,20 @@ test("em(...); macOS", () => { test("strong(...); non-macOS", () => { mockNonMacOS() expect(applyFormat.strong({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("B"), })).toBeTruthy() }) test("strong(...); macOS", () => { mockMacOS() expect(applyFormat.strong({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("B"), })).toBeTruthy() }) @@ -60,20 +60,20 @@ test("strong(...); macOS", () => { test("code(...); non-macOS", () => { mockNonMacOS() expect(applyFormat.code({ - shiftKey: true, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 1, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("C"), })).toBeTruthy() }) test("code(...); macOS", () => { mockMacOS() expect(applyFormat.code({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("C"), })).toBeTruthy() }) @@ -84,20 +84,20 @@ test("code(...); macOS", () => { test("strike(...); non-macOS", () => { mockNonMacOS() expect(applyFormat.strike({ - shiftKey: true, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 1, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("X"), })).toBeTruthy() }) test("strike(...); macOS", () => { mockMacOS() expect(applyFormat.strike({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("X"), })).toBeTruthy() }) @@ -108,20 +108,20 @@ test("strike(...); macOS", () => { test("a(...); non-macOS", () => { mockNonMacOS() expect(applyFormat.a({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("K"), })).toBeTruthy() }) test("a(...); macOS", () => { mockMacOS() expect(applyFormat.a({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("K"), })).toBeTruthy() }) diff --git a/src/RichTextEditor/utils/keyDownTypeFor/applyFormatMarkdown.test.js b/src/RichTextEditor/utils/keyDownTypeFor/applyFormatMarkdown.test.js index 074ab31..52ffffa 100644 --- a/src/RichTextEditor/utils/keyDownTypeFor/applyFormatMarkdown.test.js +++ b/src/RichTextEditor/utils/keyDownTypeFor/applyFormatMarkdown.test.js @@ -3,60 +3,60 @@ import keyCodeFor from "lib/Client/keyCodeFor" test("em(...)", () => { expect(applyFormatMarkdown.em({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("_"), })).toBeTruthy() }) test("strong(...)", () => { expect(applyFormatMarkdown.strong({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("*"), })).toBeTruthy() }) test("code(...)", () => { expect(applyFormatMarkdown.code({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("`"), })).toBeTruthy() }) test("strike(...)", () => { expect(applyFormatMarkdown.strike({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("~"), })).toBeTruthy() }) test("a(...)", () => { expect(applyFormatMarkdown.a({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("["), })).toBeTruthy() }) test("a(...)", () => { expect(applyFormatMarkdown.a({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("]"), })).toBeTruthy() }) diff --git a/src/RichTextEditor/utils/keyDownTypeFor/deleteLTR.test.js b/src/RichTextEditor/utils/keyDownTypeFor/deleteLTR.test.js index d2b5cf7..f2fd264 100644 --- a/src/RichTextEditor/utils/keyDownTypeFor/deleteLTR.test.js +++ b/src/RichTextEditor/utils/keyDownTypeFor/deleteLTR.test.js @@ -11,20 +11,20 @@ import { // Unsorted */ test("rune(...); non-macOS and macOS", () => { expect(deleteLTR.rune({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Delete"), })).toBeTruthy() }) test("rune(...); macOS", () => { mockMacOS() expect(deleteLTR.rune({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("D"), })).toBeTruthy() }) @@ -35,20 +35,20 @@ test("rune(...); macOS", () => { test("word(...); non-macOS", () => { mockNonMacOS() expect(deleteLTR.word({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Delete"), })).toBeTruthy() }) test("word(...); macOS", () => { mockMacOS() expect(deleteLTR.word({ - shiftKey: false, - ctrlKey: true, - altKey: true, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 1, + metaKey: 0, keyCode: keyCodeFor("Delete"), })).toBeTruthy() }) diff --git a/src/RichTextEditor/utils/keyDownTypeFor/deleteRTL.test.js b/src/RichTextEditor/utils/keyDownTypeFor/deleteRTL.test.js index e9b99dc..796a5b1 100644 --- a/src/RichTextEditor/utils/keyDownTypeFor/deleteRTL.test.js +++ b/src/RichTextEditor/utils/keyDownTypeFor/deleteRTL.test.js @@ -11,10 +11,10 @@ import { // Unsorted */ test("rune(...)", () => { expect(deleteRTL.rune({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Backspace"), })).toBeTruthy() }) @@ -25,20 +25,20 @@ test("rune(...)", () => { test("word(...); non-macOS", () => { mockNonMacOS() expect(deleteRTL.word({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Backspace"), })).toBeTruthy() }) test("word(...); macOS", () => { mockMacOS() expect(deleteRTL.word({ - shiftKey: false, - ctrlKey: false, - altKey: true, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 1, + metaKey: 0, keyCode: keyCodeFor("Backspace"), })).toBeTruthy() }) @@ -49,10 +49,10 @@ test("word(...); macOS", () => { test("line(...); macOS", () => { mockMacOS() expect(deleteRTL.line({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("Backspace"), })).toBeTruthy() }) diff --git a/src/RichTextEditor/utils/keyDownTypeFor/history.test.js b/src/RichTextEditor/utils/keyDownTypeFor/history.test.js index 2ddfa82..7ac89f2 100644 --- a/src/RichTextEditor/utils/keyDownTypeFor/history.test.js +++ b/src/RichTextEditor/utils/keyDownTypeFor/history.test.js @@ -12,34 +12,34 @@ import { // Unsorted test("undo(...); non-macOS", () => { mockNonMacOS() expect(history.undo({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Z"), })).not.toBeTruthy() expect(history.undo({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Z"), })).toBeTruthy() }) test("undo(...); macOS", () => { mockMacOS() expect(history.undo({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Z"), })).not.toBeTruthy() expect(history.undo({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("Z"), })).toBeTruthy() }) @@ -50,34 +50,34 @@ test("undo(...); macOS", () => { test("redo(...); non-macOS", () => { mockNonMacOS() expect(history.redo({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Y"), })).not.toBeTruthy() expect(history.redo({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Y"), })).toBeTruthy() }) test("redo(...); macOS", () => { mockMacOS() expect(history.redo({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Z"), })).not.toBeTruthy() expect(history.redo({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("Z"), })).toBeTruthy() }) diff --git a/src/RichTextEditor/utils/keyDownTypeFor/insertText.js b/src/RichTextEditor/utils/keyDownTypeFor/insertText.js index 43487ee..e4f0ed1 100644 --- a/src/RichTextEditor/utils/keyDownTypeFor/insertText.js +++ b/src/RichTextEditor/utils/keyDownTypeFor/insertText.js @@ -8,7 +8,9 @@ function runeCount(str) { const insertText = { insertText(e) { const ok = ( + !e.shiftKey && !e.ctrlKey && // Non-command or macro + (!e.altKey || e.altKey) && !e.metaKey && // Non-command or macro runeCount(e.key) === 1 ) @@ -16,7 +18,9 @@ const insertText = { }, insertTab(e) { const ok = ( + (!e.shiftKey || e.shiftKey) && !e.ctrlKey && // Negates browser shortcuts + !e.altKey && !e.metaKey && // Negates operating system shortcuts e.keyCode === keyCodeFor("Tab") ) @@ -25,6 +29,9 @@ const insertText = { insertSoftParagraph(e) { const ok = ( e.shiftKey && + !e.ctrlKey && + !e.altKey && + !e.metaKey && e.keyCode === keyCodeFor("Enter") ) return ok @@ -32,6 +39,18 @@ const insertText = { insertHardParagraph(e) { const ok = ( !e.shiftKey && + !e.ctrlKey && + !e.altKey && + !e.metaKey && + e.keyCode === keyCodeFor("Enter") + ) + return ok + }, + insertHorizontalRule(e) { + const ok = ( + !e.shiftKey && + !e.altKey && + isCtrlOrMetaKey(e) && e.keyCode === keyCodeFor("Enter") ) return ok diff --git a/src/RichTextEditor/utils/keyDownTypeFor/insertText.test.js b/src/RichTextEditor/utils/keyDownTypeFor/insertText.test.js index 504faaa..4f25c11 100644 --- a/src/RichTextEditor/utils/keyDownTypeFor/insertText.test.js +++ b/src/RichTextEditor/utils/keyDownTypeFor/insertText.test.js @@ -3,124 +3,138 @@ import keyCodeFor from "lib/Client/keyCodeFor" test("insertText(...)", () => { expect(insertText.insertText({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, key: "a", })).toBeTruthy() expect(insertText.insertText({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 0, key: "A", })).toBeTruthy() expect(insertText.insertText({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, + key: "foo", + })).not.toBeTruthy() + expect(insertText.insertText({ + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 0, + key: "FOO", + })).not.toBeTruthy() + expect(insertText.insertText({ + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, key: "a", })).not.toBeTruthy() expect(insertText.insertText({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 1, key: "a", })).not.toBeTruthy() }) test("insertTab(...)", () => { expect(insertText.insertTab({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Tab"), })).toBeTruthy() expect(insertText.insertTab({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Tab"), })).toBeTruthy() expect(insertText.insertTab({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Tab"), })).not.toBeTruthy() expect(insertText.insertTab({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("Tab"), })).not.toBeTruthy() }) test("insertSoftParagraph(...)", () => { expect(insertText.insertSoftParagraph({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Enter"), })).not.toBeTruthy() expect(insertText.insertSoftParagraph({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Enter"), })).toBeTruthy() expect(insertText.insertSoftParagraph({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Enter"), })).not.toBeTruthy() expect(insertText.insertSoftParagraph({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("Enter"), })).not.toBeTruthy() }) test("insertHardParagraph(...)", () => { expect(insertText.insertHardParagraph({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Enter"), })).toBeTruthy() expect(insertText.insertHardParagraph({ - shiftKey: true, - ctrlKey: false, - altKey: false, - metaKey: false, + shiftKey: 1, + ctrlKey: 0, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Enter"), })).not.toBeTruthy() expect(insertText.insertHardParagraph({ - shiftKey: false, - ctrlKey: true, - altKey: false, - metaKey: false, + shiftKey: 0, + ctrlKey: 1, + altKey: 0, + metaKey: 0, keyCode: keyCodeFor("Enter"), })).toBeTruthy() expect(insertText.insertHardParagraph({ - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: true, + shiftKey: 0, + ctrlKey: 0, + altKey: 0, + metaKey: 1, keyCode: keyCodeFor("Enter"), })).toBeTruthy() }) diff --git a/src/lib/Client/testKeyDown/index.js b/src/lib/Client/testKeyDown/index.js new file mode 100644 index 0000000..7cacb73 --- /dev/null +++ b/src/lib/Client/testKeyDown/index.js @@ -0,0 +1,76 @@ +// Tests a keydown event. +function testKeyDown(e) { + const flags = { + shiftKey: false, + ctrlKey: false, + altKey: false, + metaKey: false, + keyCode: 0, + key: "", + } + const testers = { + forShift({ passthrough } = {}) { + if (passthrough) { + flags.shiftKey = undefined + return this + } + flags.shiftKey = true + return this + }, + forCtrl({ passthrough } = {}) { + if (passthrough) { + flags.ctrlKey = undefined + return this + } + flags.ctrlKey = true + return this + }, + forAlt({ passthrough } = {}) { + if (passthrough) { + flags.altKey = undefined + return this + } + flags.altKey = true + return this + }, + forMeta({ passthrough } = {}) { + if (passthrough) { + flags.metaKey = undefined + return this + } + flags.metaKey = true + return this + }, + forKeyCode(keyCode) { + if (flags.key) { + throw new Error("testKeyDown: must use keyCode or key") + } + flags.keyCode = keyCode + return this + }, + forKey(key) { + if (flags.keyCode) { + throw new Error("testKeyDown: must use keyCode or key") + } + flags.key = key + return this + }, + check() { + /* eslint-disable no-multi-spaces */ + const ok = ( + (flags.shiftKey === undefined || e.shiftKey === flags.shiftKey) && + (flags.ctrlKey === undefined || e.ctrlKey === flags.ctrlKey) && + (flags.altKey === undefined || e.altKey === flags.altKey) && + (flags.metaKey === undefined || e.metaKey === flags.metaKey) && ( + (flags.keyCode === undefined || e.keyCode === flags.keyCode) || + (flags.key === undefined || e.key === flags.key) + ) + ) + return ok + /* eslint-enable no-multi-spaces */ + }, + } + return testers +} + +export default testKeyDown diff --git a/src/lib/Client/testKeyDown/index.test.js b/src/lib/Client/testKeyDown/index.test.js new file mode 100644 index 0000000..a7d67e1 --- /dev/null +++ b/src/lib/Client/testKeyDown/index.test.js @@ -0,0 +1,111 @@ +import testKeyDown from "./index" +import keyCodeFor from "lib/Client/keyCodeFor" + +test("testKeyDown(...)", () => { + const e = { + shiftKey: false, + ctrlKey: false, + altKey: false, + metaKey: false, + keyCode: 0, + key: "", + } + expect(testKeyDown(e).check()).toBeTruthy() +}) + +test(".shiftKey(...)", () => { + const e = { + shiftKey: true, + ctrlKey: false, + altKey: false, + metaKey: false, + keyCode: 0, + key: "", + } + expect(testKeyDown(e).check()).not.toBeTruthy() + expect(testKeyDown(e).forShift({ passthrough: true }).check()).toBeTruthy() + expect(testKeyDown(e).forShift().check()).toBeTruthy() +}) + +test(".ctrlKey(...)", () => { + const e = { + shiftKey: true, + ctrlKey: true, + altKey: false, + metaKey: false, + keyCode: 0, + key: "", + } + expect(testKeyDown(e).check()).not.toBeTruthy() + expect(testKeyDown(e).forShift().forCtrl({ passthrough: true }).check()).toBeTruthy() + expect(testKeyDown(e).forShift().forCtrl().check()).toBeTruthy() +}) + +test(".altKey(...)", () => { + const e = { + shiftKey: true, + ctrlKey: true, + altKey: true, + metaKey: false, + keyCode: 0, + key: "", + } + expect(testKeyDown(e).check()).not.toBeTruthy() + expect(testKeyDown(e).forShift().forCtrl().forAlt({ passthrough: true }).check()).toBeTruthy() + expect(testKeyDown(e).forShift().forCtrl().forAlt().check()).toBeTruthy() +}) + +test(".metaKey(...)", () => { + const e = { + shiftKey: true, + ctrlKey: true, + altKey: true, + metaKey: true, + keyCode: 0, + key: "", + } + expect(testKeyDown(e).check()).not.toBeTruthy() + expect(testKeyDown(e).forShift().forCtrl().forAlt().forMeta({ passthrough: true }).check()).toBeTruthy() + expect(testKeyDown(e).forShift().forCtrl().forAlt().forMeta().check()).toBeTruthy() +}) + +test(".keyCode(...)", () => { + const e = { + shiftKey: true, + ctrlKey: true, + altKey: true, + metaKey: true, + keyCode: keyCodeFor("A"), + key: "", + } + expect(testKeyDown(e).check()).not.toBeTruthy() + expect(testKeyDown(e).forShift().forCtrl().forAlt().forMeta().forKeyCode(keyCodeFor("A")).check()).toBeTruthy() +}) + +test(".key(...)", () => { + const e = { + shiftKey: true, + ctrlKey: true, + altKey: true, + metaKey: true, + keyCode: 0, + key: "A", + } + expect(testKeyDown(e).check()).not.toBeTruthy() + expect(testKeyDown(e).forShift().forCtrl().forAlt().forMeta().forKey("A").check()).toBeTruthy() +}) + +test(".keyCode(...).key(...)", () => { + const e = { + shiftKey: true, + ctrlKey: true, + altKey: true, + metaKey: true, + keyCode: keyCodeFor("A"), + key: "A", + } + expect(testKeyDown(e).check()).not.toBeTruthy() + expect(() => ( + testKeyDown(e).forShift().forCtrl().forAlt().forMeta().forKeyCode(keyCodeFor("A")).forKey("A").check() + )).toThrow() +})