import KeySequence from "../../../src/content/domains/KeySequence"; import { expect } from "chai"; import Key from "../../../src/shared/settings/Key"; describe("KeySequence", () => { describe("#push", () => { it("append a key to the sequence", () => { const seq = new KeySequence([]); seq.push(Key.fromMapKey("g")); seq.push(Key.fromMapKey("")); expect(seq.keys[0].key).to.equal("g"); expect(seq.keys[1].key).to.equal("U"); expect(seq.keys[1].shift).to.be.true; }); }); describe("#startsWith", () => { it("returns true if the key sequence starts with param", () => { const seq = new KeySequence([ Key.fromMapKey("g"), Key.fromMapKey(""), ]); expect(seq.startsWith(new KeySequence([]))).to.be.true; expect(seq.startsWith(new KeySequence([Key.fromMapKey("g")]))).to.be.true; expect( seq.startsWith( new KeySequence([Key.fromMapKey("g"), Key.fromMapKey("")]) ) ).to.be.true; expect( seq.startsWith( new KeySequence([ Key.fromMapKey("g"), Key.fromMapKey(""), Key.fromMapKey("x"), ]) ) ).to.be.false; expect(seq.startsWith(new KeySequence([Key.fromMapKey("h")]))).to.be .false; }); it("returns true if the empty sequence starts with an empty sequence", () => { const seq = new KeySequence([]); expect(seq.startsWith(new KeySequence([]))).to.be.true; expect(seq.startsWith(new KeySequence([Key.fromMapKey("h")]))).to.be .false; }); }); describe("#isDigitOnly", () => { it("returns true the keys are only digits", () => { expect( new KeySequence([ new Key({ key: "4" }), new Key({ key: "0" }), ]).isDigitOnly() ).to.be.true; expect( new KeySequence([ new Key({ key: "4" }), new Key({ key: "0" }), new Key({ key: "z" }), ]).isDigitOnly() ).to.be.false; }); }); describe("#repeatCount", () => { it("returns repeat count with a numeric prefix", () => { let seq = new KeySequence([ new Key({ key: "1" }), new Key({ key: "0" }), new Key({ key: "g" }), new Key({ key: "g" }), ]); expect(seq.repeatCount()).to.equal(10); seq = new KeySequence([ new Key({ key: "0" }), new Key({ key: "5" }), new Key({ key: "g" }), new Key({ key: "g" }), ]); expect(seq.repeatCount()).to.equal(5); }); it("returns 1 if no numeric prefix", () => { let seq = new KeySequence([new Key({ key: "g" }), new Key({ key: "g" })]); expect(seq.repeatCount()).to.equal(1); seq = new KeySequence([]); expect(seq.repeatCount()).to.equal(1); }); it("returns whole keys if digits only sequence", () => { let seq = new KeySequence([new Key({ key: "1" }), new Key({ key: "0" })]); expect(seq.repeatCount()).to.equal(10); seq = new KeySequence([new Key({ key: "0" }), new Key({ key: "5" })]); expect(seq.repeatCount()).to.equal(5); }); }); describe("#trimNumericPrefix", () => { it("removes numeric prefix", () => { const seq = new KeySequence([ new Key({ key: "1" }), new Key({ key: "0" }), new Key({ key: "g" }), new Key({ key: "g" }), new Key({ key: "3" }), ]).trimNumericPrefix(); expect(seq.keys.map((key) => key.key)).to.deep.equal(["g", "g", "3"]); }); it("returns empty if keys contains only digis", () => { const seq = new KeySequence([ new Key({ key: "1" }), new Key({ key: "0" }), ]).trimNumericPrefix(); expect(seq.trimNumericPrefix().keys).to.be.empty; }); it("returns itself if no numeric prefix", () => { const seq = new KeySequence([ new Key({ key: "g" }), new Key({ key: "g" }), new Key({ key: "3" }), ]).trimNumericPrefix(); expect(seq.keys.map((key) => key.key)).to.deep.equal(["g", "g", "3"]); }); }); describe("#splitNumericPrefix", () => { it("splits numeric prefix", () => { expect( KeySequence.fromMapKeys("10gg").splitNumericPrefix() ).to.deep.equal([ KeySequence.fromMapKeys("10"), KeySequence.fromMapKeys("gg"), ]); expect(KeySequence.fromMapKeys("10").splitNumericPrefix()).to.deep.equal([ KeySequence.fromMapKeys("10"), new KeySequence([]), ]); expect(KeySequence.fromMapKeys("gg").splitNumericPrefix()).to.deep.equal([ new KeySequence([]), KeySequence.fromMapKeys("gg"), ]); }); }); describe("#fromMapKeys", () => { it("returns mapped keys for Shift+Esc", () => { const keys = KeySequence.fromMapKeys("").keys; expect(keys).to.have.lengthOf(1); expect(keys[0].key).to.equal("Esc"); expect(keys[0].shift).to.be.true; }); it("returns mapped keys for ad", () => { const keys = KeySequence.fromMapKeys("ad").keys; expect(keys).to.have.lengthOf(5); expect(keys[0].key).to.equal("a"); expect(keys[1].ctrl).to.be.true; expect(keys[1].key).to.equal("b"); expect(keys[2].alt).to.be.true; expect(keys[2].key).to.equal("c"); expect(keys[3].key).to.equal("d"); expect(keys[4].meta).to.be.true; expect(keys[4].key).to.equal("e"); }); }); });