mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-20 12:11:28 -07:00
110 lines
3.4 KiB
TypeScript
110 lines
3.4 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import path from 'node:path';
|
|
import test from 'node:test';
|
|
import { pathToFileURL } from 'node:url';
|
|
|
|
import { resolveYomitanExtensionPath } from './core/services/yomitan-extension-paths';
|
|
|
|
type SortableTermEntry = {
|
|
matchPrimaryReading: boolean;
|
|
maxOriginalTextLength: number;
|
|
textProcessorRuleChainCandidates: unknown[];
|
|
inflectionRuleChainCandidates: unknown[];
|
|
sourceTermExactMatchCount: number;
|
|
frequencyOrder: number;
|
|
dictionaryIndex: number;
|
|
score: number;
|
|
dictionaryAlias: string;
|
|
headwords: Array<{ term: string }>;
|
|
definitions: Array<{ dictionary: string }>;
|
|
};
|
|
|
|
type SortableDefinition = {
|
|
dictionary: string;
|
|
dictionaryAlias: string;
|
|
frequencyOrder: number;
|
|
dictionaryIndex: number;
|
|
score: number;
|
|
headwordIndices: number[];
|
|
index: number;
|
|
};
|
|
|
|
async function loadTranslator(): Promise<{ new (...args: unknown[]): { [key: string]: unknown } }> {
|
|
const yomitanRoot = resolveYomitanExtensionPath({ cwd: process.cwd() });
|
|
assert.ok(yomitanRoot, 'Run `bun run build:yomitan` before Yomitan integration tests.');
|
|
const module = await import(
|
|
pathToFileURL(path.join(yomitanRoot, 'js', 'language', 'translator.js')).href
|
|
);
|
|
return module.Translator as { new (...args: unknown[]): { [key: string]: unknown } };
|
|
}
|
|
|
|
test('Translator prioritizes SubMiner term entries without changing dictionary index order', async () => {
|
|
const Translator = await loadTranslator();
|
|
const translator = new Translator({}) as {
|
|
_sortTermDictionaryEntries: (entries: unknown[]) => void;
|
|
};
|
|
const entries: SortableTermEntry[] = [
|
|
{
|
|
matchPrimaryReading: true,
|
|
maxOriginalTextLength: 4,
|
|
textProcessorRuleChainCandidates: [],
|
|
inflectionRuleChainCandidates: [],
|
|
sourceTermExactMatchCount: 1,
|
|
frequencyOrder: 0,
|
|
dictionaryIndex: 0,
|
|
score: 10,
|
|
dictionaryAlias: 'JMdict',
|
|
headwords: [{ term: 'アイリス' }],
|
|
definitions: [{ dictionary: 'JMdict' }],
|
|
},
|
|
{
|
|
matchPrimaryReading: true,
|
|
maxOriginalTextLength: 4,
|
|
textProcessorRuleChainCandidates: [],
|
|
inflectionRuleChainCandidates: [],
|
|
sourceTermExactMatchCount: 1,
|
|
frequencyOrder: 99,
|
|
dictionaryIndex: 99,
|
|
score: 1,
|
|
dictionaryAlias: 'SubMiner Character Dictionary',
|
|
headwords: [{ term: 'アイリス' }],
|
|
definitions: [{ dictionary: 'SubMiner Character Dictionary' }],
|
|
},
|
|
];
|
|
|
|
translator._sortTermDictionaryEntries(entries as unknown[]);
|
|
|
|
assert.equal(entries[0]?.dictionaryAlias, 'SubMiner Character Dictionary');
|
|
});
|
|
|
|
test('Translator prioritizes SubMiner definitions without changing dictionary index order', async () => {
|
|
const Translator = await loadTranslator();
|
|
const translator = new Translator({}) as {
|
|
_sortTermDictionaryEntryDefinitions: (definitions: unknown[]) => void;
|
|
};
|
|
const definitions: SortableDefinition[] = [
|
|
{
|
|
dictionary: 'JMdict',
|
|
dictionaryAlias: 'JMdict',
|
|
frequencyOrder: 0,
|
|
dictionaryIndex: 0,
|
|
score: 10,
|
|
headwordIndices: [0],
|
|
index: 0,
|
|
},
|
|
{
|
|
dictionary: 'SubMiner Character Dictionary',
|
|
dictionaryAlias: 'SubMiner Character Dictionary',
|
|
frequencyOrder: 99,
|
|
dictionaryIndex: 99,
|
|
score: 1,
|
|
headwordIndices: [0],
|
|
index: 1,
|
|
},
|
|
];
|
|
|
|
translator._sortTermDictionaryEntryDefinitions(definitions as unknown[]);
|
|
|
|
assert.equal(definitions[0]?.dictionaryAlias, 'SubMiner Character Dictionary');
|
|
});
|