A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
4.9 KiB
185 lines
4.9 KiB
6 years ago
|
import FindRepository from '../../../src/content/repositories/FindRepository';
|
||
|
import FindPresenter from '../../../src/content/presenters/FindPresenter';
|
||
|
import ConsoleClient from '../../../src/content/client/ConsoleClient';
|
||
|
import FindClient from '../../../src/content/client/FindClient';
|
||
|
import FindUseCase from '../../../src/content/usecases/FindUseCase';
|
||
|
import { expect } from 'chai';
|
||
|
|
||
|
class MockFindRepository implements FindRepository {
|
||
|
public keyword: string | null;
|
||
|
|
||
|
constructor() {
|
||
|
this.keyword = null;
|
||
|
}
|
||
|
|
||
|
getLastKeyword(): string | null {
|
||
|
return this.keyword;
|
||
|
}
|
||
|
|
||
|
setLastKeyword(keyword: string): void {
|
||
|
this.keyword = keyword;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class MockFindPresenter implements FindPresenter {
|
||
|
public document: string;
|
||
|
|
||
|
public highlighted: boolean;
|
||
|
|
||
|
constructor() {
|
||
|
this.document = '';
|
||
|
this.highlighted = false;
|
||
|
}
|
||
|
|
||
|
find(keyword: string, _backward: boolean): boolean {
|
||
|
let found = this.document.includes(keyword);
|
||
|
this.highlighted = found;
|
||
|
return found;
|
||
|
}
|
||
|
|
||
|
clearSelection(): void {
|
||
|
this.highlighted = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class MockFindClient implements FindClient {
|
||
|
public keyword: string | null;
|
||
|
|
||
|
constructor() {
|
||
|
this.keyword = null;
|
||
|
}
|
||
|
|
||
|
getGlobalLastKeyword(): Promise<string | null> {
|
||
|
return Promise.resolve(this.keyword);
|
||
|
}
|
||
|
|
||
|
setGlobalLastKeyword(keyword: string): Promise<void> {
|
||
|
this.keyword = keyword;
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class MockConsoleClient implements ConsoleClient {
|
||
|
public isError: boolean;
|
||
|
|
||
|
public text: string;
|
||
|
|
||
|
constructor() {
|
||
|
this.isError = false;
|
||
|
this.text = '';
|
||
|
}
|
||
|
|
||
|
info(text: string): Promise<void> {
|
||
|
this.isError = false;
|
||
|
this.text = text;
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
|
||
|
error(text: string): Promise<void> {
|
||
|
this.isError = true;
|
||
|
this.text = text;
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
describe('FindUseCase', () => {
|
||
|
let repository: MockFindRepository;
|
||
|
let presenter: MockFindPresenter;
|
||
|
let client: MockFindClient;
|
||
|
let consoleClient: MockConsoleClient;
|
||
|
let sut: FindUseCase;
|
||
|
|
||
|
beforeEach(() => {
|
||
|
repository = new MockFindRepository();
|
||
|
presenter = new MockFindPresenter();
|
||
|
client = new MockFindClient();
|
||
|
consoleClient = new MockConsoleClient();
|
||
|
sut = new FindUseCase({ repository, presenter, client, consoleClient });
|
||
|
});
|
||
|
|
||
|
describe('#startFind', () => {
|
||
|
it('find next by ketword', async() => {
|
||
|
presenter.document = 'monkey punch';
|
||
|
|
||
|
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');
|
||
|
});
|
||
|
|
||
|
it('find next by last keyword', async() => {
|
||
|
presenter.document = 'gorilla kick';
|
||
|
repository.keyword = 'gorilla';
|
||
|
|
||
|
await sut.startFind(null);
|
||
|
|
||
|
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');
|
||
|
});
|
||
|
|
||
|
it('find next by global last keyword', async() => {
|
||
|
presenter.document = 'chimpanzee typing';
|
||
|
|
||
|
repository.keyword = null;
|
||
|
client.keyword = 'chimpanzee';
|
||
|
|
||
|
await sut.startFind(null);
|
||
|
|
||
|
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');
|
||
|
});
|
||
|
|
||
|
it('find not found error', async() => {
|
||
|
presenter.document = 'zoo';
|
||
|
|
||
|
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');
|
||
|
});
|
||
|
|
||
|
it('show errors when no last keywords', async() => {
|
||
|
repository.keyword = null;
|
||
|
client.keyword = null;
|
||
|
|
||
|
await sut.startFind(null);
|
||
|
|
||
|
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';
|
||
|
|
||
|
await sut.findNext();
|
||
|
|
||
|
expect(await presenter.highlighted).to.be.true;
|
||
|
expect(await consoleClient.text).to.equal('Pattern found: monkey');
|
||
|
});
|
||
|
|
||
|
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.isError).to.be.true;
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('#findPrev', () => {
|
||
|
});
|
||
|
});
|