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();
- });
- });
|