From e1dac618a8b8929f601c7ec8aca3842c5ebf9d03 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Mon, 13 Apr 2020 20:37:36 +0900 Subject: Use plugin:prettier/recommended --- test/content/InputDriver.test.ts | 161 +++++++----- test/content/domains/KeySequence.test.ts | 209 ++++++++-------- test/content/mock/MockConsoleClient.ts | 6 +- test/content/mock/MockScrollPresenter.ts | 7 +- test/content/presenters/Hint.test.ts | 134 +++++----- .../content/presenters/NavigationPresenter.test.ts | 272 +++++++++++--------- .../repositories/AddonEnabledRepository.test.ts | 9 +- test/content/repositories/FindRepository.test.ts | 13 +- .../repositories/FollowKeyRepository.test.ts | 26 +- .../repositories/FollowMasterRepository.test.ts | 39 +-- .../repositories/FollowSlaveRepository.test.ts | 14 +- test/content/repositories/KeymapRepository.test.ts | 39 ++- .../content/repositories/MarkKeyRepository.test.ts | 20 +- test/content/repositories/MarkRepository.test.ts | 15 +- .../content/repositories/SettingRepository.test.ts | 24 +- test/content/usecases/AddonEnabledUseCase.test.ts | 28 +-- test/content/usecases/ClipboardUseCase.test.ts | 84 ++++--- test/content/usecases/FindUseCase.test.ts | 87 ++++--- test/content/usecases/HintKeyProducer.test.ts | 38 ++- test/content/usecases/KeymapUseCase.test.ts | 274 ++++++++++++--------- test/content/usecases/MarkUseCase.test.ts | 75 +++--- test/content/usecases/SettingUseCaase.test.ts | 34 +-- 22 files changed, 885 insertions(+), 723 deletions(-) (limited to 'test/content') diff --git a/test/content/InputDriver.test.ts b/test/content/InputDriver.test.ts index d3a55dd..bfada87 100644 --- a/test/content/InputDriver.test.ts +++ b/test/content/InputDriver.test.ts @@ -1,13 +1,15 @@ -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); }); @@ -18,9 +20,9 @@ describe('InputDriver', () => { 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 +31,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 +69,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 +88,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; diff --git a/test/content/domains/KeySequence.test.ts b/test/content/domains/KeySequence.test.ts index 5df5217..1d1debe 100644 --- a/test/content/domains/KeySequence.test.ts +++ b/test/content/domains/KeySequence.test.ts @@ -1,166 +1,179 @@ -import KeySequence from '../../../src/content/domains/KeySequence'; -import { expect } from 'chai' +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', () => { + describe("#push", () => { + it("append a key to the sequence", () => { const seq = new KeySequence([]); - seq.push(Key.fromMapKey('g')); - seq.push(Key.fromMapKey('')); + 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[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', () => { + describe("#startsWith", () => { + it("returns true if the key sequence starts with param", () => { const seq = new KeySequence([ - Key.fromMapKey('g'), - Key.fromMapKey(''), + 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; + 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', () => { + 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; - }) + 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("#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', () => { + 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' }) , + 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' }) , + 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' }) , - ]); + 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' }) , - ]); + 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' }) , - ]); + seq = new KeySequence([new Key({ key: "0" }), new Key({ key: "5" })]); expect(seq.repeatCount()).to.equal(5); }); }); - describe('#trimNumericPrefix', () => { - it('removes numeric prefix', () => { + 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' }) , + 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']); + expect(seq.keys.map((key) => key.key)).to.deep.equal(["g", "g", "3"]); }); - it('returns empty if keys contains only digis', () => { + it("returns empty if keys contains only digis", () => { const seq = new KeySequence([ - new Key({ key: '1' }), new Key({ key: '0' }) , + new Key({ key: "1" }), + new Key({ key: "0" }), ]).trimNumericPrefix(); expect(seq.trimNumericPrefix().keys).to.be.empty; }); - it('returns itself if no numeric prefix', () => { + it("returns itself if no numeric prefix", () => { const seq = new KeySequence([ - new Key({ key: 'g' }), new Key({ key: 'g' }) , new Key({ key: '3' }) , + 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']); + 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("#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; + 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].key).to.equal("Esc"); expect(keys[0].shift).to.be.true; }); - it('returns mapped keys for ad', () => { - const keys = KeySequence.fromMapKeys('ad').keys; + 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[0].key).to.equal("a"); expect(keys[1].ctrl).to.be.true; - expect(keys[1].key).to.equal('b'); + 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[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'); + expect(keys[4].key).to.equal("e"); }); - }) + }); }); diff --git a/test/content/mock/MockConsoleClient.ts b/test/content/mock/MockConsoleClient.ts index 8de2d83..849c00d 100644 --- a/test/content/mock/MockConsoleClient.ts +++ b/test/content/mock/MockConsoleClient.ts @@ -1,4 +1,4 @@ -import ConsoleClient from '../../../src/content/client/ConsoleClient'; +import ConsoleClient from "../../../src/content/client/ConsoleClient"; export default class MockConsoleClient implements ConsoleClient { public isError: boolean; @@ -7,7 +7,7 @@ export default class MockConsoleClient implements ConsoleClient { constructor() { this.isError = false; - this.text = ''; + this.text = ""; } info(text: string): Promise { @@ -22,5 +22,3 @@ export default class MockConsoleClient implements ConsoleClient { return Promise.resolve(); } } - - diff --git a/test/content/mock/MockScrollPresenter.ts b/test/content/mock/MockScrollPresenter.ts index 819569a..c802227 100644 --- a/test/content/mock/MockScrollPresenter.ts +++ b/test/content/mock/MockScrollPresenter.ts @@ -1,8 +1,10 @@ -import ScrollPresenter, { Point } from '../../../src/content/presenters/ScrollPresenter'; +import ScrollPresenter, { + Point, +} from "../../../src/content/presenters/ScrollPresenter"; export default class MockScrollPresenter implements ScrollPresenter { private pos: Point; - + constructor() { this.pos = { x: 0, y: 0 }; } @@ -44,4 +46,3 @@ export default class MockScrollPresenter implements ScrollPresenter { this.pos.x = Infinity; } } - diff --git a/test/content/presenters/Hint.test.ts b/test/content/presenters/Hint.test.ts index 7daa63d..e64c39f 100644 --- a/test/content/presenters/Hint.test.ts +++ b/test/content/presenters/Hint.test.ts @@ -1,53 +1,55 @@ -import AbstractHint, { LinkHint, InputHint } from '../../../src/content/presenters/Hint'; -import { expect } from 'chai'; +import AbstractHint, { + LinkHint, + InputHint, +} from "../../../src/content/presenters/Hint"; +import { expect } from "chai"; -class Hint extends AbstractHint { -} +class Hint extends AbstractHint {} -describe('Hint', () => { +describe("Hint", () => { beforeEach(() => { document.body.innerHTML = `link`; }); - describe('#constructor', () => { - it('creates a hint element with tag name', () => { - const link = document.getElementById('test-link'); - new Hint(link, 'abc'); + describe("#constructor", () => { + it("creates a hint element with tag name", () => { + const link = document.getElementById("test-link"); + new Hint(link, "abc"); - const elem = document.querySelector('.vimvixen-hint'); - expect(elem.textContent.trim()).to.be.equal('abc'); + const elem = document.querySelector(".vimvixen-hint"); + expect(elem.textContent.trim()).to.be.equal("abc"); }); }); - describe('#show', () => { - it('shows an element', () => { - const link = document.getElementById('test-link'); - const hint = new Hint(link, 'abc'); + describe("#show", () => { + it("shows an element", () => { + const link = document.getElementById("test-link"); + const hint = new Hint(link, "abc"); hint.hide(); hint.show(); - const elem = document.querySelector('.vimvixen-hint') as HTMLElement; - expect(elem.style.display).to.not.equal('none'); + const elem = document.querySelector(".vimvixen-hint") as HTMLElement; + expect(elem.style.display).to.not.equal("none"); }); }); - describe('#hide', () => { - it('hides an element', () => { - const link = document.getElementById('test-link') as HTMLElement; - const hint = new Hint(link, 'abc'); + describe("#hide", () => { + it("hides an element", () => { + const link = document.getElementById("test-link") as HTMLElement; + const hint = new Hint(link, "abc"); hint.hide(); - const elem = document.querySelector('.vimvixen-hint') as HTMLElement; - expect(elem.style.display).to.equal('none'); + const elem = document.querySelector(".vimvixen-hint") as HTMLElement; + expect(elem.style.display).to.equal("none"); }); }); - describe('#remove', () => { - it('removes an element', () => { - const link = document.getElementById('test-link'); - const hint = new Hint(link, 'abc'); + describe("#remove", () => { + it("removes an element", () => { + const link = document.getElementById("test-link"); + const hint = new Hint(link, "abc"); - const elem = document.querySelector('.vimvixen-hint'); + const elem = document.querySelector(".vimvixen-hint"); expect(elem.parentElement).to.not.be.null; hint.remove(); expect(elem.parentElement).to.be.null; @@ -55,7 +57,7 @@ describe('Hint', () => { }); }); -describe('LinkHint', () => { +describe("LinkHint", () => { beforeEach(() => { document.body.innerHTML = ` link @@ -64,50 +66,52 @@ describe('LinkHint', () => { `; }); - describe('#getLink()', () => { + describe("#getLink()", () => { it('returns value of "href" attribute', () => { - const link = document.getElementById('test-link1') as HTMLAnchorElement; - const hint = new LinkHint(link, 'abc'); + const link = document.getElementById("test-link1") as HTMLAnchorElement; + const hint = new LinkHint(link, "abc"); - expect(hint.getLink()).to.equal('https://google.com/'); + expect(hint.getLink()).to.equal("https://google.com/"); }); }); - describe('#getLinkTarget()', () => { + describe("#getLinkTarget()", () => { it('returns value of "target" attribute', () => { - let link = document.getElementById('test-link1') as HTMLAnchorElement; - let hint = new LinkHint(link, 'abc'); + let link = document.getElementById("test-link1") as HTMLAnchorElement; + let hint = new LinkHint(link, "abc"); expect(hint.getLinkTarget()).to.be.null; - link = document.getElementById('test-link2') as HTMLAnchorElement; - hint = new LinkHint(link, 'abc'); + link = document.getElementById("test-link2") as HTMLAnchorElement; + hint = new LinkHint(link, "abc"); - expect(hint.getLinkTarget()).to.equal('_blank'); + expect(hint.getLinkTarget()).to.equal("_blank"); }); }); - describe('#click()', () => { - it('clicks a element', (done) => { - const link = document.getElementById('test-link3') as HTMLAnchorElement; - const hint = new LinkHint(link, 'abc'); - link.onclick = () => { done() }; + describe("#click()", () => { + it("clicks a element", (done) => { + const link = document.getElementById("test-link3") as HTMLAnchorElement; + const hint = new LinkHint(link, "abc"); + link.onclick = () => { + done(); + }; hint.click(); }); }); }); -describe('InputHint', () => { - describe('#activate()', () => { - context('', () => { +describe("InputHint", () => { + describe("#activate()", () => { + context("", () => { beforeEach(() => { document.body.innerHTML = ``; }); - it('focuses to the input', () => { - const input = document.getElementById('test-input') as HTMLInputElement; - const hint = new InputHint(input, 'abc'); + it("focuses to the input", () => { + const input = document.getElementById("test-input") as HTMLInputElement; + const hint = new InputHint(input, "abc"); hint.activate(); expect(document.activeElement).to.equal(input); @@ -119,38 +123,44 @@ describe('InputHint', () => { document.body.innerHTML = ``; }); - it('checks and focuses to the input', () => { - const input = document.getElementById('test-input') as HTMLInputElement; - const hint = new InputHint(input, 'abc'); + it("checks and focuses to the input", () => { + const input = document.getElementById("test-input") as HTMLInputElement; + const hint = new InputHint(input, "abc"); hint.activate(); expect(input.checked).to.be.true; }); }); - context('`; }); - it('focuses to the textarea', () => { - const textarea = document.getElementById('test-textarea') as HTMLTextAreaElement; - const hint = new InputHint(textarea, 'abc'); + it("focuses to the textarea", () => { + const textarea = document.getElementById( + "test-textarea" + ) as HTMLTextAreaElement; + const hint = new InputHint(textarea, "abc"); hint.activate(); expect(document.activeElement).to.equal(textarea); }); }); - context('`; }); - it('clicks the button', (done) => { - const button = document.getElementById('test-button') as HTMLButtonElement; - button.onclick = () => { done() }; + it("clicks the button", (done) => { + const button = document.getElementById( + "test-button" + ) as HTMLButtonElement; + button.onclick = () => { + done(); + }; - const hint = new InputHint(button, 'abc'); + const hint = new InputHint(button, "abc"); hint.activate(); }); }); diff --git a/test/content/presenters/NavigationPresenter.test.ts b/test/content/presenters/NavigationPresenter.test.ts index 6aa057b..b362d8d 100644 --- a/test/content/presenters/NavigationPresenter.test.ts +++ b/test/content/presenters/NavigationPresenter.test.ts @@ -1,11 +1,12 @@ -import { NavigationPresenterImpl } from '../../../src/content/presenters/NavigationPresenter'; -import { expect } from 'chai'; +import { NavigationPresenterImpl } from "../../../src/content/presenters/NavigationPresenter"; +import { expect } from "chai"; -describe('NavigationPresenterImpl', () => { +describe("NavigationPresenterImpl", () => { let sut: NavigationPresenterImpl; const testRel = (done, rel, html) => { - const method = rel === 'prev' ? sut.openLinkPrev.bind(sut) : sut.openLinkNext.bind(sut); + const method = + rel === "prev" ? sut.openLinkPrev.bind(sut) : sut.openLinkNext.bind(sut); document.body.innerHTML = html; method(); setTimeout(() => { @@ -13,122 +14,165 @@ describe('NavigationPresenterImpl', () => { done(); }, 0); }; - const testPrev = html => done => testRel(done, 'prev', html); - const testNext = html => done => testRel(done, 'next', html); + const testPrev = (html) => (done) => testRel(done, "prev", html); + const testNext = (html) => (done) => testRel(done, "next", html); before(() => { sut = new NavigationPresenterImpl(); }); - describe('#linkPrev', () => { - it('navigates to elements whose rel attribute is "prev"', testPrev( - '' - )); - - it('navigates to elements whose rel attribute starts with "prev"', testPrev( - '' - )); - - it('navigates to elements whose rel attribute ends with "prev"', testPrev( - '' - )); - - it('navigates to elements whose rel attribute contains "prev"', testPrev( - '' - )); - - it('navigates to elements whose rel attribute is "prev"', testPrev( - '' - )); - - it('navigates to elements whose rel attribute starts with "prev"', testPrev( - 'click me' - )); - - it('navigates to elements whose rel attribute ends with "prev"', testPrev( - 'click me' - )); - - it('navigates to elements whose rel attribute contains "prev"', testPrev( - 'click me' - )); - - it('navigates to elements whose text matches "prev"', testPrev( - 'previewgo to prev' - )); - - it('navigates to elements whose text matches "previous"', testPrev( - 'previouslyprevious page' - )); - - it('navigates to elements whose decoded text matches "<<"', testPrev( - 'click me<<' - )); - - it('navigates to matching elements by clicking', testPrev( - `` - )); - - it('prefers link[rel~=prev] to a[rel~=prev]', testPrev( - '' - )); - - it('prefers a[rel~=prev] to a::text(pattern)', testPrev( - 'go to prev' - )); + describe("#linkPrev", () => { + it( + 'navigates to elements whose rel attribute is "prev"', + testPrev('') + ); + + it( + 'navigates to elements whose rel attribute starts with "prev"', + testPrev('') + ); + + it( + 'navigates to elements whose rel attribute ends with "prev"', + testPrev('') + ); + + it( + 'navigates to elements whose rel attribute contains "prev"', + testPrev('') + ); + + it( + 'navigates to elements whose rel attribute is "prev"', + testPrev('') + ); + + it( + 'navigates to elements whose rel attribute starts with "prev"', + testPrev('click me') + ); + + it( + 'navigates to elements whose rel attribute ends with "prev"', + testPrev('click me') + ); + + it( + 'navigates to elements whose rel attribute contains "prev"', + testPrev('click me') + ); + + it( + 'navigates to elements whose text matches "prev"', + testPrev('previewgo to prev') + ); + + it( + 'navigates to elements whose text matches "previous"', + testPrev( + 'previouslyprevious page' + ) + ); + + it( + 'navigates to elements whose decoded text matches "<<"', + testPrev('click me<<') + ); + + it( + "navigates to matching elements by clicking", + testPrev( + `` + ) + ); + + it( + "prefers link[rel~=prev] to a[rel~=prev]", + testPrev( + '' + ) + ); + + it( + "prefers a[rel~=prev] to a::text(pattern)", + testPrev( + 'go to prev' + ) + ); }); - describe('#linkNext', () => { - it('navigates to elements whose rel attribute is "next"', testNext( - '' - )); - - it('navigates to elements whose rel attribute starts with "next"', testNext( - '' - )); - - it('navigates to elements whose rel attribute ends with "next"', testNext( - '' - )); - - it('navigates to elements whose rel attribute contains "next"', testNext( - '' - )); - - it('navigates to elements whose rel attribute is "next"', testNext( - '' - )); - - it('navigates to elements whose rel attribute starts with "next"', testNext( - 'click me' - )); - - it('navigates to elements whose rel attribute ends with "next"', testNext( - 'click me' - )); - - it('navigates to elements whose rel attribute contains "next"', testNext( - 'click me' - )); - - it('navigates to elements whose text matches "next"', testNext( - 'inextricablego to next' - )); - - it('navigates to elements whose decoded text matches ">>"', testNext( - 'click me>>' - )); - - it('navigates to matching elements by clicking', testNext( - `` - )); - - it('prefers link[rel~=next] to a[rel~=next]', testNext( - '' - )); - - it('prefers a[rel~=next] to a::text(pattern)', testNext( - 'next page' - )); + describe("#linkNext", () => { + it( + 'navigates to elements whose rel attribute is "next"', + testNext('') + ); + + it( + 'navigates to elements whose rel attribute starts with "next"', + testNext('') + ); + + it( + 'navigates to elements whose rel attribute ends with "next"', + testNext('') + ); + + it( + 'navigates to elements whose rel attribute contains "next"', + testNext('') + ); + + it( + 'navigates to elements whose rel attribute is "next"', + testNext('') + ); + + it( + 'navigates to elements whose rel attribute starts with "next"', + testNext('click me') + ); + + it( + 'navigates to elements whose rel attribute ends with "next"', + testNext('click me') + ); + + it( + 'navigates to elements whose rel attribute contains "next"', + testNext('click me') + ); + + it( + 'navigates to elements whose text matches "next"', + testNext( + 'inextricablego to next' + ) + ); + + it( + 'navigates to elements whose decoded text matches ">>"', + testNext('click me>>') + ); + + it( + "navigates to matching elements by clicking", + testNext( + `` + ) + ); + + it( + "prefers link[rel~=next] to a[rel~=next]", + testNext( + '' + ) + ); + + it( + "prefers a[rel~=next] to a::text(pattern)", + testNext( + 'next page' + ) + ); }); }); diff --git a/test/content/repositories/AddonEnabledRepository.test.ts b/test/content/repositories/AddonEnabledRepository.test.ts index 7edd50e..13dff76 100644 --- a/test/content/repositories/AddonEnabledRepository.test.ts +++ b/test/content/repositories/AddonEnabledRepository.test.ts @@ -1,8 +1,8 @@ -import { AddonEnabledRepositoryImpl } from '../../../src/content/repositories/AddonEnabledRepository'; -import { expect } from 'chai'; +import { AddonEnabledRepositoryImpl } from "../../../src/content/repositories/AddonEnabledRepository"; +import { expect } from "chai"; -describe('AddonEnabledRepositoryImpl', () => { - it('updates and gets current value', () => { +describe("AddonEnabledRepositoryImpl", () => { + it("updates and gets current value", () => { const sut = new AddonEnabledRepositoryImpl(); sut.set(true); @@ -12,4 +12,3 @@ describe('AddonEnabledRepositoryImpl', () => { expect(sut.get()).to.be.false; }); }); - diff --git a/test/content/repositories/FindRepository.test.ts b/test/content/repositories/FindRepository.test.ts index 0e50b0a..e0abb9d 100644 --- a/test/content/repositories/FindRepository.test.ts +++ b/test/content/repositories/FindRepository.test.ts @@ -1,15 +1,14 @@ -import { FindRepositoryImpl } from '../../../src/content/repositories/FindRepository'; -import { expect } from 'chai'; +import { FindRepositoryImpl } from "../../../src/content/repositories/FindRepository"; +import { expect } from "chai"; -describe('FindRepositoryImpl', () => { - it('updates and gets last keyword', () => { +describe("FindRepositoryImpl", () => { + it("updates and gets last keyword", () => { const sut = new FindRepositoryImpl(); expect(sut.getLastKeyword()).to.be.null; - sut.setLastKeyword('monkey'); + sut.setLastKeyword("monkey"); - expect(sut.getLastKeyword()).to.equal('monkey'); + expect(sut.getLastKeyword()).to.equal("monkey"); }); }); - diff --git a/test/content/repositories/FollowKeyRepository.test.ts b/test/content/repositories/FollowKeyRepository.test.ts index eae58b9..6608662 100644 --- a/test/content/repositories/FollowKeyRepository.test.ts +++ b/test/content/repositories/FollowKeyRepository.test.ts @@ -1,31 +1,29 @@ -import FollowKeyRepository, { FollowKeyRepositoryImpl } - from '../../../src/content/repositories/FollowKeyRepository'; -import { expect } from 'chai'; +import FollowKeyRepository, { + FollowKeyRepositoryImpl, +} from "../../../src/content/repositories/FollowKeyRepository"; +import { expect } from "chai"; -describe('FollowKeyRepositoryImpl', () => { +describe("FollowKeyRepositoryImpl", () => { let sut: FollowKeyRepository; before(() => { sut = new FollowKeyRepositoryImpl(); }); - describe('#getKeys()/#pushKey()/#popKey()', () => { - it('enqueues keys', () => { + describe("#getKeys()/#pushKey()/#popKey()", () => { + it("enqueues keys", () => { expect(sut.getKeys()).to.be.empty; - sut.pushKey('a'); - sut.pushKey('b'); - sut.pushKey('c'); - expect(sut.getKeys()).to.deep.equal(['a', 'b', 'c']); + sut.pushKey("a"); + sut.pushKey("b"); + sut.pushKey("c"); + expect(sut.getKeys()).to.deep.equal(["a", "b", "c"]); sut.popKey(); - expect(sut.getKeys()).to.deep.equal(['a', 'b']); + expect(sut.getKeys()).to.deep.equal(["a", "b"]); sut.clearKeys(); expect(sut.getKeys()).to.be.empty; }); }); }); - - - diff --git a/test/content/repositories/FollowMasterRepository.test.ts b/test/content/repositories/FollowMasterRepository.test.ts index 3eb172f..9b5e151 100644 --- a/test/content/repositories/FollowMasterRepository.test.ts +++ b/test/content/repositories/FollowMasterRepository.test.ts @@ -1,42 +1,43 @@ -import FollowMasterRepository, { FollowMasterRepositoryImpl } - from '../../../src/content/repositories/FollowMasterRepository'; -import { expect } from 'chai'; +import FollowMasterRepository, { + FollowMasterRepositoryImpl, +} from "../../../src/content/repositories/FollowMasterRepository"; +import { expect } from "chai"; -describe('FollowMasterRepositoryImpl', () => { +describe("FollowMasterRepositoryImpl", () => { let sut: FollowMasterRepository; before(() => { sut = new FollowMasterRepositoryImpl(); }); - describe('#getTags()/#addTag()/#clearTags()', () => { - it('gets, adds and clears tags', () => { + describe("#getTags()/#addTag()/#clearTags()", () => { + it("gets, adds and clears tags", () => { expect(sut.getTags()).to.be.empty; - sut.addTag('a'); - sut.addTag('b'); - sut.addTag('c'); - expect(sut.getTags()).to.deep.equal(['a', 'b', 'c']); + sut.addTag("a"); + sut.addTag("b"); + sut.addTag("c"); + expect(sut.getTags()).to.deep.equal(["a", "b", "c"]); sut.clearTags(); expect(sut.getTags()).to.be.empty; }); }); - describe('#getTagsByPrefix', () => { - it('gets tags matched by prefix', () => { - for (const tag of ['a', 'aa', 'ab', 'b', 'ba', 'bb']) { + describe("#getTagsByPrefix", () => { + it("gets tags matched by prefix", () => { + for (const tag of ["a", "aa", "ab", "b", "ba", "bb"]) { sut.addTag(tag); } - expect(sut.getTagsByPrefix('a')).to.deep.equal(['a', 'aa', 'ab']); - expect(sut.getTagsByPrefix('aa')).to.deep.equal(['aa']); - expect(sut.getTagsByPrefix('b')).to.deep.equal(['b', 'ba', 'bb']); - expect(sut.getTagsByPrefix('c')).to.be.empty; + expect(sut.getTagsByPrefix("a")).to.deep.equal(["a", "aa", "ab"]); + expect(sut.getTagsByPrefix("aa")).to.deep.equal(["aa"]); + expect(sut.getTagsByPrefix("b")).to.deep.equal(["b", "ba", "bb"]); + expect(sut.getTagsByPrefix("c")).to.be.empty; }); }); - describe('#setCurrentFollowMode()/#getCurrentNewTabMode()/#getCurrentBackgroundMode', () => { - it('updates and gets follow mode', () => { + describe("#setCurrentFollowMode()/#getCurrentNewTabMode()/#getCurrentBackgroundMode", () => { + it("updates and gets follow mode", () => { sut.setCurrentFollowMode(false, true); expect(sut.getCurrentNewTabMode()).to.be.false; expect(sut.getCurrentBackgroundMode()).to.be.true; diff --git a/test/content/repositories/FollowSlaveRepository.test.ts b/test/content/repositories/FollowSlaveRepository.test.ts index 10cf094..0f829b2 100644 --- a/test/content/repositories/FollowSlaveRepository.test.ts +++ b/test/content/repositories/FollowSlaveRepository.test.ts @@ -1,16 +1,17 @@ -import FollowSlaveRepository, { FollowSlaveRepositoryImpl } - from '../../../src/content/repositories/FollowSlaveRepository'; -import { expect } from 'chai'; +import FollowSlaveRepository, { + FollowSlaveRepositoryImpl, +} from "../../../src/content/repositories/FollowSlaveRepository"; +import { expect } from "chai"; -describe('FollowSlaveRepository', () => { +describe("FollowSlaveRepository", () => { let sut: FollowSlaveRepository; before(() => { sut = new FollowSlaveRepositoryImpl(); }); - describe('#isFollowMode()/#enableFollowMode()/#disableFollowMode()', () => { - it('gets, adds updates follow mode', () => { + describe("#isFollowMode()/#enableFollowMode()/#disableFollowMode()", () => { + it("gets, adds updates follow mode", () => { expect(sut.isFollowMode()).to.be.false; sut.enableFollowMode(); @@ -21,4 +22,3 @@ describe('FollowSlaveRepository', () => { }); }); }); - diff --git a/test/content/repositories/KeymapRepository.test.ts b/test/content/repositories/KeymapRepository.test.ts index 68f515c..0e01a73 100644 --- a/test/content/repositories/KeymapRepository.test.ts +++ b/test/content/repositories/KeymapRepository.test.ts @@ -1,39 +1,38 @@ -import KeymapRepository, { KeymapRepositoryImpl } - from '../../../src/content/repositories/KeymapRepository'; -import { expect } from 'chai'; +import KeymapRepository, { + KeymapRepositoryImpl, +} from "../../../src/content/repositories/KeymapRepository"; +import { expect } from "chai"; import Key from "../../../src/shared/settings/Key"; -describe('KeymapRepositoryImpl', () => { +describe("KeymapRepositoryImpl", () => { let sut: KeymapRepository; before(() => { sut = new KeymapRepositoryImpl(); }); - describe('#enqueueKey()', () => { - it('enqueues keys', () => { - sut.enqueueKey(Key.fromMapKey('a')); - sut.enqueueKey(Key.fromMapKey('b')); - const sequence = sut.enqueueKey(Key.fromMapKey('c')); + describe("#enqueueKey()", () => { + it("enqueues keys", () => { + sut.enqueueKey(Key.fromMapKey("a")); + sut.enqueueKey(Key.fromMapKey("b")); + const sequence = sut.enqueueKey(Key.fromMapKey("c")); const keys = sequence.keys; - expect(keys[0].equals(Key.fromMapKey('a'))).to.be.true; - expect(keys[1].equals(Key.fromMapKey('b'))).to.be.true; - expect(keys[2].equals(Key.fromMapKey('c'))).to.be.true; + expect(keys[0].equals(Key.fromMapKey("a"))).to.be.true; + expect(keys[1].equals(Key.fromMapKey("b"))).to.be.true; + expect(keys[2].equals(Key.fromMapKey("c"))).to.be.true; }); }); - describe('#clear()', () => { - it('clears keys', () => { - sut.enqueueKey(Key.fromMapKey('a')); - sut.enqueueKey(Key.fromMapKey('b')); - sut.enqueueKey(Key.fromMapKey('c')); + describe("#clear()", () => { + it("clears keys", () => { + sut.enqueueKey(Key.fromMapKey("a")); + sut.enqueueKey(Key.fromMapKey("b")); + sut.enqueueKey(Key.fromMapKey("c")); sut.clear(); - const sequence = sut.enqueueKey(Key.fromMapKey('a')); + const sequence = sut.enqueueKey(Key.fromMapKey("a")); expect(sequence.length()).to.equal(1); }); }); }); - - diff --git a/test/content/repositories/MarkKeyRepository.test.ts b/test/content/repositories/MarkKeyRepository.test.ts index 8592332..473b4dc 100644 --- a/test/content/repositories/MarkKeyRepository.test.ts +++ b/test/content/repositories/MarkKeyRepository.test.ts @@ -1,16 +1,17 @@ -import MarkRepository, { MarkKeyRepositoryImpl } - from '../../../src/content/repositories/MarkKeyRepository'; -import { expect } from 'chai'; +import MarkRepository, { + MarkKeyRepositoryImpl, +} from "../../../src/content/repositories/MarkKeyRepository"; +import { expect } from "chai"; -describe('MarkKeyRepositoryImpl', () => { +describe("MarkKeyRepositoryImpl", () => { let sut: MarkRepository; before(() => { sut = new MarkKeyRepositoryImpl(); - }) + }); - describe('#isSetMode/#enableSetMode/#disabeSetMode', () => { - it('enables and disables set mode', () => { + describe("#isSetMode/#enableSetMode/#disabeSetMode", () => { + it("enables and disables set mode", () => { expect(sut.isSetMode()).to.be.false; sut.enableSetMode(); @@ -21,8 +22,8 @@ describe('MarkKeyRepositoryImpl', () => { }); }); - describe('#isJumpMode/#enableJumpMode/#disabeJumpMode', () => { - it('enables and disables jump mode', () => { + describe("#isJumpMode/#enableJumpMode/#disabeJumpMode", () => { + it("enables and disables jump mode", () => { expect(sut.isJumpMode()).to.be.false; sut.enableJumpMode(); @@ -33,4 +34,3 @@ describe('MarkKeyRepositoryImpl', () => { }); }); }); - diff --git a/test/content/repositories/MarkRepository.test.ts b/test/content/repositories/MarkRepository.test.ts index 6ddd38d..f2a7326 100644 --- a/test/content/repositories/MarkRepository.test.ts +++ b/test/content/repositories/MarkRepository.test.ts @@ -1,13 +1,12 @@ -import { MarkRepositoryImpl } from '../../../src/content/repositories/MarkRepository'; -import { expect } from 'chai'; +import { MarkRepositoryImpl } from "../../../src/content/repositories/MarkRepository"; +import { expect } from "chai"; -describe('MarkRepositoryImpl', () => { - it('save and load marks', () => { +describe("MarkRepositoryImpl", () => { + it("save and load marks", () => { const sut = new MarkRepositoryImpl(); - sut.set('a', { x: 10, y: 20 }); - expect(sut.get('a')).to.deep.equal({ x: 10, y: 20 }); - expect(sut.get('b')).to.be.null; + sut.set("a", { x: 10, y: 20 }); + expect(sut.get("a")).to.deep.equal({ x: 10, y: 20 }); + expect(sut.get("b")).to.be.null; }); }); - diff --git a/test/content/repositories/SettingRepository.test.ts b/test/content/repositories/SettingRepository.test.ts index e45d7c4..99247a9 100644 --- a/test/content/repositories/SettingRepository.test.ts +++ b/test/content/repositories/SettingRepository.test.ts @@ -1,23 +1,23 @@ -import { SettingRepositoryImpl } from '../../../src/content/repositories/SettingRepository'; -import { expect } from 'chai'; -import Settings from '../../../src/shared/settings/Settings'; +import { SettingRepositoryImpl } from "../../../src/content/repositories/SettingRepository"; +import { expect } from "chai"; +import Settings from "../../../src/shared/settings/Settings"; -describe('SettingRepositoryImpl', () => { - it('updates and gets current value', () => { +describe("SettingRepositoryImpl", () => { + it("updates and gets current value", () => { const sut = new SettingRepositoryImpl(); const settings = Settings.fromJSON({ keymaps: {}, - search:{ - default: 'google', + search: { + default: "google", engines: { - google: 'https://google.com/?q={}', - } + google: "https://google.com/?q={}", + }, }, properties: { - hintchars: 'abcd1234', + hintchars: "abcd1234", smoothscroll: false, - complete: 'sbh', + complete: "sbh", }, blacklist: [], }); @@ -25,6 +25,6 @@ describe('SettingRepositoryImpl', () => { sut.set(settings); const actual = sut.get(); - expect(actual.properties.hintchars).to.equal('abcd1234'); + expect(actual.properties.hintchars).to.equal("abcd1234"); }); }); diff --git a/test/content/usecases/AddonEnabledUseCase.test.ts b/test/content/usecases/AddonEnabledUseCase.test.ts index 8c15099..885da83 100644 --- a/test/content/usecases/AddonEnabledUseCase.test.ts +++ b/test/content/usecases/AddonEnabledUseCase.test.ts @@ -1,7 +1,7 @@ -import AddonEnabledRepository from '../../../src/content/repositories/AddonEnabledRepository'; -import AddonEnabledUseCase from '../../../src/content/usecases/AddonEnabledUseCase'; -import AddonIndicatorClient from '../../../src/content/client/AddonIndicatorClient'; -import { expect } from 'chai'; +import AddonEnabledRepository from "../../../src/content/repositories/AddonEnabledRepository"; +import AddonEnabledUseCase from "../../../src/content/usecases/AddonEnabledUseCase"; +import AddonIndicatorClient from "../../../src/content/client/AddonIndicatorClient"; +import { expect } from "chai"; class MockAddonEnabledRepository implements AddonEnabledRepository { private enabled: boolean; @@ -28,11 +28,11 @@ class MockAddonIndicatorClient implements AddonIndicatorClient { async setEnabled(enabled: boolean): Promise { this.enabled = enabled; - return + return; } } -describe('AddonEnabledUseCase', () => { +describe("AddonEnabledUseCase", () => { let repository: MockAddonEnabledRepository; let indicator: MockAddonIndicatorClient; let sut: AddonEnabledUseCase; @@ -43,8 +43,8 @@ describe('AddonEnabledUseCase', () => { sut = new AddonEnabledUseCase(indicator, repository); }); - describe('#enable', () => { - it('store and indicate as enabled', async() => { + describe("#enable", () => { + it("store and indicate as enabled", async () => { await sut.enable(); expect(repository.get()).to.be.true; @@ -52,8 +52,8 @@ describe('AddonEnabledUseCase', () => { }); }); - describe('#disable', async() => { - it('store and indicate as disabled', async() => { + describe("#disable", async () => { + it("store and indicate as disabled", async () => { await sut.disable(); expect(repository.get()).to.be.false; @@ -61,8 +61,8 @@ describe('AddonEnabledUseCase', () => { }); }); - describe('#toggle', () => { - it('toggled enabled and disabled', async() => { + describe("#toggle", () => { + it("toggled enabled and disabled", async () => { repository.set(true); await sut.toggle(); @@ -78,8 +78,8 @@ describe('AddonEnabledUseCase', () => { }); }); - describe('#getEnabled', () => { - it('returns current addon enabled', () => { + describe("#getEnabled", () => { + it("returns current addon enabled", () => { repository.set(true); expect(sut.getEnabled()).to.be.true; diff --git a/test/content/usecases/ClipboardUseCase.test.ts b/test/content/usecases/ClipboardUseCase.test.ts index 3cc82fe..5de3e69 100644 --- a/test/content/usecases/ClipboardUseCase.test.ts +++ b/test/content/usecases/ClipboardUseCase.test.ts @@ -1,14 +1,14 @@ -import ClipboardRepository from '../../../src/content/repositories/ClipboardRepository'; -import { SettingRepositoryImpl } from '../../../src/content/repositories/SettingRepository'; -import ClipboardUseCase from '../../../src/content/usecases/ClipboardUseCase'; -import OperationClient from '../../../src/content/client/OperationClient'; -import ConsoleClient from '../../../src/content/client/ConsoleClient'; +import ClipboardRepository from "../../../src/content/repositories/ClipboardRepository"; +import { SettingRepositoryImpl } from "../../../src/content/repositories/SettingRepository"; +import ClipboardUseCase from "../../../src/content/usecases/ClipboardUseCase"; +import OperationClient from "../../../src/content/client/OperationClient"; +import ConsoleClient from "../../../src/content/client/ConsoleClient"; -import * as sinon from 'sinon'; -import { expect } from 'chai'; -import {Operation} from "../../../src/shared/operations"; +import * as sinon from "sinon"; +import { expect } from "chai"; +import { Operation } from "../../../src/shared/operations"; -describe('ClipboardUseCase', () => { +describe("ClipboardUseCase", () => { let clipboardRepository: ClipboardRepository; let operationClient: OperationClient; @@ -18,34 +18,48 @@ describe('ClipboardUseCase', () => { let sut: ClipboardUseCase; beforeEach(() => { - clipboardRepository = new class implements ClipboardRepository { - read(): string { return ""; } + clipboardRepository = new (class implements ClipboardRepository { + read(): string { + return ""; + } write(_text: string) {} - }; - operationClient = new class implements OperationClient { - execBackgroundOp(_repeat: number, _op: Operation): Promise { return Promise.resolve() } - internalOpenUrl(_url: string, _newTab?: boolean, _background?: boolean): Promise { return Promise.resolve() } - }; - consoleClient = new class implements ConsoleClient { - error(_text: string): Promise { return Promise.resolve() } - info(_text: string): Promise { return Promise.resolve() } - }; + })(); + operationClient = new (class implements OperationClient { + execBackgroundOp(_repeat: number, _op: Operation): Promise { + return Promise.resolve(); + } + internalOpenUrl( + _url: string, + _newTab?: boolean, + _background?: boolean + ): Promise { + return Promise.resolve(); + } + })(); + consoleClient = new (class implements ConsoleClient { + error(_text: string): Promise { + return Promise.resolve(); + } + info(_text: string): Promise { + return Promise.resolve(); + } + })(); sut = new ClipboardUseCase( clipboardRepository, new SettingRepositoryImpl(), consoleClient, - operationClient, - ); + operationClient + ); }); - describe('#yankCurrentURL', () => { - it('yanks current url', async () => { + describe("#yankCurrentURL", () => { + it("yanks current url", async () => { const href = window.location.href; const mockRepository = sinon.mock(clipboardRepository); - mockRepository.expects('write').withArgs(href); + mockRepository.expects("write").withArgs(href); const mockConsoleClient = sinon.mock(consoleClient); - mockConsoleClient.expects('info').withArgs('Yanked ' + href); + mockConsoleClient.expects("info").withArgs("Yanked " + href); const yanked = await sut.yankCurrentURL(); @@ -55,23 +69,23 @@ describe('ClipboardUseCase', () => { }); }); - describe('#openOrSearch', () => { - it('opens url from the clipboard', async () => { - const url = 'https://github.com/ueokande/vim-vixen' - sinon.stub(clipboardRepository, 'read').returns(url); + describe("#openOrSearch", () => { + it("opens url from the clipboard", async () => { + const url = "https://github.com/ueokande/vim-vixen"; + sinon.stub(clipboardRepository, "read").returns(url); const mockOperationClient = sinon.mock(operationClient); - mockOperationClient.expects('internalOpenUrl').withArgs(url, true); + mockOperationClient.expects("internalOpenUrl").withArgs(url, true); await sut.openOrSearch(true); mockOperationClient.verify(); }); - it('opens search results from the clipboard', async () => { - const url = 'https://google.com/search?q=banana'; - sinon.stub(clipboardRepository, 'read').returns('banana'); + it("opens search results from the clipboard", async () => { + const url = "https://google.com/search?q=banana"; + sinon.stub(clipboardRepository, "read").returns("banana"); const mockOperationClient = sinon.mock(operationClient); - mockOperationClient.expects('internalOpenUrl').withArgs(url, true); + mockOperationClient.expects("internalOpenUrl").withArgs(url, true); await sut.openOrSearch(true); diff --git a/test/content/usecases/FindUseCase.test.ts b/test/content/usecases/FindUseCase.test.ts index 3978dbc..b53ef74 100644 --- a/test/content/usecases/FindUseCase.test.ts +++ b/test/content/usecases/FindUseCase.test.ts @@ -1,9 +1,9 @@ -import FindRepository from '../../../src/content/repositories/FindRepository'; -import FindPresenter from '../../../src/content/presenters/FindPresenter'; -import FindClient from '../../../src/content/client/FindClient'; -import FindUseCase from '../../../src/content/usecases/FindUseCase'; -import MockConsoleClient from '../mock/MockConsoleClient'; -import { expect } from 'chai'; +import FindRepository from "../../../src/content/repositories/FindRepository"; +import FindPresenter from "../../../src/content/presenters/FindPresenter"; +import FindClient from "../../../src/content/client/FindClient"; +import FindUseCase from "../../../src/content/usecases/FindUseCase"; +import MockConsoleClient from "../mock/MockConsoleClient"; +import { expect } from "chai"; class MockFindRepository implements FindRepository { public keyword: string | null; @@ -27,7 +27,7 @@ class MockFindPresenter implements FindPresenter { public highlighted: boolean; constructor() { - this.document = ''; + this.document = ""; this.highlighted = false; } @@ -59,7 +59,7 @@ class MockFindClient implements FindClient { } } -describe('FindUseCase', () => { +describe("FindUseCase", () => { let repository: MockFindRepository; let presenter: MockFindPresenter; let client: MockFindClient; @@ -74,88 +74,87 @@ describe('FindUseCase', () => { sut = new FindUseCase(presenter, repository, client, consoleClient); }); - describe('#startFind', () => { - it('find next by ketword', async() => { - presenter.document = 'monkey punch'; + describe("#startFind", () => { + it("find next by ketword", async () => { + presenter.document = "monkey punch"; - await sut.startFind('monkey'); + await sut.startFind("monkey"); expect(await presenter.highlighted).to.be.true; - expect(await consoleClient.text).to.equal('Pattern found: monkey'); - expect(await repository.getLastKeyword()).to.equal('monkey'); - expect(await client.getGlobalLastKeyword()).to.equal('monkey'); + expect(await consoleClient.text).to.equal("Pattern found: monkey"); + expect(await repository.getLastKeyword()).to.equal("monkey"); + expect(await client.getGlobalLastKeyword()).to.equal("monkey"); }); - it('find next by last keyword', async() => { - presenter.document = 'gorilla kick'; - repository.keyword = 'gorilla'; + it("find next by last keyword", async () => { + presenter.document = "gorilla kick"; + repository.keyword = "gorilla"; await sut.startFind(undefined); expect(await presenter.highlighted).to.be.true; - expect(await consoleClient.text).to.equal('Pattern found: gorilla'); - expect(await repository.getLastKeyword()).to.equal('gorilla'); - expect(await client.getGlobalLastKeyword()).to.equal('gorilla'); + expect(await consoleClient.text).to.equal("Pattern found: gorilla"); + expect(await repository.getLastKeyword()).to.equal("gorilla"); + expect(await client.getGlobalLastKeyword()).to.equal("gorilla"); }); - it('find next by global last keyword', async() => { - presenter.document = 'chimpanzee typing'; + it("find next by global last keyword", async () => { + presenter.document = "chimpanzee typing"; repository.keyword = null; - client.keyword = 'chimpanzee'; + client.keyword = "chimpanzee"; await sut.startFind(undefined); expect(await presenter.highlighted).to.be.true; - expect(await consoleClient.text).to.equal('Pattern found: chimpanzee'); - expect(await repository.getLastKeyword()).to.equal('chimpanzee'); - expect(await client.getGlobalLastKeyword()).to.equal('chimpanzee'); + expect(await consoleClient.text).to.equal("Pattern found: chimpanzee"); + expect(await repository.getLastKeyword()).to.equal("chimpanzee"); + expect(await client.getGlobalLastKeyword()).to.equal("chimpanzee"); }); - it('find not found error', async() => { - presenter.document = 'zoo'; + it("find not found error", async () => { + presenter.document = "zoo"; - await sut.startFind('giraffe'); + await sut.startFind("giraffe"); expect(await presenter.highlighted).to.be.false; - expect(await consoleClient.text).to.equal('Pattern not found: giraffe'); - expect(await repository.getLastKeyword()).to.equal('giraffe'); - expect(await client.getGlobalLastKeyword()).to.equal('giraffe'); + expect(await consoleClient.text).to.equal("Pattern not found: giraffe"); + expect(await repository.getLastKeyword()).to.equal("giraffe"); + expect(await client.getGlobalLastKeyword()).to.equal("giraffe"); }); - it('show errors when no last keywords', async() => { + it("show errors when no last keywords", async () => { repository.keyword = null; client.keyword = null; await sut.startFind(undefined); - expect(await consoleClient.text).to.equal('No previous search keywords'); + expect(await consoleClient.text).to.equal("No previous search keywords"); expect(await consoleClient.isError).to.be.true; }); }); - describe('#findNext', () => { - it('finds by last keyword', async() => { - presenter.document = 'monkey punch'; - repository.keyword = 'monkey'; + describe("#findNext", () => { + it("finds by last keyword", async () => { + presenter.document = "monkey punch"; + repository.keyword = "monkey"; await sut.findNext(); expect(await presenter.highlighted).to.be.true; - expect(await consoleClient.text).to.equal('Pattern found: monkey'); + expect(await consoleClient.text).to.equal("Pattern found: monkey"); }); - it('show errors when no last keywords', async() => { + it("show errors when no last keywords", async () => { repository.keyword = null; client.keyword = null; await sut.findNext(); - expect(await consoleClient.text).to.equal('No previous search keywords'); + expect(await consoleClient.text).to.equal("No previous search keywords"); expect(await consoleClient.isError).to.be.true; }); }); - describe('#findPrev', () => { - }); + describe("#findPrev", () => {}); }); diff --git a/test/content/usecases/HintKeyProducer.test.ts b/test/content/usecases/HintKeyProducer.test.ts index 5841ae9..f7e02ea 100644 --- a/test/content/usecases/HintKeyProducer.test.ts +++ b/test/content/usecases/HintKeyProducer.test.ts @@ -1,20 +1,34 @@ -import HintKeyProducer from '../../../src/content/usecases/HintKeyProducer'; -import { expect } from 'chai'; +import HintKeyProducer from "../../../src/content/usecases/HintKeyProducer"; +import { expect } from "chai"; -describe('HintKeyProducer class', () => { - describe('#constructor', () => { - it('throws an exception on empty charset', () => { - expect(() => new HintKeyProducer('')).to.throw(TypeError); +describe("HintKeyProducer class", () => { + describe("#constructor", () => { + it("throws an exception on empty charset", () => { + expect(() => new HintKeyProducer("")).to.throw(TypeError); }); }); - describe('#produce', () => { - it('produce incremented keys', () => { - const charset = 'abc'; + describe("#produce", () => { + it("produce incremented keys", () => { + const charset = "abc"; const sequences = [ - 'a', 'b', 'c', - 'aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc', - 'aaa', 'aab', 'aac', 'aba'] + "a", + "b", + "c", + "aa", + "ab", + "ac", + "ba", + "bb", + "bc", + "ca", + "cb", + "cc", + "aaa", + "aab", + "aac", + "aba", + ]; const producer = new HintKeyProducer(charset); for (let i = 0; i < sequences.length; ++i) { diff --git a/test/content/usecases/KeymapUseCase.test.ts b/test/content/usecases/KeymapUseCase.test.ts index 032d4fc..24ac6d8 100644 --- a/test/content/usecases/KeymapUseCase.test.ts +++ b/test/content/usecases/KeymapUseCase.test.ts @@ -1,62 +1,52 @@ import "reflect-metadata"; -import KeymapUseCase from '../../../src/content/usecases/KeymapUseCase'; -import {expect} from 'chai'; +import KeymapUseCase from "../../../src/content/usecases/KeymapUseCase"; +import { expect } from "chai"; import SettingRepository from "../../../src/content/repositories/SettingRepository"; import Settings from "../../../src/shared/settings/Settings"; import AddonEnabledRepository from "../../../src/content/repositories/AddonEnabledRepository"; -import {KeymapRepositoryImpl} from "../../../src/content/repositories/KeymapRepository"; +import { KeymapRepositoryImpl } from "../../../src/content/repositories/KeymapRepository"; import Key from "../../../src/shared/settings/Key"; import AddressRepository from "../../../src/content/repositories/AddressRepository"; class MockSettingRepository implements SettingRepository { - constructor( - private readonly settings: Settings, - ) { - } + constructor(private readonly settings: Settings) {} get(): Settings { return this.settings; } set(_setting: Settings): void { - throw new Error('TODO'); + throw new Error("TODO"); } } class MockAddonEnabledRepository implements AddonEnabledRepository { - constructor( - private readonly enabled: boolean, - ) { - } + constructor(private readonly enabled: boolean) {} get(): boolean { return this.enabled; } set(_on: boolean): void { - throw new Error('TODO'); + throw new Error("TODO"); } } class MockAddressRepository implements AddressRepository { - constructor( - private url: URL, - ) { - } + constructor(private url: URL) {} getCurrentURL(): URL { return this.url; } } - -describe('KeymapUseCase', () => { - context('with no-digis keymaps', () => { +describe("KeymapUseCase", () => { + context("with no-digis keymaps", () => { const settings = Settings.fromJSON({ keymaps: { - k: {type: 'scroll.vertically', count: -1}, - j: {type: 'scroll.vertically', count: 1}, - gg: {type: 'scroll.top'}, + k: { type: "scroll.vertically", count: -1 }, + j: { type: "scroll.vertically", count: 1 }, + gg: { type: "scroll.top" }, }, }); @@ -64,34 +54,46 @@ describe('KeymapUseCase', () => { before(() => { sut = new KeymapUseCase( - new KeymapRepositoryImpl(), - new MockSettingRepository(settings), - new MockAddonEnabledRepository(true), - new MockAddressRepository(new URL('https://example.com')), + new KeymapRepositoryImpl(), + new MockSettingRepository(settings), + new MockAddonEnabledRepository(true), + new MockAddressRepository(new URL("https://example.com")) ); }); - it('returns matched operation', () => { - expect(sut.nextOps(Key.fromMapKey('k'))).to.deep.equal({ repeat: 1, op: {type: 'scroll.vertically', count: -1}}); - expect(sut.nextOps(Key.fromMapKey('j'))).to.deep.equal({ repeat: 1, op: {type: 'scroll.vertically', count: 1}}); - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.deep.equal({ repeat: 1, op: {type: 'scroll.top'}}); - expect(sut.nextOps(Key.fromMapKey('z'))).to.be.null; + it("returns matched operation", () => { + expect(sut.nextOps(Key.fromMapKey("k"))).to.deep.equal({ + repeat: 1, + op: { type: "scroll.vertically", count: -1 }, + }); + expect(sut.nextOps(Key.fromMapKey("j"))).to.deep.equal({ + repeat: 1, + op: { type: "scroll.vertically", count: 1 }, + }); + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.deep.equal({ + repeat: 1, + op: { type: "scroll.top" }, + }); + expect(sut.nextOps(Key.fromMapKey("z"))).to.be.null; }); - it('repeats n-times by numeric prefix and multiple key operations', () => { - expect(sut.nextOps(Key.fromMapKey('1'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('0'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.deep.equal({ repeat: 10, op: {type: "scroll.top"}}); + it("repeats n-times by numeric prefix and multiple key operations", () => { + expect(sut.nextOps(Key.fromMapKey("1"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("0"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.deep.equal({ + repeat: 10, + op: { type: "scroll.top" }, + }); }); }); - context('when keymaps containing numeric mappings', () => { + context("when keymaps containing numeric mappings", () => { const settings = Settings.fromJSON({ keymaps: { - 20: {type: "scroll.top"}, - g5: {type: 'scroll.bottom'}, + 20: { type: "scroll.top" }, + g5: { type: "scroll.bottom" }, }, }); @@ -99,43 +101,55 @@ describe('KeymapUseCase', () => { before(() => { sut = new KeymapUseCase( - new KeymapRepositoryImpl(), - new MockSettingRepository(settings), - new MockAddonEnabledRepository(true), - new MockAddressRepository(new URL('https://example.com')), + new KeymapRepositoryImpl(), + new MockSettingRepository(settings), + new MockAddonEnabledRepository(true), + new MockAddressRepository(new URL("https://example.com")) ); }); - it('returns the matched operation ends with digit', () => { - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('5'))).to.be.deep.equal({ repeat: 1, op: { type: 'scroll.bottom'}}); + it("returns the matched operation ends with digit", () => { + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("5"))).to.be.deep.equal({ + repeat: 1, + op: { type: "scroll.bottom" }, + }); }); - it('returns an operation matched the operation with digit keymaps', () => { - expect(sut.nextOps(Key.fromMapKey('2'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('0'))).to.be.deep.equal({ repeat: 1, op: { type: 'scroll.top'}}); + it("returns an operation matched the operation with digit keymaps", () => { + expect(sut.nextOps(Key.fromMapKey("2"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("0"))).to.be.deep.equal({ + repeat: 1, + op: { type: "scroll.top" }, + }); }); - it('returns operations repeated by numeric prefix', () => { - expect(sut.nextOps(Key.fromMapKey('2'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('5'))).to.be.deep.equal({ repeat: 2, op: { type: 'scroll.bottom'}}); + it("returns operations repeated by numeric prefix", () => { + expect(sut.nextOps(Key.fromMapKey("2"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("5"))).to.be.deep.equal({ + repeat: 2, + op: { type: "scroll.bottom" }, + }); }); - it('does not matches with digit operation with numeric prefix', () => { - expect(sut.nextOps(Key.fromMapKey('3'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('2'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('0'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('5'))).to.be.deep.equal({ repeat: 320, op: { type: 'scroll.bottom'}}); + it("does not matches with digit operation with numeric prefix", () => { + expect(sut.nextOps(Key.fromMapKey("3"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("2"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("0"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("5"))).to.be.deep.equal({ + repeat: 320, + op: { type: "scroll.bottom" }, + }); }); }); - context('when the keys are mismatched with the operations', () => { + context("when the keys are mismatched with the operations", () => { const settings = Settings.fromJSON({ keymaps: { - gg: {type: "scroll.top"}, - G: {type: "scroll.bottom"}, + gg: { type: "scroll.top" }, + G: { type: "scroll.bottom" }, }, }); @@ -143,38 +157,44 @@ describe('KeymapUseCase', () => { before(() => { sut = new KeymapUseCase( - new KeymapRepositoryImpl(), - new MockSettingRepository(settings), - new MockAddonEnabledRepository(true), - new MockAddressRepository(new URL('https://example.com')), + new KeymapRepositoryImpl(), + new MockSettingRepository(settings), + new MockAddonEnabledRepository(true), + new MockAddressRepository(new URL("https://example.com")) ); }); - it('clears input keys with no-matched operations', () => { - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('x'))).to.be.null; // clear - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.deep.equal({repeat: 1, op: {type: "scroll.top"}}); + it("clears input keys with no-matched operations", () => { + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("x"))).to.be.null; // clear + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.deep.equal({ + repeat: 1, + op: { type: "scroll.top" }, + }); }); - it('clears input keys and the prefix with no-matched operations', () => { - expect(sut.nextOps(Key.fromMapKey('1'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('0'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('x'))).to.be.null; // clear - expect(sut.nextOps(Key.fromMapKey('1'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('0'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.deep.equal({ repeat: 10, op: {type: "scroll.top"}}); + it("clears input keys and the prefix with no-matched operations", () => { + expect(sut.nextOps(Key.fromMapKey("1"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("0"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("x"))).to.be.null; // clear + expect(sut.nextOps(Key.fromMapKey("1"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("0"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.deep.equal({ + repeat: 10, + op: { type: "scroll.top" }, + }); }); }); - context('when the site matches to the blacklist', () => { + context("when the site matches to the blacklist", () => { const settings = Settings.fromJSON({ keymaps: { - k: {type: 'scroll.vertically', count: -1}, - a: {type: 'addon.enable'}, - b: {type: 'addon.toggle.enabled'}, + k: { type: "scroll.vertically", count: -1 }, + a: { type: "addon.enable" }, + b: { type: "addon.toggle.enabled" }, }, }); @@ -182,58 +202,76 @@ describe('KeymapUseCase', () => { before(() => { sut = new KeymapUseCase( - new KeymapRepositoryImpl(), - new MockSettingRepository(settings), - new MockAddonEnabledRepository(false), - new MockAddressRepository(new URL('https://example.com')), + new KeymapRepositoryImpl(), + new MockSettingRepository(settings), + new MockAddonEnabledRepository(false), + new MockAddressRepository(new URL("https://example.com")) ); }); - it('returns only ADDON_ENABLE and ADDON_TOGGLE_ENABLED operation', () => { - expect(sut.nextOps(Key.fromMapKey('k'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('a'))).to.deep.equal({ repeat: 1, op: {type: 'addon.enable'}}); - expect(sut.nextOps(Key.fromMapKey('b'))).to.deep.equal({ repeat: 1, op: {type: 'addon.toggle.enabled'}}); + it("returns only ADDON_ENABLE and ADDON_TOGGLE_ENABLED operation", () => { + expect(sut.nextOps(Key.fromMapKey("k"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("a"))).to.deep.equal({ + repeat: 1, + op: { type: "addon.enable" }, + }); + expect(sut.nextOps(Key.fromMapKey("b"))).to.deep.equal({ + repeat: 1, + op: { type: "addon.toggle.enabled" }, + }); }); }); - context('when the site matches to the partial blacklist', () => { + context("when the site matches to the partial blacklist", () => { const settings = Settings.fromJSON({ keymaps: { - k: {type: 'scroll.vertically', count: -1}, - j: {type: 'scroll.vertically', count: 1}, - gg: {type: "scroll.top"}, - G: {type: "scroll.bottom"}, + k: { type: "scroll.vertically", count: -1 }, + j: { type: "scroll.vertically", count: 1 }, + gg: { type: "scroll.top" }, + G: { type: "scroll.bottom" }, }, blacklist: [ - { url: "example.com", keys: ['g'] }, - { url: "example.org", keys: [''] } + { url: "example.com", keys: ["g"] }, + { url: "example.org", keys: [""] }, ], }); - it('blocks keys in the partial blacklist', () => { + it("blocks keys in the partial blacklist", () => { let sut = new KeymapUseCase( - new KeymapRepositoryImpl(), - new MockSettingRepository(settings), - new MockAddonEnabledRepository(true), - new MockAddressRepository(new URL('https://example.com')), + new KeymapRepositoryImpl(), + new MockSettingRepository(settings), + new MockAddonEnabledRepository(true), + new MockAddressRepository(new URL("https://example.com")) ); - expect(sut.nextOps(Key.fromMapKey('k'))).to.deep.equal({ repeat: 1, op: {type: 'scroll.vertically', count: -1}}); - expect(sut.nextOps(Key.fromMapKey('j'))).to.deep.equal({ repeat: 1, op: {type: 'scroll.vertically', count: 1}}); - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('G'))).to.deep.equal({ repeat: 1, op: {type: 'scroll.bottom'}}); + expect(sut.nextOps(Key.fromMapKey("k"))).to.deep.equal({ + repeat: 1, + op: { type: "scroll.vertically", count: -1 }, + }); + expect(sut.nextOps(Key.fromMapKey("j"))).to.deep.equal({ + repeat: 1, + op: { type: "scroll.vertically", count: 1 }, + }); + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("G"))).to.deep.equal({ + repeat: 1, + op: { type: "scroll.bottom" }, + }); sut = new KeymapUseCase( - new KeymapRepositoryImpl(), - new MockSettingRepository(settings), - new MockAddonEnabledRepository(true), - new MockAddressRepository(new URL('https://example.org')), + new KeymapRepositoryImpl(), + new MockSettingRepository(settings), + new MockAddonEnabledRepository(true), + new MockAddressRepository(new URL("https://example.org")) ); - expect(sut.nextOps(Key.fromMapKey('g'))).to.be.null; - expect(sut.nextOps(Key.fromMapKey('g'))).to.deep.equal({ repeat: 1, op: {type: 'scroll.top'}}); - expect(sut.nextOps(Key.fromMapKey('G'))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.be.null; + expect(sut.nextOps(Key.fromMapKey("g"))).to.deep.equal({ + repeat: 1, + op: { type: "scroll.top" }, + }); + expect(sut.nextOps(Key.fromMapKey("G"))).to.be.null; }); }); }); diff --git a/test/content/usecases/MarkUseCase.test.ts b/test/content/usecases/MarkUseCase.test.ts index 494497a..df3f7bf 100644 --- a/test/content/usecases/MarkUseCase.test.ts +++ b/test/content/usecases/MarkUseCase.test.ts @@ -1,14 +1,14 @@ -import MarkRepository from '../../../src/content/repositories/MarkRepository'; -import { SettingRepositoryImpl } from '../../../src/content/repositories/SettingRepository'; -import MarkUseCase from '../../../src/content/usecases/MarkUseCase'; -import MarkClient from '../../../src/content/client/MarkClient'; -import MockConsoleClient from '../mock/MockConsoleClient'; -import MockScrollPresenter from '../mock/MockScrollPresenter'; -import Mark from '../../../src/content/domains/Mark'; -import { expect } from 'chai'; +import MarkRepository from "../../../src/content/repositories/MarkRepository"; +import { SettingRepositoryImpl } from "../../../src/content/repositories/SettingRepository"; +import MarkUseCase from "../../../src/content/usecases/MarkUseCase"; +import MarkClient from "../../../src/content/client/MarkClient"; +import MockConsoleClient from "../mock/MockConsoleClient"; +import MockScrollPresenter from "../mock/MockScrollPresenter"; +import Mark from "../../../src/content/domains/Mark"; +import { expect } from "chai"; class MockMarkRepository implements MarkRepository { - private current: {[key: string]: Mark}; + private current: { [key: string]: Mark }; constructor() { this.current = {}; @@ -24,12 +24,12 @@ class MockMarkRepository implements MarkRepository { } class MockMarkClient implements MarkClient { - public marks: {[key: string]: Mark}; + public marks: { [key: string]: Mark }; public last: string; constructor() { this.marks = {}; - this.last = ''; + this.last = ""; } setGloablMark(key: string, mark: Mark): Promise { @@ -38,12 +38,12 @@ class MockMarkClient implements MarkClient { } jumpGlobalMark(key: string): Promise { - this.last = key + this.last = key; return Promise.resolve(); } } -describe('MarkUseCase', () => { +describe("MarkUseCase", () => { let repository: MockMarkRepository; let client: MockMarkClient; let consoleClient: MockConsoleClient; @@ -60,53 +60,56 @@ describe('MarkUseCase', () => { client, repository, new SettingRepositoryImpl(), - consoleClient, + consoleClient ); }); - describe('#set', () => { - it('sets local mark', async() => { + describe("#set", () => { + it("sets local mark", async () => { scrollPresenter.scrollTo(10, 20, false); - await sut.set('x'); + await sut.set("x"); - expect(repository.get('x')).to.deep.equals({ x: 10, y: 20 }); + expect(repository.get("x")).to.deep.equals({ x: 10, y: 20 }); expect(consoleClient.text).to.equal("Set local mark to 'x'"); }); - it('sets global mark', async() => { + it("sets global mark", async () => { scrollPresenter.scrollTo(30, 40, false); - await sut.set('Z'); + await sut.set("Z"); - expect(client.marks['Z']).to.deep.equals({ x: 30, y: 40 }); + expect(client.marks["Z"]).to.deep.equals({ x: 30, y: 40 }); expect(consoleClient.text).to.equal("Set global mark to 'Z'"); }); }); - describe('#jump', () => { - it('jumps to local mark', async() => { - repository.set('x', { x: 20, y: 40 }); + describe("#jump", () => { + it("jumps to local mark", async () => { + repository.set("x", { x: 20, y: 40 }); - await sut.jump('x'); + await sut.jump("x"); expect(scrollPresenter.getScroll()).to.deep.equals({ x: 20, y: 40 }); }); - it('throws an error when no local marks', () => { - return sut.jump('a').then(() => { - throw new Error('error'); - }).catch((e) => { - expect(e).to.be.instanceof(Error); - }) - }) + it("throws an error when no local marks", () => { + return sut + .jump("a") + .then(() => { + throw new Error("error"); + }) + .catch((e) => { + expect(e).to.be.instanceof(Error); + }); + }); - it('jumps to global mark', async() => { - client.marks['Z'] = { x: 20, y: 0 }; + it("jumps to global mark", async () => { + client.marks["Z"] = { x: 20, y: 0 }; - await sut.jump('Z'); + await sut.jump("Z"); - expect(client.last).to.equal('Z') + expect(client.last).to.equal("Z"); }); }); }); diff --git a/test/content/usecases/SettingUseCaase.test.ts b/test/content/usecases/SettingUseCaase.test.ts index cf14e6e..19a167a 100644 --- a/test/content/usecases/SettingUseCaase.test.ts +++ b/test/content/usecases/SettingUseCaase.test.ts @@ -1,8 +1,10 @@ -import SettingRepository from '../../../src/content/repositories/SettingRepository'; -import SettingClient from '../../../src/content/client/SettingClient'; -import SettingUseCase from '../../../src/content/usecases/SettingUseCase'; -import Settings, { DefaultSetting } from '../../../src/shared/settings/Settings'; -import { expect } from 'chai'; +import SettingRepository from "../../../src/content/repositories/SettingRepository"; +import SettingClient from "../../../src/content/client/SettingClient"; +import SettingUseCase from "../../../src/content/usecases/SettingUseCase"; +import Settings, { + DefaultSetting, +} from "../../../src/shared/settings/Settings"; +import { expect } from "chai"; class MockSettingRepository implements SettingRepository { private current: Settings; @@ -12,7 +14,7 @@ class MockSettingRepository implements SettingRepository { } set(settings: Settings): void { - this.current= settings; + this.current = settings; } get(): Settings { @@ -32,7 +34,7 @@ class MockSettingClient implements SettingClient { } } -describe('AddonEnabledUseCase', () => { +describe("AddonEnabledUseCase", () => { let repository: MockSettingRepository; let client: MockSettingClient; let sut: SettingUseCase; @@ -41,15 +43,15 @@ describe('AddonEnabledUseCase', () => { const testSettings = { keymaps: {}, search: { - default: 'google', + default: "google", engines: { - google: 'https://google.com/?q={}', - } + google: "https://google.com/?q={}", + }, }, properties: { - hintchars: 'abcd1234', + hintchars: "abcd1234", smoothscroll: false, - complete: 'sbh', + complete: "sbh", }, blacklist: [], }; @@ -59,13 +61,13 @@ describe('AddonEnabledUseCase', () => { sut = new SettingUseCase(repository, client); }); - describe('#reload', () => { - it('loads settings and store to repository', async() => { + describe("#reload", () => { + it("loads settings and store to repository", async () => { const settings = await sut.reload(); - expect(settings.properties.hintchars).to.equal('abcd1234'); + expect(settings.properties.hintchars).to.equal("abcd1234"); const saved = repository.get(); - expect(saved.properties.hintchars).to.equal('abcd1234'); + expect(saved.properties.hintchars).to.equal("abcd1234"); }); }); }); -- cgit v1.2.3 From b0fe06bc2e739cc252a559f666da65b27769959d Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 15 Apr 2020 19:35:15 +0900 Subject: Fix types in tests --- .../infrastructures/MemoryStorage.test.ts | 9 +-- test/background/repositories/Mark.test.ts | 9 +-- test/background/usecases/parsers.test.ts | 3 +- test/console/actions/console.test.ts | 8 +++ .../console/components/console/Completion.test.tsx | 50 ++++++++------ test/console/reducers/console.test.ts | 76 ++++++++++++++-------- test/content/InputDriver.test.ts | 2 - test/content/presenters/Hint.test.ts | 10 +-- .../content/presenters/NavigationPresenter.test.ts | 8 ++- test/content/usecases/SettingUseCaase.test.ts | 4 +- test/main.ts | 5 -- .../components/form/BlacklistForm.test.tsx | 38 +++++++---- test/settings/components/form/KeymapsForm.test.tsx | 9 +-- .../components/form/PropertiesForm.test.tsx | 18 +++-- .../components/form/SearchEngineForm.test.tsx | 24 ++++--- test/settings/components/ui/input.test.tsx | 32 ++++----- test/settings/reducers/setting.test.ts | 51 ++++++++------- test/shared/operations.test.ts | 13 ++-- 18 files changed, 221 insertions(+), 148 deletions(-) (limited to 'test/content') diff --git a/test/background/infrastructures/MemoryStorage.test.ts b/test/background/infrastructures/MemoryStorage.test.ts index 5f8be2a..1c67b18 100644 --- a/test/background/infrastructures/MemoryStorage.test.ts +++ b/test/background/infrastructures/MemoryStorage.test.ts @@ -1,4 +1,5 @@ -import MemoryStorage from "background/infrastructures/MemoryStorage"; +import MemoryStorage from "../../../src/background/infrastructures/MemoryStorage"; +import { expect } from "chai"; describe("background/infrastructures/memory-storage", () => { it("stores values", () => { @@ -29,12 +30,12 @@ describe("background/infrastructures/memory-storage", () => { it("stored cloned objects", () => { const cache = new MemoryStorage(); - const recipe = { sugar: "300g" }; + const recipe = { sugar: "300g", salt: "10g" }; cache.set("recipe", recipe); recipe.salt = "20g"; - const got = cache.get("recipe", recipe); - expect(got).to.deep.equal({ sugar: "300g" }); + const got = cache.get("recipe"); + expect(got).to.deep.equal({ sugar: "300g", salt: "10g" }); }); it("throws an error with unserializable objects", () => { diff --git a/test/background/repositories/Mark.test.ts b/test/background/repositories/Mark.test.ts index b1bbcf1..5cee5b6 100644 --- a/test/background/repositories/Mark.test.ts +++ b/test/background/repositories/Mark.test.ts @@ -1,4 +1,5 @@ -import MarkRepository from "background/repositories/MarkRepository"; +import MarkRepository from "../../../src/background/repositories/MarkRepository"; +import { expect } from "chai"; describe("background/repositories/mark", () => { let repository: MarkRepository; @@ -10,15 +11,15 @@ describe("background/repositories/mark", () => { it("get and set", async () => { const mark = { tabId: 1, url: "http://example.com", x: 10, y: 30 }; - repository.setMark("A", mark); + await repository.setMark("A", mark); - let got = await repository.getMark("A"); + let got = (await repository.getMark("A"))!!; expect(got.tabId).to.equal(1); expect(got.url).to.equal("http://example.com"); expect(got.x).to.equal(10); expect(got.y).to.equal(30); - got = await repository.getMark("B"); + got = (await repository.getMark("B"))!!; expect(got).to.be.undefined; }); }); diff --git a/test/background/usecases/parsers.test.ts b/test/background/usecases/parsers.test.ts index bee0d07..019b56e 100644 --- a/test/background/usecases/parsers.test.ts +++ b/test/background/usecases/parsers.test.ts @@ -1,4 +1,5 @@ -import * as parsers from "background/usecases/parsers"; +import * as parsers from "../../../src/background/usecases/parsers"; +import { expect } from "chai"; describe("shared/commands/parsers", () => { describe("#parsers.parseSetOption", () => { diff --git a/test/console/actions/console.test.ts b/test/console/actions/console.test.ts index 5a531a6..3169c4b 100644 --- a/test/console/actions/console.test.ts +++ b/test/console/actions/console.test.ts @@ -2,7 +2,15 @@ import * as actions from "../../../src/console/actions"; import * as consoleActions from "../../../src/console/actions/console"; import { expect } from "chai"; +// eslint-disable-next-line @typescript-eslint/ban-ts-ignore +// @ts-ignore +import browserFake from "webextensions-api-fake"; + describe("console actions", () => { + beforeEach(() => { + (global as any).browser = browserFake(); + }); + describe("hide", () => { it("create CONSOLE_HIDE action", () => { const action = consoleActions.hide(); diff --git a/test/console/components/console/Completion.test.tsx b/test/console/components/console/Completion.test.tsx index 200bb1a..921720b 100644 --- a/test/console/components/console/Completion.test.tsx +++ b/test/console/components/console/Completion.test.tsx @@ -1,6 +1,9 @@ import React from "react"; -import Completion from "console/components/console/Completion"; -import ReactTestRenderer from "react-test-renderer"; +import Completion from "../../../../src/console/components/console/Completion"; +import ReactTestRenderer, { ReactTestInstance } from "react-test-renderer"; +import { expect } from "chai"; +import CompletionTitle from "../../../../src/console/components/console/CompletionTitle"; +import CompletionItem from "../../../../src/console/components/console/CompletionItem"; describe("console/components/console/completion", () => { const completions = [ @@ -24,13 +27,22 @@ describe("console/components/console/completion", () => { it("renders Completion component", () => { const root = ReactTestRenderer.create( - + ).root; - expect(root.children).to.have.lengthOf(1); - - const children = root.children[0].children; + // const children = root.findByType('ul').children as Array; + const children = root.findByType("ul").children as Array; expect(children).to.have.lengthOf(8); + expect(children.map((e) => e.type)).to.deep.equal([ + CompletionTitle, + CompletionItem, + CompletionItem, + CompletionItem, + CompletionTitle, + CompletionItem, + CompletionItem, + CompletionItem, + ]); expect(children[0].props.title).to.equal("Fruit"); expect(children[1].props.caption).to.equal("apple"); expect(children[2].props.caption).to.equal("banana"); @@ -46,7 +58,7 @@ describe("console/components/console/completion", () => { ).root; - const children = root.children[0].children; + const children = root.findByType("ul").children as Array; expect(children[5].props.highlight).to.be.true; }); @@ -55,10 +67,8 @@ describe("console/components/console/completion", () => { ).root; - const children = root.children[0].children; - for (const li of children[0].children) { - expect(li.props.highlight).not.to.be.ok; - } + const children = root.findByType("ul").findAllByType(CompletionItem); + expect(children.every((e) => e.props.highlight === false)).to.be.true; }); it("limits completion items", () => { @@ -66,7 +76,7 @@ describe("console/components/console/completion", () => { ).root; - let children = root.children[0].children; + let children = root.findByType("ul").children as Array; expect(children).to.have.lengthOf(3); expect(children[0].props.title).to.equal("Fruit"); @@ -77,7 +87,7 @@ describe("console/components/console/completion", () => { ).root; - children = root.children[0].children; + children = root.findByType("ul").children as Array; expect(children[1].props.highlight).to.be.true; }); @@ -87,7 +97,7 @@ describe("console/components/console/completion", () => { ); const root = component.root; - let children = root.children[0].children; + let children = root.findByType("ul").children as Array; expect(children).to.have.lengthOf(3); expect(children[0].props.title).to.equal("Fruit"); expect(children[1].props.caption).to.equal("apple"); @@ -97,7 +107,7 @@ describe("console/components/console/completion", () => { ); - children = root.children[0].children; + children = root.findByType("ul").children as Array; expect(children).to.have.lengthOf(3); expect(children[0].props.caption).to.equal("apple"); expect(children[1].props.caption).to.equal("banana"); @@ -108,7 +118,7 @@ describe("console/components/console/completion", () => { ); - children = root.children[0].children; + children = root.findByType("ul").children as Array; expect(children).to.have.lengthOf(3); expect(children[0].props.caption).to.equal("cherry"); expect(children[1].props.title).to.equal("Element"); @@ -122,7 +132,7 @@ describe("console/components/console/completion", () => { ); const root = component.root; - let children = root.children[0].children; + let children = root.findByType("ul").children as Array; expect(children).to.have.lengthOf(3); expect(children[0].props.caption).to.equal("argon"); expect(children[1].props.caption).to.equal("boron"); @@ -132,21 +142,21 @@ describe("console/components/console/completion", () => { ); - children = root.children[0].children; + children = root.findByType("ul").children as Array; expect(children[1].props.highlight).to.be.true; component.update( ); - children = root.children[0].children; + children = root.findByType("ul").children as Array; expect(children[0].props.highlight).to.be.true; component.update( ); - children = root.children[0].children; + children = root.findByType("ul").children as Array; expect(children[0].props.caption).to.equal("cherry"); expect(children[1].props.title).to.equal("Element"); expect(children[2].props.caption).to.equal("argon"); diff --git a/test/console/reducers/console.test.ts b/test/console/reducers/console.test.ts index e8432c5..64e8eb3 100644 --- a/test/console/reducers/console.test.ts +++ b/test/console/reducers/console.test.ts @@ -1,9 +1,12 @@ -import * as actions from "console/actions"; -import reducer from "console/reducers"; +import * as actions from "../../../src/console/actions"; +import reducer, { State } from "../../../src/console/reducers"; +import { expect } from "chai"; +import CompletionType from "../../../src/shared/CompletionType"; +import { ConsoleAction } from "../../../src/console/actions"; describe("console reducer", () => { it("return the initial state", () => { - const state = reducer(undefined, {}); + const state = reducer(undefined, {} as any); expect(state).to.have.property("mode", ""); expect(state).to.have.property("messageText", ""); expect(state).to.have.property("consoleText", ""); @@ -12,68 +15,85 @@ describe("console reducer", () => { }); it("return next state for CONSOLE_HIDE", () => { - const action = { type: actions.CONSOLE_HIDE }; - const state = reducer({ mode: "error" }, action); + const initialState = reducer(undefined, {} as any); + const action: actions.ConsoleAction = { type: actions.CONSOLE_HIDE }; + const state = reducer({ ...initialState, mode: "error" }, action); expect(state).to.have.property("mode", ""); }); it("return next state for CONSOLE_SHOW_COMMAND", () => { - const action = { type: actions.CONSOLE_SHOW_COMMAND, text: "open " }; - const state = reducer({}, action); + const action: actions.ConsoleAction = { + type: actions.CONSOLE_SHOW_COMMAND, + completionTypes: [CompletionType.SearchEngines, CompletionType.History], + text: "open ", + }; + const state = reducer(undefined, action); expect(state).to.have.property("mode", "command"); expect(state).to.have.property("consoleText", "open "); }); it("return next state for CONSOLE_SHOW_INFO", () => { - const action = { type: actions.CONSOLE_SHOW_INFO, text: "an info" }; - const state = reducer({}, action); + const action: actions.ConsoleAction = { + type: actions.CONSOLE_SHOW_INFO, + text: "an info", + }; + const state = reducer(undefined, action); expect(state).to.have.property("mode", "info"); expect(state).to.have.property("messageText", "an info"); }); it("return next state for CONSOLE_SHOW_ERROR", () => { - const action = { type: actions.CONSOLE_SHOW_ERROR, text: "an error" }; - const state = reducer({}, action); + const action: actions.ConsoleAction = { + type: actions.CONSOLE_SHOW_ERROR, + text: "an error", + }; + const state = reducer(undefined, action); expect(state).to.have.property("mode", "error"); expect(state).to.have.property("messageText", "an error"); }); it("return next state for CONSOLE_HIDE_COMMAND", () => { - const action = { type: actions.CONSOLE_HIDE_COMMAND }; - let state = reducer({ mode: "command" }, action); + const initialState = reducer(undefined, {} as any); + const action: actions.ConsoleAction = { + type: actions.CONSOLE_HIDE_COMMAND, + }; + let state = reducer({ ...initialState, mode: "command" }, action); expect(state).to.have.property("mode", ""); - state = reducer({ mode: "error" }, action); + state = reducer({ ...initialState, mode: "error" }, action); expect(state).to.have.property("mode", "error"); }); it("return next state for CONSOLE_SET_CONSOLE_TEXT", () => { - const action = { + const action: actions.ConsoleAction = { type: actions.CONSOLE_SET_CONSOLE_TEXT, consoleText: "hello world", }; - const state = reducer({}, action); + const state = reducer(undefined, action); expect(state).to.have.property("consoleText", "hello world"); }); it("return next state for CONSOLE_SET_COMPLETIONS", () => { - let state = { + const initialState = reducer(undefined, {} as any); + let state: State = { + ...initialState, select: 0, completions: [], }; - const action = { + const action: actions.ConsoleAction = { type: actions.CONSOLE_SET_COMPLETIONS, completions: [ { name: "Apple", - items: [1, 2, 3], + items: [{}, {}, {}], }, { name: "Banana", - items: [4, 5, 6], + items: [{}, {}, {}], }, ], + completionSource: "", }; state = reducer(state, action); expect(state).to.have.property("completions", action.completions); @@ -81,17 +101,19 @@ describe("console reducer", () => { }); it("return next state for CONSOLE_COMPLETION_NEXT", () => { - const action = { type: actions.CONSOLE_COMPLETION_NEXT }; + const initialState = reducer(undefined, {} as any); + const action: ConsoleAction = { type: actions.CONSOLE_COMPLETION_NEXT }; let state = { + ...initialState, select: -1, completions: [ { name: "Apple", - items: [1, 2], + items: [{}, {}], }, { name: "Banana", - items: [3], + items: [{}], }, ], }; @@ -110,17 +132,19 @@ describe("console reducer", () => { }); it("return next state for CONSOLE_COMPLETION_PREV", () => { - const action = { type: actions.CONSOLE_COMPLETION_PREV }; + const initialState = reducer(undefined, {} as any); + const action: ConsoleAction = { type: actions.CONSOLE_COMPLETION_PREV }; let state = { + ...initialState, select: -1, completions: [ { name: "Apple", - items: [1, 2], + items: [{}, {}], }, { name: "Banana", - items: [3], + items: [{}], }, ], }; diff --git a/test/content/InputDriver.test.ts b/test/content/InputDriver.test.ts index bfada87..f464dac 100644 --- a/test/content/InputDriver.test.ts +++ b/test/content/InputDriver.test.ts @@ -16,8 +16,6 @@ describe("InputDriver", () => { afterEach(() => { target.remove(); - target = null; - driver = null; }); it("register callbacks", (done) => { diff --git a/test/content/presenters/Hint.test.ts b/test/content/presenters/Hint.test.ts index e64c39f..f961f88 100644 --- a/test/content/presenters/Hint.test.ts +++ b/test/content/presenters/Hint.test.ts @@ -13,17 +13,17 @@ describe("Hint", () => { describe("#constructor", () => { it("creates a hint element with tag name", () => { - const link = document.getElementById("test-link"); + const link = document.getElementById("test-link")!!; new Hint(link, "abc"); const elem = document.querySelector(".vimvixen-hint"); - expect(elem.textContent.trim()).to.be.equal("abc"); + expect(elem!!.textContent!!.trim()).to.be.equal("abc"); }); }); describe("#show", () => { it("shows an element", () => { - const link = document.getElementById("test-link"); + const link = document.getElementById("test-link")!!; const hint = new Hint(link, "abc"); hint.hide(); hint.show(); @@ -46,10 +46,10 @@ describe("Hint", () => { describe("#remove", () => { it("removes an element", () => { - const link = document.getElementById("test-link"); + const link = document.getElementById("test-link")!!; const hint = new Hint(link, "abc"); - const elem = document.querySelector(".vimvixen-hint"); + const elem = document.querySelector(".vimvixen-hint")!!; expect(elem.parentElement).to.not.be.null; hint.remove(); expect(elem.parentElement).to.be.null; diff --git a/test/content/presenters/NavigationPresenter.test.ts b/test/content/presenters/NavigationPresenter.test.ts index b362d8d..af3b487 100644 --- a/test/content/presenters/NavigationPresenter.test.ts +++ b/test/content/presenters/NavigationPresenter.test.ts @@ -4,7 +4,7 @@ import { expect } from "chai"; describe("NavigationPresenterImpl", () => { let sut: NavigationPresenterImpl; - const testRel = (done, rel, html) => { + const testRel = (done: () => void, rel: string, html: string) => { const method = rel === "prev" ? sut.openLinkPrev.bind(sut) : sut.openLinkNext.bind(sut); document.body.innerHTML = html; @@ -14,8 +14,10 @@ describe("NavigationPresenterImpl", () => { done(); }, 0); }; - const testPrev = (html) => (done) => testRel(done, "prev", html); - const testNext = (html) => (done) => testRel(done, "next", html); + const testPrev = (html: string) => (done: () => void) => + testRel(done, "prev", html); + const testNext = (html: string) => (done: () => void) => + testRel(done, "next", html); before(() => { sut = new NavigationPresenterImpl(); diff --git a/test/content/usecases/SettingUseCaase.test.ts b/test/content/usecases/SettingUseCaase.test.ts index 19a167a..1cc1e8a 100644 --- a/test/content/usecases/SettingUseCaase.test.ts +++ b/test/content/usecases/SettingUseCaase.test.ts @@ -40,7 +40,7 @@ describe("AddonEnabledUseCase", () => { let sut: SettingUseCase; beforeEach(() => { - const testSettings = { + const testSettings = Settings.fromJSON({ keymaps: {}, search: { default: "google", @@ -54,7 +54,7 @@ describe("AddonEnabledUseCase", () => { complete: "sbh", }, blacklist: [], - }; + }); repository = new MockSettingRepository(); client = new MockSettingClient(testSettings); diff --git a/test/main.ts b/test/main.ts index 8097975..fded23a 100644 --- a/test/main.ts +++ b/test/main.ts @@ -1,6 +1 @@ import "reflect-metadata"; -import { expect } from "chai"; -import browserFake from "webextensions-api-fake"; - -global.expect = expect; -global.browser = browserFake(); diff --git a/test/settings/components/form/BlacklistForm.test.tsx b/test/settings/components/form/BlacklistForm.test.tsx index 4d79383..e34802a 100644 --- a/test/settings/components/form/BlacklistForm.test.tsx +++ b/test/settings/components/form/BlacklistForm.test.tsx @@ -6,6 +6,7 @@ import { expect } from "chai"; import BlacklistForm from "../../../../src/settings/components/form/BlacklistForm"; import Blacklist from "../../../../src/shared/settings/Blacklist"; +import AddButton from "../../../../src/settings/components/ui/AddButton"; describe("settings/form/BlacklistForm", () => { describe("render", () => { @@ -16,26 +17,32 @@ describe("settings/form/BlacklistForm", () => { /> ).root; - const children = root.children[0].children; - expect(children).to.have.lengthOf(3); - expect(children[0].children[0].props.value).to.equal("*.slack.com"); - expect(children[1].children[0].props.value).to.equal( - "www.google.com/maps" - ); - expect(children[2].props.name).to.equal("add"); + const rows = root.findAllByProps({ + className: "form-blacklist-form-row", + }); + expect(rows).to.have.lengthOf(2); + expect( + rows[0].findByProps({ className: "column-url" }).props.value + ).to.equal("*.slack.com"); + expect( + rows[1].findByProps({ className: "column-url" }).props.value + ).to.equal("www.google.com/maps"); + + expect(() => root.findByType(AddButton)).not.throw(); }); it("renders blank value", () => { const root = ReactTestRenderer.create().root; - const children = root.children[0].children; - expect(children).to.have.lengthOf(1); - expect(children[0].props.name).to.equal("add"); + const rows = root.findAllByProps({ + className: "form-blacklist-form-row", + }); + expect(rows).to.be.empty; }); }); describe("onChange", () => { - let container; + let container: HTMLDivElement; beforeEach(() => { container = document.createElement("div"); @@ -44,7 +51,6 @@ describe("settings/form/BlacklistForm", () => { afterEach(() => { document.body.removeChild(container); - container = null; }); it("invokes onChange event on edit", (done) => { @@ -65,7 +71,9 @@ describe("settings/form/BlacklistForm", () => { ); }); - const input = document.querySelectorAll("input[type=text]")[0]; + const input = document.querySelectorAll( + "input[type=text]" + )[0] as HTMLInputElement; input.value = "gitter.im"; ReactTestUtils.Simulate.change(input); }); @@ -104,7 +112,9 @@ describe("settings/form/BlacklistForm", () => { ); }); - const button = document.querySelector("input[type=button].ui-add-button"); + const button = document.querySelector( + "input[type=button].ui-add-button" + ) as HTMLButtonElement; ReactTestUtils.Simulate.click(button); }); }); diff --git a/test/settings/components/form/KeymapsForm.test.tsx b/test/settings/components/form/KeymapsForm.test.tsx index 0a88db5..1cec889 100644 --- a/test/settings/components/form/KeymapsForm.test.tsx +++ b/test/settings/components/form/KeymapsForm.test.tsx @@ -3,7 +3,7 @@ import ReactDOM from "react-dom"; import ReactTestRenderer from "react-test-renderer"; import ReactTestUtils from "react-dom/test-utils"; import KeymapsForm from "../../../../src/settings/components/form/KeymapsForm"; -import { FormKeymaps } from "shared/SettingData"; +import { FormKeymaps } from "../../../../src/shared/SettingData"; import { expect } from "chai"; describe("settings/form/KeymapsForm", () => { @@ -37,7 +37,7 @@ describe("settings/form/KeymapsForm", () => { }); describe("onChange event", () => { - let container; + let container: HTMLDivElement; beforeEach(() => { container = document.createElement("div"); @@ -46,7 +46,6 @@ describe("settings/form/KeymapsForm", () => { afterEach(() => { document.body.removeChild(container); - container = null; }); it("invokes onChange event on edit", (done) => { @@ -68,7 +67,9 @@ describe("settings/form/KeymapsForm", () => { ); }); - const input = document.getElementById('scroll.vertically?{"count":1}'); + const input = document.getElementById( + 'scroll.vertically?{"count":1}' + ) as HTMLInputElement; input.value = "jjj"; ReactTestUtils.Simulate.change(input); }); diff --git a/test/settings/components/form/PropertiesForm.test.tsx b/test/settings/components/form/PropertiesForm.test.tsx index 4dc00a2..acf02b8 100644 --- a/test/settings/components/form/PropertiesForm.test.tsx +++ b/test/settings/components/form/PropertiesForm.test.tsx @@ -2,7 +2,8 @@ import React from "react"; import ReactDOM from "react-dom"; import ReactTestRenderer from "react-test-renderer"; import ReactTestUtils from "react-dom/test-utils"; -import PropertiesForm from "settings/components/form/PropertiesForm"; +import PropertiesForm from "../../../../src/settings/components/form/PropertiesForm"; +import { expect } from "chai"; describe("settings/form/PropertiesForm", () => { describe("render", () => { @@ -38,7 +39,7 @@ describe("settings/form/PropertiesForm", () => { }); describe("onChange", () => { - let container; + let container: HTMLDivElement; beforeEach(() => { container = document.createElement("div"); @@ -47,7 +48,6 @@ describe("settings/form/PropertiesForm", () => { afterEach(() => { document.body.removeChild(container); - container = null; }); it("invokes onChange event on text changed", (done) => { @@ -65,7 +65,9 @@ describe("settings/form/PropertiesForm", () => { ); }); - const input = document.querySelector("input[name=myvalue]"); + const input = document.querySelector( + "input[name=myvalue]" + ) as HTMLInputElement; input.value = "abcd"; ReactTestUtils.Simulate.change(input); }); @@ -85,7 +87,9 @@ describe("settings/form/PropertiesForm", () => { ); }); - const input = document.querySelector("input[name=myvalue]"); + const input = document.querySelector( + "input[name=myvalue]" + ) as HTMLInputElement; input.value = "1234"; ReactTestUtils.Simulate.change(input); }); @@ -105,7 +109,9 @@ describe("settings/form/PropertiesForm", () => { ); }); - const input = document.querySelector("input[name=myvalue]"); + const input = document.querySelector( + "input[name=myvalue]" + ) as HTMLInputElement; input.checked = true; ReactTestUtils.Simulate.change(input); }); diff --git a/test/settings/components/form/SearchEngineForm.test.tsx b/test/settings/components/form/SearchEngineForm.test.tsx index ccbd197..5f835cc 100644 --- a/test/settings/components/form/SearchEngineForm.test.tsx +++ b/test/settings/components/form/SearchEngineForm.test.tsx @@ -2,8 +2,9 @@ import React from "react"; import ReactDOM from "react-dom"; import ReactTestRenderer from "react-test-renderer"; import ReactTestUtils from "react-dom/test-utils"; -import SearchForm from "settings/components/form/SearchForm"; -import { FormSearch } from "shared/SettingData"; +import SearchForm from "../../../../src/settings/components/form/SearchForm"; +import { FormSearch } from "../../../../src/shared/SettingData"; +import { expect } from "chai"; describe("settings/form/SearchForm", () => { describe("render", () => { @@ -33,7 +34,7 @@ describe("settings/form/SearchForm", () => { }); describe("onChange event", () => { - let container; + let container: HTMLDivElement; beforeEach(() => { container = document.createElement("div"); @@ -42,7 +43,6 @@ describe("settings/form/SearchForm", () => { afterEach(() => { document.body.removeChild(container); - container = null; }); it("invokes onChange event on edit", (done) => { @@ -71,10 +71,14 @@ describe("settings/form/SearchForm", () => { ); }); - const radio = document.querySelectorAll("input[type=radio]"); + const radio = document.querySelector( + "input[type=radio]" + ) as HTMLInputElement; radio.checked = true; - const name = document.querySelector("input[name=name]"); + const name = document.querySelector( + "input[name=name]" + ) as HTMLInputElement; name.value = "louvre"; ReactTestUtils.Simulate.change(name); @@ -105,7 +109,9 @@ describe("settings/form/SearchForm", () => { ); }); - const button = document.querySelector("input[type=button]"); + const button = document.querySelector( + "input[type=button]" + ) as HTMLInputElement; ReactTestUtils.Simulate.click(button); }); @@ -132,7 +138,9 @@ describe("settings/form/SearchForm", () => { ); }); - const button = document.querySelector("input[type=button].ui-add-button"); + const button = document.querySelector( + "input[type=button].ui-add-button" + ) as HTMLInputElement; ReactTestUtils.Simulate.click(button); }); }); diff --git a/test/settings/components/ui/input.test.tsx b/test/settings/components/ui/input.test.tsx index 2f2b075..191bfed 100644 --- a/test/settings/components/ui/input.test.tsx +++ b/test/settings/components/ui/input.test.tsx @@ -1,10 +1,11 @@ import React from "react"; import ReactDOM from "react-dom"; import ReactTestUtils from "react-dom/test-utils"; -import Input from "settings/components/ui/Input"; +import Input from "../../../../src/settings/components/ui/Input"; +import { expect } from "chai"; describe("settings/ui/Input", () => { - let container; + let container: HTMLDivElement; beforeEach(() => { container = document.createElement("div"); @@ -13,7 +14,6 @@ describe("settings/ui/Input", () => { afterEach(() => { document.body.removeChild(container); - container = null; }); context("type=text", () => { @@ -25,8 +25,8 @@ describe("settings/ui/Input", () => { ); }); - const label = document.querySelector("label"); - const input = document.querySelector("input"); + const label = document.querySelector("label")!!; + const input = document.querySelector("input")!!; expect(label.textContent).to.contain("myfield"); expect(input.type).to.contain("text"); expect(input.name).to.contain("myname"); @@ -42,7 +42,7 @@ describe("settings/ui/Input", () => { label="myfield" value="myvalue" onChange={(e) => { - expect(e.target.value).to.equal("newvalue"); + expect((e.target as HTMLInputElement).value).to.equal("newvalue"); done(); }} />, @@ -50,7 +50,7 @@ describe("settings/ui/Input", () => { ); }); - const input = document.querySelector("input"); + const input = document.querySelector("input")!!; input.value = "newvalue"; ReactTestUtils.Simulate.change(input); }); @@ -65,8 +65,8 @@ describe("settings/ui/Input", () => { ); }); - const label = document.querySelector("label"); - const input = document.querySelector("input"); + const label = document.querySelector("label")!!; + const input = document.querySelector("input")!!; expect(label.textContent).to.contain("myfield"); expect(input.type).to.contain("radio"); expect(input.name).to.contain("myname"); @@ -82,7 +82,7 @@ describe("settings/ui/Input", () => { label="myfield" value="myvalue" onChange={(e) => { - expect(e.target.checked).to.be.true; + expect((e.target as HTMLInputElement).checked).to.be.true; done(); }} />, @@ -90,7 +90,7 @@ describe("settings/ui/Input", () => { ); }); - const input = document.querySelector("input"); + const input = document.querySelector("input") as HTMLInputElement; input.checked = true; ReactTestUtils.Simulate.change(input); }); @@ -111,9 +111,9 @@ describe("settings/ui/Input", () => { ); }); - const label = document.querySelector("label"); - const textarea = document.querySelector("textarea"); - const error = document.querySelector(".settings-ui-input-error"); + const label = document.querySelector("label")!!; + const textarea = document.querySelector("textarea")!!; + const error = document.querySelector(".settings-ui-input-error")!!; expect(label.textContent).to.contain("myfield"); expect(textarea.nodeName).to.contain("TEXTAREA"); expect(textarea.name).to.contain("myname"); @@ -130,7 +130,7 @@ describe("settings/ui/Input", () => { label="myfield" value="myvalue" onChange={(e) => { - expect(e.target.value).to.equal("newvalue"); + expect((e.target as HTMLInputElement).value).to.equal("newvalue"); done(); }} />, @@ -138,7 +138,7 @@ describe("settings/ui/Input", () => { ); }); - const input = document.querySelector("textarea"); + const input = document.querySelector("textarea")!!; input.value = "newvalue"; ReactTestUtils.Simulate.change(input); }); diff --git a/test/settings/reducers/setting.test.ts b/test/settings/reducers/setting.test.ts index bb5cfa5..99c4c80 100644 --- a/test/settings/reducers/setting.test.ts +++ b/test/settings/reducers/setting.test.ts @@ -1,54 +1,61 @@ -import * as actions from "settings/actions"; -import settingReducer from "settings/reducers/setting"; +import * as actions from "../../../src/settings/actions"; +import settingReducer from "../../../src/settings/reducers/setting"; +import { expect } from "chai"; +import { + FormSettings, + JSONTextSettings, + SettingSource, +} from "../../../src/shared/SettingData"; +import { DefaultSetting } from "../../../src/shared/settings/Settings"; describe("settings setting reducer", () => { it("return the initial state", () => { - const state = settingReducer(undefined, {}); + const state = settingReducer(undefined, {} as any); expect(state).to.have.deep.property("source", "json"); expect(state).to.have.deep.property("error", ""); }); it("return next state for SETTING_SET_SETTINGS", () => { - const action = { + const action: actions.SettingAction = { type: actions.SETTING_SET_SETTINGS, - source: "json", - json: '{ "key": "value" }', - form: {}, + source: SettingSource.JSON, + json: JSONTextSettings.fromText('{ "key": "value" }'), + form: FormSettings.fromSettings(DefaultSetting), }; const state = settingReducer(undefined, action); - expect(state).to.have.deep.property("source", "json"); - expect(state).to.have.deep.property("json", '{ "key": "value" }'); - expect(state).to.have.deep.property("form", {}); + expect(state.source).to.equal("json"); + expect(state.json!!.toJSONText()).to.equal('{ "key": "value" }'); + expect(state.form).to.deep.equal(action.form); }); it("return next state for SETTING_SHOW_ERROR", () => { - const action = { + const action: actions.SettingAction = { type: actions.SETTING_SHOW_ERROR, error: "bad value", - json: "{}", + json: JSONTextSettings.fromText("{}"), }; const state = settingReducer(undefined, action); - expect(state).to.have.deep.property("error", "bad value"); - expect(state).to.have.deep.property("json", "{}"); + expect(state.error).to.equal("bad value"); + expect(state.json!!.toJSONText()).to.equal("{}"); }); it("return next state for SETTING_SWITCH_TO_FORM", () => { - const action = { + const action: actions.SettingAction = { type: actions.SETTING_SWITCH_TO_FORM, - form: {}, + form: FormSettings.fromSettings(DefaultSetting), }; const state = settingReducer(undefined, action); - expect(state).to.have.deep.property("form", {}); - expect(state).to.have.deep.property("source", "form"); + expect(state.form).to.deep.equal(action.form); + expect(state.source).to.equal("form"); }); it("return next state for SETTING_SWITCH_TO_JSON", () => { - const action = { + const action: actions.SettingAction = { type: actions.SETTING_SWITCH_TO_JSON, - json: "{}", + json: JSONTextSettings.fromText("{}"), }; const state = settingReducer(undefined, action); - expect(state).to.have.deep.property("json", "{}"); - expect(state).to.have.deep.property("source", "json"); + expect(state.json!!.toJSONText()).to.equal("{}"); + expect(state.source).to.equal(SettingSource.JSON); }); }); diff --git a/test/shared/operations.test.ts b/test/shared/operations.test.ts index 94986ac..449b25e 100644 --- a/test/shared/operations.test.ts +++ b/test/shared/operations.test.ts @@ -1,12 +1,13 @@ -import * as operations from "shared/operations"; +import * as operations from "../../src/shared/operations"; +import { expect } from "chai"; describe("operations", () => { describe("#valueOf", () => { it("returns an Operation", () => { - const op: operations.Operation = operations.valueOf({ + const op = operations.valueOf({ type: operations.SCROLL_VERTICALLY, count: 10, - }); + }) as operations.ScrollVerticallyOperation; expect(op.type).to.equal(operations.SCROLL_VERTICALLY); expect(op.count).to.equal(10); }); @@ -20,9 +21,9 @@ describe("operations", () => { }); it("fills default valus of optional parameter", () => { - const op: operations.Operation = operations.valueOf({ + const op = operations.valueOf({ type: operations.COMMAND_SHOW_OPEN, - }); + }) as operations.CommandShowOpenOperation; expect(op.type).to.equal(operations.COMMAND_SHOW_OPEN); expect(op.alter).to.be.false; @@ -37,7 +38,7 @@ describe("operations", () => { ).to.throw(TypeError); expect(() => - valueOf({ + operations.valueOf({ type: operations.COMMAND_SHOW_OPEN, alter: "true", }) -- cgit v1.2.3