import { describe, expect, test } from 'vitest'; import { parsePronouns } from '#shared/buildPronoun.ts'; import { loadGrammarTableVariantsConverter } from '~/src/data.ts'; import type { Config } from '~~/locale/config.ts'; import type { PronounData } from '~~/locale/data.ts'; import allLocales from '~~/locale/locales.ts'; import { loadSuml, loadTsv } from '~~/server/loader.ts'; import { checkContainsValidMorphemes } from '~~/test/shared/language/grammarTables.ts'; describe.each(allLocales)('config for $code', async ({ code }) => { const config = await loadSuml(`locale/${code}/config.suml`); const pronounsRaw = await loadTsv>(`locale/${code}/pronouns/pronouns.tsv`); const pronouns = parsePronouns(config, pronounsRaw); const variantsFromBaseConverter = await loadGrammarTableVariantsConverter(code); test('pronouns.generator.startPronoun must be a valid pronoun', () => { if (!config.pronouns.enabled || !config.pronouns.generator.enabled) { return; } expect(pronouns[config.pronouns.generator.startPronoun]).toBeDefined(); }); test('pronouns.null.morphemes contain valid morphemes', () => { if (!config.pronouns.null || config.pronouns.null.morphemes === undefined) { return; } expect(config.pronouns.morphemes).toEqual(expect.arrayContaining(Object.keys(config.pronouns.null.morphemes))); }); test('pronouns.null.emoji contain valid morphemes', () => { if (!config.pronouns.emoji) { return; } expect(config.pronouns.morphemes).toEqual(expect.arrayContaining(Object.keys(config.pronouns.emoji.morphemes))); }); test('pronouns.grammarTables contain valid morphemes', () => { if (!config.pronouns.enabled || !config.pronouns.grammarTables) { return; } checkContainsValidMorphemes(config.pronouns.grammarTables, variantsFromBaseConverter, config.pronouns.morphemes); }); test('profile.defaultWords has four columns', () => { if (!config.profile.editorEnabled) { return; } expect(config.profile.defaultWords).toHaveLength(4); }); });