/* 设置页的保存键统一叫「保存配置」并使用主按钮;主次层级与危险操作由浏览器和组件用例验收。 */ import { readdirSync, readFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { expect, it } from 'vitest'; import { createTranslator } from '../src/i18n'; /* 按钮文字写成 `{t('命名空间:键')}`,按中文资源还原成界面上的字。 */ const zh = createTranslator('zh-CN'); const shown = (label: string) => label.replace(/^\{t\('([^']+)'\)\}$/, (_all, key: string) => zh.t(key)); const dir = resolve(process.cwd(), 'src/react/settings'); const buttons = readdirSync(dir) .filter((name) => name.endsWith('.tsx')) .flatMap((name) => [...readFileSync(resolve(dir, name), 'utf8').matchAll(//g)] .map(([, tag = '']) => ({ name, tag, label: shown(tag.slice(tag.lastIndexOf('>') + 1).trim()) }))); it('保存键一律叫「保存配置」', () => { const saves = buttons.filter((button) => button.label.startsWith('保存')); expect(saves.length).toBeGreaterThan(0); expect(saves.filter((button) => button.label !== '保存配置').map((button) => `${button.name}: ${button.label}`)).toEqual([]); }); it('保存配置使用主按钮', () => { const saves = buttons.filter((button) => button.label === '保存配置'); expect(saves.filter((button) => /\bvariant=/.test(button.tag)).map((button) => button.name)).toEqual([]); });