aboutsummaryrefslogtreecommitdiff
path: root/test/content/usecases
diff options
context:
space:
mode:
Diffstat (limited to 'test/content/usecases')
-rw-r--r--test/content/usecases/ClipboardUseCase.test.ts36
-rw-r--r--test/content/usecases/FindUseCase.test.ts2
-rw-r--r--test/content/usecases/HintKeyProducer.test.ts6
-rw-r--r--test/content/usecases/KeymapUseCase.test.ts210
-rw-r--r--test/content/usecases/SettingUseCaase.test.ts6
5 files changed, 189 insertions, 71 deletions
diff --git a/test/content/usecases/ClipboardUseCase.test.ts b/test/content/usecases/ClipboardUseCase.test.ts
index a863651..3cc82fe 100644
--- a/test/content/usecases/ClipboardUseCase.test.ts
+++ b/test/content/usecases/ClipboardUseCase.test.ts
@@ -6,19 +6,31 @@ import ConsoleClient from '../../../src/content/client/ConsoleClient';
import * as sinon from 'sinon';
import { expect } from 'chai';
+import {Operation} from "../../../src/shared/operations";
describe('ClipboardUseCase', () => {
let clipboardRepository: ClipboardRepository;
+
let operationClient: OperationClient;
+
let consoleClient: ConsoleClient;
+
let sut: ClipboardUseCase;
beforeEach(() => {
- var modal = <ConsoleClient>{};
+ clipboardRepository = new class implements ClipboardRepository {
+ read(): string { return ""; }
+ write(_text: string) {}
+ };
+ operationClient = new class implements OperationClient {
+ execBackgroundOp(_repeat: number, _op: Operation): Promise<void> { return Promise.resolve() }
+ internalOpenUrl(_url: string, _newTab?: boolean, _background?: boolean): Promise<void> { return Promise.resolve() }
+ };
+ consoleClient = new class implements ConsoleClient {
+ error(_text: string): Promise<void> { return Promise.resolve() }
+ info(_text: string): Promise<void> { return Promise.resolve() }
+ };
- clipboardRepository = <ClipboardRepository>{ read() {}, write(_) {} };
- operationClient = <OperationClient>{ internalOpenUrl(_) {} };
- consoleClient = <ConsoleClient>{ info(_) {}};
sut = new ClipboardUseCase(
clipboardRepository,
new SettingRepositoryImpl(),
@@ -29,13 +41,13 @@ describe('ClipboardUseCase', () => {
describe('#yankCurrentURL', () => {
it('yanks current url', async () => {
- let href = window.location.href;
- var mockRepository = sinon.mock(clipboardRepository);
+ const href = window.location.href;
+ const mockRepository = sinon.mock(clipboardRepository);
mockRepository.expects('write').withArgs(href);
- var mockConsoleClient = sinon.mock(consoleClient);
+ const mockConsoleClient = sinon.mock(consoleClient);
mockConsoleClient.expects('info').withArgs('Yanked ' + href);
- let yanked = await sut.yankCurrentURL();
+ const yanked = await sut.yankCurrentURL();
expect(yanked).to.equal(href);
mockRepository.verify();
@@ -45,9 +57,9 @@ describe('ClipboardUseCase', () => {
describe('#openOrSearch', () => {
it('opens url from the clipboard', async () => {
- let url = 'https://github.com/ueokande/vim-vixen'
+ const url = 'https://github.com/ueokande/vim-vixen'
sinon.stub(clipboardRepository, 'read').returns(url);
- let mockOperationClient = sinon.mock(operationClient);
+ const mockOperationClient = sinon.mock(operationClient);
mockOperationClient.expects('internalOpenUrl').withArgs(url, true);
await sut.openOrSearch(true);
@@ -56,9 +68,9 @@ describe('ClipboardUseCase', () => {
});
it('opens search results from the clipboard', async () => {
- let url = 'https://google.com/search?q=banana';
+ const url = 'https://google.com/search?q=banana';
sinon.stub(clipboardRepository, 'read').returns('banana');
- let mockOperationClient = sinon.mock(operationClient);
+ const mockOperationClient = sinon.mock(operationClient);
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 ddd4cd4..3978dbc 100644
--- a/test/content/usecases/FindUseCase.test.ts
+++ b/test/content/usecases/FindUseCase.test.ts
@@ -32,7 +32,7 @@ class MockFindPresenter implements FindPresenter {
}
find(keyword: string, _backward: boolean): boolean {
- let found = this.document.includes(keyword);
+ const found = this.document.includes(keyword);
this.highlighted = found;
return found;
}
diff --git a/test/content/usecases/HintKeyProducer.test.ts b/test/content/usecases/HintKeyProducer.test.ts
index feafffb..5841ae9 100644
--- a/test/content/usecases/HintKeyProducer.test.ts
+++ b/test/content/usecases/HintKeyProducer.test.ts
@@ -10,13 +10,13 @@ describe('HintKeyProducer class', () => {
describe('#produce', () => {
it('produce incremented keys', () => {
- let charset = 'abc';
- let sequences = [
+ const charset = 'abc';
+ const sequences = [
'a', 'b', 'c',
'aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc',
'aaa', 'aab', 'aac', 'aba']
- let producer = new HintKeyProducer(charset);
+ const producer = new HintKeyProducer(charset);
for (let i = 0; i < sequences.length; ++i) {
expect(producer.produce()).to.equal(sequences[i]);
}
diff --git a/test/content/usecases/KeymapUseCase.test.ts b/test/content/usecases/KeymapUseCase.test.ts
index 5f2feba..032d4fc 100644
--- a/test/content/usecases/KeymapUseCase.test.ts
+++ b/test/content/usecases/KeymapUseCase.test.ts
@@ -1,3 +1,4 @@
+import "reflect-metadata";
import KeymapUseCase from '../../../src/content/usecases/KeymapUseCase';
import {expect} from 'chai';
import SettingRepository from "../../../src/content/repositories/SettingRepository";
@@ -50,55 +51,158 @@ class MockAddressRepository implements AddressRepository {
describe('KeymapUseCase', () => {
- it('returns matched operation', () => {
- let settings = Settings.fromJSON({
+ 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'},
},
});
- let sut = new KeymapUseCase(
- new KeymapRepositoryImpl(),
- new MockSettingRepository(settings),
- new MockAddonEnabledRepository(true),
- new MockAddressRepository(new URL('https://example.com')),
- );
-
- expect(sut.nextOp(Key.fromMapKey('k'))).to.deep.equal({type: 'scroll.vertically', count: -1});
- expect(sut.nextOp(Key.fromMapKey('j'))).to.deep.equal({type: 'scroll.vertically', count: 1});
- expect(sut.nextOp(Key.fromMapKey('g'))).to.be.null;
- expect(sut.nextOp(Key.fromMapKey('g'))).to.deep.equal({type: 'scroll.top'});
- expect(sut.nextOp(Key.fromMapKey('z'))).to.be.null;
+
+ let sut: KeymapUseCase;
+
+ before(() => {
+ sut = new KeymapUseCase(
+ 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('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', () => {
+ const settings = Settings.fromJSON({
+ keymaps: {
+ 20: {type: "scroll.top"},
+ g5: {type: 'scroll.bottom'},
+ },
+ });
+
+ let sut: KeymapUseCase;
+
+ before(() => {
+ sut = new KeymapUseCase(
+ 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 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('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', () => {
+ const settings = Settings.fromJSON({
+ keymaps: {
+ gg: {type: "scroll.top"},
+ G: {type: "scroll.bottom"},
+ },
+ });
+
+ let sut: KeymapUseCase;
+
+ before(() => {
+ sut = new KeymapUseCase(
+ 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 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('returns only ADDON_ENABLE and ADDON_TOGGLE_ENABLED operation', () => {
- let settings = Settings.fromJSON({
+ 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'},
},
});
- let sut = new KeymapUseCase(
- new KeymapRepositoryImpl(),
- new MockSettingRepository(settings),
- new MockAddonEnabledRepository(false),
- new MockAddressRepository(new URL('https://example.com')),
- );
- expect(sut.nextOp(Key.fromMapKey('k'))).to.be.null;
- expect(sut.nextOp(Key.fromMapKey('a'))).to.deep.equal({type: 'addon.enable'});
- expect(sut.nextOp(Key.fromMapKey('b'))).to.deep.equal({type: 'addon.toggle.enabled'});
+ let sut: KeymapUseCase;
+
+ before(() => {
+ sut = new KeymapUseCase(
+ 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('blocks keys in the partial blacklist', () => {
- let settings = Settings.fromJSON({
+ 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"},
+ gg: {type: "scroll.top"},
+ G: {type: "scroll.bottom"},
},
blacklist: [
{ url: "example.com", keys: ['g'] },
@@ -106,28 +210,30 @@ describe('KeymapUseCase', () => {
],
});
- let sut = new KeymapUseCase(
- new KeymapRepositoryImpl(),
- new MockSettingRepository(settings),
- new MockAddonEnabledRepository(true),
- new MockAddressRepository(new URL('https://example.com')),
- );
-
- expect(sut.nextOp(Key.fromMapKey('k'))).to.deep.equal({type: 'scroll.vertically', count: -1});
- expect(sut.nextOp(Key.fromMapKey('j'))).to.deep.equal({type: 'scroll.vertically', count: 1});
- expect(sut.nextOp(Key.fromMapKey('g'))).to.be.null;
- expect(sut.nextOp(Key.fromMapKey('g'))).to.be.null;
- expect(sut.nextOp(Key.fromMapKey('G'))).to.deep.equal({type: 'scroll.bottom'});
-
- sut = new KeymapUseCase(
- new KeymapRepositoryImpl(),
- new MockSettingRepository(settings),
- new MockAddonEnabledRepository(true),
- new MockAddressRepository(new URL('https://example.org')),
- );
-
- expect(sut.nextOp(Key.fromMapKey('g'))).to.be.null;
- expect(sut.nextOp(Key.fromMapKey('g'))).to.deep.equal({type: 'scroll.top'});
- expect(sut.nextOp(Key.fromMapKey('G'))).to.be.null;
+ 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')),
+ );
+
+ 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')),
+ );
+
+ 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/SettingUseCaase.test.ts b/test/content/usecases/SettingUseCaase.test.ts
index 136c5af..cf14e6e 100644
--- a/test/content/usecases/SettingUseCaase.test.ts
+++ b/test/content/usecases/SettingUseCaase.test.ts
@@ -38,7 +38,7 @@ describe('AddonEnabledUseCase', () => {
let sut: SettingUseCase;
beforeEach(() => {
- let testSettings = {
+ const testSettings = {
keymaps: {},
search: {
default: 'google',
@@ -61,10 +61,10 @@ describe('AddonEnabledUseCase', () => {
describe('#reload', () => {
it('loads settings and store to repository', async() => {
- let settings = await sut.reload();
+ const settings = await sut.reload();
expect(settings.properties.hintchars).to.equal('abcd1234');
- let saved = repository.get();
+ const saved = repository.get();
expect(saved.properties.hintchars).to.equal('abcd1234');
});
});