diff options
Diffstat (limited to 'test/content/InputDriver.test.ts')
-rw-r--r-- | test/content/InputDriver.test.ts | 163 |
1 files changed, 96 insertions, 67 deletions
diff --git a/test/content/InputDriver.test.ts b/test/content/InputDriver.test.ts index d3a55dd..f464dac 100644 --- a/test/content/InputDriver.test.ts +++ b/test/content/InputDriver.test.ts @@ -1,26 +1,26 @@ -import InputDriver, {keyFromKeyboardEvent} from '../../src/content/InputDriver'; -import { expect } from 'chai'; -import Key from '../../src/shared/settings/Key'; +import InputDriver, { + keyFromKeyboardEvent, +} from "../../src/content/InputDriver"; +import { expect } from "chai"; +import Key from "../../src/shared/settings/Key"; -describe('InputDriver', () => { +describe("InputDriver", () => { let target: HTMLElement; let driver: InputDriver; beforeEach(() => { - target = document.createElement('div'); + target = document.createElement("div"); document.body.appendChild(target); driver = new InputDriver(target); }); afterEach(() => { target.remove(); - target = null; - driver = null; }); - it('register callbacks', (done) => { + it("register callbacks", (done) => { driver.onKey((key: Key): boolean => { - expect(key.key).to.equal('a'); + expect(key.key).to.equal("a"); expect(key.ctrl).to.be.true; expect(key.shift).to.be.false; expect(key.alt).to.be.false; @@ -29,34 +29,37 @@ describe('InputDriver', () => { return true; }); - target.dispatchEvent(new KeyboardEvent('keydown', { - key: 'a', - ctrlKey: true, - shiftKey: false, - altKey: false, - metaKey: false, - })); + target.dispatchEvent( + new KeyboardEvent("keydown", { + key: "a", + ctrlKey: true, + shiftKey: false, + altKey: false, + metaKey: false, + }) + ); }); - it('invoke callback once', () => { - let a = 0, b = 0; + it("invoke callback once", () => { + let a = 0, + b = 0; driver.onKey((key: Key): boolean => { - if (key.key == 'a') { + if (key.key == "a") { ++a; } else { - key.key == 'b' + key.key == "b"; ++b; } return true; }); const events = [ - new KeyboardEvent('keydown', { key: 'a' }), - new KeyboardEvent('keydown', { key: 'b' }), - new KeyboardEvent('keypress', { key: 'a' }), - new KeyboardEvent('keyup', { key: 'a' }), - new KeyboardEvent('keypress', { key: 'b' }), - new KeyboardEvent('keyup', { key: 'b' }), + new KeyboardEvent("keydown", { key: "a" }), + new KeyboardEvent("keydown", { key: "b" }), + new KeyboardEvent("keypress", { key: "a" }), + new KeyboardEvent("keyup", { key: "a" }), + new KeyboardEvent("keypress", { key: "b" }), + new KeyboardEvent("keyup", { key: "b" }), ]; for (const e of events) { target.dispatchEvent(e); @@ -64,10 +67,12 @@ describe('InputDriver', () => { expect(a).to.equal(1); expect(b).to.equal(1); - }) + }); - it('propagates and stop handler chain', () => { - let a = 0, b = 0, c = 0; + it("propagates and stop handler chain", () => { + let a = 0, + b = 0, + c = 0; driver.onKey((_key: Key): boolean => { a++; return false; @@ -81,93 +86,117 @@ describe('InputDriver', () => { return true; }); - target.dispatchEvent(new KeyboardEvent('keydown', { key: 'b' })); + target.dispatchEvent(new KeyboardEvent("keydown", { key: "b" })); expect(a).to.equal(1); expect(b).to.equal(1); expect(c).to.equal(0); - }) + }); - it('does not invoke only meta keys', () => { - driver.onKey((_key: Key): boolean=> { + it("does not invoke only meta keys", () => { + driver.onKey((_key: Key): boolean => { expect.fail(); return false; }); - target.dispatchEvent(new KeyboardEvent('keydown', { key: 'Shift' })); - target.dispatchEvent(new KeyboardEvent('keydown', { key: 'Control' })); - target.dispatchEvent(new KeyboardEvent('keydown', { key: 'Alt' })); - target.dispatchEvent(new KeyboardEvent('keydown', { key: 'OS' })); - }) + target.dispatchEvent(new KeyboardEvent("keydown", { key: "Shift" })); + target.dispatchEvent(new KeyboardEvent("keydown", { key: "Control" })); + target.dispatchEvent(new KeyboardEvent("keydown", { key: "Alt" })); + target.dispatchEvent(new KeyboardEvent("keydown", { key: "OS" })); + }); - it('ignores events from input elements', () => { - ['input', 'textarea', 'select'].forEach((name) => { + it("ignores events from input elements", () => { + ["input", "textarea", "select"].forEach((name) => { const input = window.document.createElement(name); const driver = new InputDriver(input); driver.onKey((_key: Key): boolean => { expect.fail(); return false; }); - input.dispatchEvent(new KeyboardEvent('keydown', { key: 'x' })); + input.dispatchEvent(new KeyboardEvent("keydown", { key: "x" })); }); }); - it('ignores events from contenteditable elements', () => { - const div = window.document.createElement('div'); + it("ignores events from contenteditable elements", () => { + const div = window.document.createElement("div"); const driver = new InputDriver(div); driver.onKey((_key: Key): boolean => { expect.fail(); return false; }); - div.setAttribute('contenteditable', ''); - div.dispatchEvent(new KeyboardEvent('keydown', { key: 'x' })); + div.setAttribute("contenteditable", ""); + div.dispatchEvent(new KeyboardEvent("keydown", { key: "x" })); - div.setAttribute('contenteditable', 'true'); - div.dispatchEvent(new KeyboardEvent('keydown', { key: 'x' })); + div.setAttribute("contenteditable", "true"); + div.dispatchEvent(new KeyboardEvent("keydown", { key: "x" })); }); }); describe("#keyFromKeyboardEvent", () => { - it('returns from keyboard input Ctrl+X', () => { - const k = keyFromKeyboardEvent(new KeyboardEvent('keydown', { - key: 'x', shiftKey: false, ctrlKey: true, altKey: false, metaKey: true, - })); - expect(k.key).to.equal('x'); + it("returns from keyboard input Ctrl+X", () => { + const k = keyFromKeyboardEvent( + new KeyboardEvent("keydown", { + key: "x", + shiftKey: false, + ctrlKey: true, + altKey: false, + metaKey: true, + }) + ); + expect(k.key).to.equal("x"); expect(k.shift).to.be.false; expect(k.ctrl).to.be.true; expect(k.alt).to.be.false; expect(k.meta).to.be.true; }); - it('returns from keyboard input Shift+Esc', () => { - const k = keyFromKeyboardEvent(new KeyboardEvent('keydown', { - key: 'Escape', shiftKey: true, ctrlKey: false, altKey: false, metaKey: true - })); - expect(k.key).to.equal('Esc'); + it("returns from keyboard input Shift+Esc", () => { + const k = keyFromKeyboardEvent( + new KeyboardEvent("keydown", { + key: "Escape", + shiftKey: true, + ctrlKey: false, + altKey: false, + metaKey: true, + }) + ); + expect(k.key).to.equal("Esc"); expect(k.shift).to.be.true; expect(k.ctrl).to.be.false; expect(k.alt).to.be.false; expect(k.meta).to.be.true; }); - it('returns from keyboard input Ctrl+$', () => { + it("returns from keyboard input Ctrl+$", () => { // $ required shift pressing on most keyboards - const k = keyFromKeyboardEvent(new KeyboardEvent('keydown', { - key: '$', shiftKey: true, ctrlKey: true, altKey: false, metaKey: false - })); - expect(k.key).to.equal('$'); + const k = keyFromKeyboardEvent( + new KeyboardEvent("keydown", { + key: "$", + shiftKey: true, + ctrlKey: true, + altKey: false, + metaKey: false, + }) + ); + expect(k.key).to.equal("$"); expect(k.shift).to.be.false; expect(k.ctrl).to.be.true; expect(k.alt).to.be.false; expect(k.meta).to.be.false; }); - it('returns from keyboard input Crtl+Space', () => { - const k = keyFromKeyboardEvent(new KeyboardEvent('keydown', { - key: ' ', shiftKey: false, ctrlKey: true, altKey: false, metaKey: false - })); - expect(k.key).to.equal('Space'); + it("returns from keyboard input Crtl+Space", () => { + const k = keyFromKeyboardEvent( + new KeyboardEvent("keydown", { + key: " ", + shiftKey: false, + ctrlKey: true, + altKey: false, + metaKey: false, + }) + ); + expect(k.key).to.equal("Space"); expect(k.shift).to.be.false; expect(k.ctrl).to.be.true; expect(k.alt).to.be.false; |