Pop-up dictionary browser extension for language learning. Successor to Yomichan. (PERSONAL FORK)
1/*
2 * Copyright (C) 2023-2025 Yomitan Authors
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
18import {readFileSync} from 'fs';
19import {fileURLToPath} from 'node:url';
20import path from 'path';
21import {bench, describe} from 'vitest';
22import {parseJson} from '../dev/json.js';
23import {createTranslatorContext} from '../test/fixtures/translator-test.js';
24import {setupStubs} from '../test/utilities/database.js';
25import {createFindKanjiOptions, createFindTermsOptions} from '../test/utilities/translator.js';
26
27setupStubs();
28
29const dirname = path.dirname(fileURLToPath(import.meta.url));
30const dictionaryName = 'Test Dictionary 2';
31const {translator} = await createTranslatorContext(path.join(dirname, '..', 'test', 'data/dictionaries/valid-dictionary1'), dictionaryName);
32
33describe('Translator', () => {
34 const testInputsFilePath = path.join(dirname, '..', 'test', 'data/translator-test-inputs.json');
35 /** @type {import('test/translator').TranslatorTestInputs} */
36 const {optionsPresets, tests} = parseJson(readFileSync(testInputsFilePath, {encoding: 'utf8'}));
37
38 const findKanjiTests = tests.filter((data) => data.options === 'kanji');
39 const findTermTests = tests.filter((data) => data.options !== 'kanji');
40
41 bench(`Translator.prototype.findTerms - (n=${findTermTests.length})`, async () => {
42 for (const data of /** @type {import('test/translator').TestInputFindTerm[]} */ (findTermTests)) {
43 const {mode, text} = data;
44 const options = createFindTermsOptions(dictionaryName, optionsPresets, data.options);
45 await translator.findTerms(mode, text, options);
46 }
47 });
48
49 bench(`Translator.prototype.findKanji - (n=${findKanjiTests.length})`, async () => {
50 for (const data of /** @type {import('test/translator').TestInputFindKanji[]} */ (findKanjiTests)) {
51 const {text} = data;
52 const options = createFindKanjiOptions(dictionaryName, optionsPresets, data.options);
53 await translator.findKanji(text, options);
54 }
55 });
56});