| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 | import { KEYS, matchKey } from "../src/keys";describe("key matcher", async () => {  it("should not match unexpected key", async () => {    expect(      matchKey(new KeyboardEvent("keydown", { key: "N" }), KEYS.Y),    ).toBeFalsy();    expect(      matchKey(new KeyboardEvent("keydown", { key: "Unidentified" }), KEYS.Z),    ).toBeFalsy();    expect(      matchKey(new KeyboardEvent("keydown", { key: "z" }), KEYS.Y),    ).toBeFalsy();    expect(      matchKey(new KeyboardEvent("keydown", { key: "y" }), KEYS.Z),    ).toBeFalsy();    expect(      matchKey(new KeyboardEvent("keydown", { key: "Z" }), KEYS.Y),    ).toBeFalsy();    expect(      matchKey(new KeyboardEvent("keydown", { key: "Y" }), KEYS.Z),    ).toBeFalsy();  });  it("should match key (case insensitive) when key is latin", async () => {    expect(      matchKey(new KeyboardEvent("keydown", { key: "z" }), KEYS.Z),    ).toBeTruthy();    expect(      matchKey(new KeyboardEvent("keydown", { key: "y" }), KEYS.Y),    ).toBeTruthy();    expect(      matchKey(new KeyboardEvent("keydown", { key: "Z" }), KEYS.Z),    ).toBeTruthy();    expect(      matchKey(new KeyboardEvent("keydown", { key: "Y" }), KEYS.Y),    ).toBeTruthy();  });  it("should match key on QWERTY, QWERTZ, AZERTY", async () => {    // QWERTY    expect(      matchKey(        new KeyboardEvent("keydown", { key: "z", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "y", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();    // QWERTZ    expect(      matchKey(        new KeyboardEvent("keydown", { key: "z", code: "KeyY" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "y", code: "KeyZ" }),        KEYS.Y,      ),    ).toBeTruthy();    // AZERTY    expect(      matchKey(        new KeyboardEvent("keydown", { key: "z", code: "KeyW" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "y", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();  });  it("should match key on DVORAK, COLEMAK", async () => {    // DVORAK    expect(      matchKey(        new KeyboardEvent("keydown", { key: "z", code: "KeySemicolon" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "y", code: "KeyF" }),        KEYS.Y,      ),    ).toBeTruthy();    // COLEMAK    expect(      matchKey(        new KeyboardEvent("keydown", { key: "z", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "y", code: "KeyJ" }),        KEYS.Y,      ),    ).toBeTruthy();  });  it("should match key on Turkish-Q", async () => {    // Turkish-Q    expect(      matchKey(        new KeyboardEvent("keydown", { key: "z", code: "KeyN" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "Y", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();  });  it("should not fallback when code is not defined", async () => {    expect(      matchKey(new KeyboardEvent("keydown", { key: "я" }), KEYS.Z),    ).toBeFalsy();    expect(      matchKey(new KeyboardEvent("keydown", { key: "卜" }), KEYS.Y),    ).toBeFalsy();  });  it("should not fallback when code is incorrect", async () => {    expect(      matchKey(        new KeyboardEvent("keydown", { key: "z", code: "KeyY" }),        KEYS.Y,      ),    ).toBeFalsy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "Y", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeFalsy();  });  it("should fallback to code when key is non-latin", async () => {    // Macedonian    expect(      matchKey(        new KeyboardEvent("keydown", { key: "з", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "ѕ", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();    // Russian    expect(      matchKey(        new KeyboardEvent("keydown", { key: "я", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "н", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();    // Serbian    expect(      matchKey(        new KeyboardEvent("keydown", { key: "ѕ", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "з", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();    // Greek    expect(      matchKey(        new KeyboardEvent("keydown", { key: "ζ", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "υ", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();    // Hebrew    expect(      matchKey(        new KeyboardEvent("keydown", { key: "ז", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "ט", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();    // Cangjie - Traditional    expect(      matchKey(        new KeyboardEvent("keydown", { key: "重", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "卜", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();    // Japanese    expect(      matchKey(        new KeyboardEvent("keydown", { key: "つ", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "ん", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();    // 2-Set Korean    expect(      matchKey(        new KeyboardEvent("keydown", { key: "ㅋ", code: "KeyZ" }),        KEYS.Z,      ),    ).toBeTruthy();    expect(      matchKey(        new KeyboardEvent("keydown", { key: "ㅛ", code: "KeyY" }),        KEYS.Y,      ),    ).toBeTruthy();  });});
 |