mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-08-03 11:07:00 -04:00
50 lines
2.1 KiB
TypeScript
50 lines
2.1 KiB
TypeScript
import { expect } from 'vitest';
|
|
|
|
import type { ExampleValues } from '~/src/language/examples.ts';
|
|
import { expandVariantsForSection } from '~/src/language/grammarTables.ts';
|
|
import type {
|
|
CellPart,
|
|
GrammarTableDefinition,
|
|
GrammarTablesDefinition, VariantsFromBaseConverter,
|
|
} from '~/src/language/grammarTables.ts';
|
|
import { MorphemeValues } from '~/src/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 ?? []]));
|
|
}
|
|
}
|
|
};
|