mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-10-01 00:57:23 -04:00

the #shared alias used by Nuxt cannot be easily disabled and to prevent breackage with jiti, we make use of it
50 lines
2.1 KiB
TypeScript
50 lines
2.1 KiB
TypeScript
import { expect } from 'vitest';
|
|
|
|
import type { ExampleValues } from '#shared/language/examples.ts';
|
|
import { expandVariantsForSection } from '#shared/language/grammarTables.ts';
|
|
import type {
|
|
CellPart,
|
|
GrammarTableDefinition,
|
|
GrammarTablesDefinition, VariantsFromBaseConverter,
|
|
} from '#shared/language/grammarTables.ts';
|
|
import { MorphemeValues } from '#shared/language/morphemes.ts';
|
|
|
|
const getGrammarTableDefinitions = (grammarTablesDefinition: GrammarTablesDefinition): GrammarTableDefinition[] => {
|
|
let grammarTableDefinitions: (GrammarTableDefinition | string)[];
|
|
if (Array.isArray(grammarTablesDefinition)) {
|
|
grammarTableDefinitions = grammarTablesDefinition;
|
|
} else {
|
|
grammarTableDefinitions = [...grammarTablesDefinition.simple, ...grammarTablesDefinition.comprehensive];
|
|
}
|
|
return grammarTableDefinitions.filter((grammarTableDefinition) => typeof grammarTableDefinition !== 'string');
|
|
};
|
|
|
|
const getCellParts = (
|
|
grammarTablesDefinition: GrammarTablesDefinition,
|
|
variantsFromBaseConverter: VariantsFromBaseConverter,
|
|
exampleValues: ExampleValues,
|
|
): CellPart[] => {
|
|
return getGrammarTableDefinitions(grammarTablesDefinition)
|
|
.flatMap((grammarTableDefinition) => grammarTableDefinition.sections)
|
|
.flatMap((sectionDefinition) => {
|
|
return expandVariantsForSection(sectionDefinition.variants, variantsFromBaseConverter, exampleValues);
|
|
})
|
|
.flatMap((variant) => variant.cells)
|
|
.flatMap((cell) => cell);
|
|
};
|
|
|
|
export const checkContainsValidMorphemes = (
|
|
grammarTablesDefinition: GrammarTablesDefinition,
|
|
variantsFromBaseConverter: VariantsFromBaseConverter,
|
|
morphemes: string[],
|
|
) => {
|
|
for (const plural of [false, true]) {
|
|
const exampleValues = { morphemeValues: new MorphemeValues({}), plural };
|
|
const cellParts = getCellParts(grammarTablesDefinition, variantsFromBaseConverter, exampleValues);
|
|
for (const cellPart of cellParts) {
|
|
expect(morphemes).toContain(cellPart.morpheme);
|
|
expect(morphemes).toEqual(expect.arrayContaining([...cellPart.highlightsMorphemes ?? []]));
|
|
}
|
|
}
|
|
};
|