PronounsPage/test/language/grammarTables.ts
2025-05-01 11:47:47 +02:00

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 ?? []]));
}
}
};