blob: f5b2ddeb46656b36a6bb33f4f98e1b3eea672c81 [file] [log] [blame]
import './index';
import { eventPromise, noEventPromise, setUpElementUnderTest } from '../../../infra-sk/modules/test_util';
import { CorpusSelectorSk } from './corpus-selector-sk';
import { CorpusSelectorSkPO } from './corpus-selector-sk_po';
import { stringCorpora, customTypeCorpora, TestCorpus } from './test_data';
const expect = chai.expect;
describe('corpus-selector-sk', () => {
describe('with string corpora', () => {
const newInstance = setUpElementUnderTest<CorpusSelectorSk<string>>('corpus-selector-sk');
let corpusSelectorSk: CorpusSelectorSk<string>;
let corpusSelectorSkPO: CorpusSelectorSkPO;
beforeEach(() => {
corpusSelectorSk = newInstance();
corpusSelectorSk.corpora = stringCorpora;
corpusSelectorSk.selectedCorpus = 'gm';
corpusSelectorSkPO = new CorpusSelectorSkPO(corpusSelectorSk);
});
it('shows a loading indicator when the corpora is empty', async () => {
corpusSelectorSk.corpora = [];
expect(await corpusSelectorSkPO.isLoadingMessageVisible()).to.be.true;
});
it('shows the available corpora', async () => {
expect(await corpusSelectorSkPO.getCorpora()).to.deep.equal([
'canvaskit', 'colorImage', 'gm', 'image', 'pathkit', 'skp', 'svg'
]);
});
it('shows the available corpora using a custom renderer function', async () => {
corpusSelectorSk.corpusRendererFn = (corpus) => `(${corpus})`;
expect(await corpusSelectorSkPO.getCorpora()).to.deep.equal([
'(canvaskit)', '(colorImage)', '(gm)', '(image)', '(pathkit)', '(skp)', '(svg)'
]);
});
it('shows the selected corpus', async () => {
expect(await corpusSelectorSkPO.getSelectedCorpus()).to.equal('gm');
})
it('can handle an empty selection', async () => {
corpusSelectorSk.selectedCorpus = null;
expect(await corpusSelectorSkPO.getSelectedCorpus()).to.be.null;
});
it('can change the selection programmatically', async () => {
corpusSelectorSk.selectedCorpus = 'image';
expect(corpusSelectorSk.selectedCorpus).to.equal('image');
expect(await corpusSelectorSkPO.getSelectedCorpus()).to.equal('image');
});
it('does not emit "corpus-selected" when selection changes programmatically', async () => {
const noEvent = noEventPromise('corpus-selected');
corpusSelectorSk.selectedCorpus = 'image';
await noEvent;
});
describe('clicking on a corpus', () => {
it('changes the selection', async () => {
await corpusSelectorSkPO.clickCorpus('colorImage');
expect(corpusSelectorSk.selectedCorpus).to.equal('colorImage');
expect(await corpusSelectorSkPO.getSelectedCorpus()).to.equal('colorImage');
});
it('emits event "corpus-selected" with the new corpus', async () => {
const corpusSelected = eventPromise<CustomEvent<string>>('corpus-selected');
await corpusSelectorSkPO.clickCorpus('colorImage');
const newSelection = (await corpusSelected).detail;
expect(newSelection).to.equal('colorImage');
});
it('does not emit "corpus-selected" if it\'s the current corpus', async () => {
const noEvent = noEventPromise('corpus-selected');
await corpusSelectorSkPO.clickCorpus('gm');
await noEvent;
})
});
});
describe('with a custom corpus object type and corpus renderer function', () => {
const newInstance = setUpElementUnderTest<CorpusSelectorSk<TestCorpus>>('corpus-selector-sk');
let corpusSelectorSk: CorpusSelectorSk<TestCorpus>;
let corpusSelectorSkPO: CorpusSelectorSkPO;
beforeEach(() => {
corpusSelectorSk = newInstance();
corpusSelectorSk.corpusRendererFn =
(c: TestCorpus) => `${c.name} : ${c.untriagedCount} / ${c.negativeCount}`;
corpusSelectorSk.corpora = customTypeCorpora;
corpusSelectorSk.selectedCorpus = customTypeCorpora.find(corpus => corpus.name === 'gm')!;
corpusSelectorSkPO = new CorpusSelectorSkPO(corpusSelectorSk);
});
it('handles a non-trivial custom corpus renderer function', async () => {
expect(await corpusSelectorSkPO.getCorpora()).to.deep.equal([
'canvaskit : 2 / 2',
'colorImage : 0 / 1',
'gm : 61 / 1494',
'image : 22 / 35',
'pathkit : 0 / 0',
'skp : 0 / 1',
'svg : 19 / 21'
]);
});
it('changes the selection when clicking on a corpus', async () => {
await corpusSelectorSkPO.clickCorpus('skp : 0 / 1');
expect(corpusSelectorSk.selectedCorpus)
.to.deep.equal(customTypeCorpora.find(corpus => corpus.name === 'skp')!);
expect(await corpusSelectorSkPO.getSelectedCorpus()).to.equal('skp : 0 / 1');
});
it('emits "corpus-selected" with custom corpus object when selection changes', async () => {
const corpusSelected = eventPromise<CustomEvent<TestCorpus>>('corpus-selected');
await corpusSelectorSkPO.clickCorpus('skp : 0 / 1');
const newSelection = (await corpusSelected).detail;
expect(newSelection).to.deep.equal(customTypeCorpora.find(corpus => corpus.name === 'skp')!);
});
});
});