import AbstractHint, { LinkHint, InputHint } from '../../../src/content/presenters/Hint'; import { expect } from 'chai'; class Hint extends AbstractHint { } 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'); 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'); hint.hide(); hint.show(); 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'); hint.hide(); 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'); const elem = document.querySelector('.vimvixen-hint'); expect(elem.parentElement).to.not.be.null; hint.remove(); expect(elem.parentElement).to.be.null; }); }); }); describe('LinkHint', () => { beforeEach(() => { document.body.innerHTML = ` link link link `; }); describe('#getLink()', () => { it('returns value of "href" attribute', () => { const link = document.getElementById('test-link1') as HTMLAnchorElement; const hint = new LinkHint(link, 'abc'); expect(hint.getLink()).to.equal('https://google.com/'); }); }); describe('#getLinkTarget()', () => { it('returns value of "target" attribute', () => { 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'); 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() }; hint.click(); }); }); }); 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'); hint.activate(); expect(document.activeElement).to.equal(input); }); }); context('', () => { beforeEach(() => { document.body.innerHTML = ``; }); 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'); 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() }; const hint = new InputHint(button, 'abc'); hint.activate(); }); }); }); });