import { testAll, testAllNoError, testAllObject } from "./test_utils" import * as ks from "./keyseq" import { mapstrToKeyseq as mks } from "./keyseq" function mk(k, mod?: ks.KeyModifiers) { return new ks.MinimalKey(k, mod) } { // {{{ parse and completions const keymap = new Map([ [[mk("u", { ctrlKey: true }), mk("j")], "scrollline 10"], [[mk("g"), mk("g")], "scrolltop"], [mks(""), "rarelyusedcommand"], // Test shiftKey ignoring [mks(":"), "fillcmdline"], [mks("Av"), "whatever"], [mks("i"), "testmods"], ]) // Keymap for negative tests const keymap2 = new Map([ [mks("gg"), "scrolltop"], [mks("gof"), "foo"], [mks("o"), "bar"], ]) // This one actually found a bug once! testAllObject(ks.parse, [ [[[mk("g")], keymap], { keys: [mk("g")], isMatch: true }], [[[mk("g"), mk("g")], keymap], { value: "scrolltop", isMatch: true }], [ [[mk("Escape", { shiftKey: true, altKey: true })], keymap], { value: "rarelyusedcommand", isMatch: true }, ], [ [[mk(":", { shiftKey: true })], keymap], { value: "fillcmdline", isMatch: true }, , ], [ [[mk("A", { shiftKey: true }), mk("v")], keymap], { value: "whatever", isMatch: true }, ], // Test bare modifiers [ [mks("i"), keymap], { value: "testmods", isMatch: true }, ], [ [mks("i"), keymap], { value: "testmods", isMatch: true }, ], // Test prefix problems [[mks("g"), keymap2], { keys: mks("g"), isMatch: true }], [[mks("go"), keymap2], { keys: mks("go"), isMatch: true }], [[mks("gog"), keymap2], { keys: mks("g"), isMatch: true }], [[mks("gor"), keymap2], { keys: [], isMatch: false }], // If you somehow go beyond a valid keymap (keymap is changed in // between keypresses or something) then clear the key list. [[mks("goff"), keymap2], { keys: [], isMatch: false }], [[mks("xxxxx"), keymap2], { keys: [], isMatch: false }], ]) testAllObject(ks.completions, [ [[[mk("g")], keymap], new Map([[[mk("g"), mk("g")], "scrolltop"]])], [[mks("j"), keymap], new Map([[mks("j"), "scrollline 10"]])], // -ve tests [[mks("x"), keymap], new Map()], [[mks("ggg"), keymap], new Map()], ]) } // }}} // {{{ mapstr -> keysequence testAll(ks.bracketexprToKey, [ ["", [mk("a", { ctrlKey: true }), ""]], ["", [mk("<", { metaKey: true }), ""]], ["Foo", [mk("<", { metaKey: true }), "Foo"]], ["b", [mk("a", { metaKey: true }), "b"]], ["b", [mk("Escape", { shiftKey: true }), "b"]], ["b", [mk("Tab"), "b"]], ["<>b", [mk("<"), ">b"]], ["", [mk("<"), "tag >"]], ]) testAllObject(ks.mapstrMapToKeyMap, [ [ new Map([["j", "scrollline 10"], ["gg", "scrolltop"]]), new Map([ [[mk("j")], "scrollline 10"], [[mk("g"), mk("g")], "scrolltop"], ]), ], [ new Map([["j", "scrollline 10"], ["gg", "scrolltop"]]), new Map([ [[mk("u", { ctrlKey: true }), mk("j")], "scrollline 10"], [[mk("g"), mk("g")], "scrolltop"], ]), ], ]) testAllObject(ks.mapstrToKeyseq, [ [ "Some string", [ { altKey: false, ctrlKey: false, key: "S", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "o", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "m", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "e", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: " ", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "s", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "t", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "r", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "i", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "n", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "g", metaKey: false, shiftKey: false, }, ], ], [ "hithere", [ { altKey: false, ctrlKey: false, key: "h", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "i", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: true, key: "u", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "t", metaKey: false, shiftKey: false, }, { altKey: true, ctrlKey: false, key: "Enter", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "h", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "e", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "r", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "e", metaKey: false, shiftKey: false, }, ], ], [ "wat's up ", [ { altKey: false, ctrlKey: false, key: "w", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "a", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "t", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "'", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "s", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: " ", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "u", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "p", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: " ", metaKey: false, shiftKey: false, }, { altKey: false, ctrlKey: false, key: "Escape", metaKey: false, shiftKey: true, }, ], ], ["wat's up ", mks("wat's up ")], ]) // Check order of modifiers doesn't matter // Check aliases testAllObject(mks, [ ["", mks("")], ["", mks("")], ]) // }}}