- src/test 迁移至根目录 tests/(16 测试 + fixtures/manual),导入改为 ../src/ - 新增 tsconfig.test.json 独立编译测试;.vscode-test.mjs / package.json / .gitignore 同步 - 新增 tests/test-execution-log.md、tests/test-cases.md(116 用例清单) - 新增 tests/measure/measure-review-time.mjs + performance-comparison.md(提效测量) - 重命名 3 个中文报告文件为 demo-*-coverage-report.md - git rm --cached 解除 vsix 跟踪;README 标注演示视频进行中
73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
import * as assert from 'assert';
|
|
import { t, setLanguage, getLanguage, getMessageKeys, Language } from '../src/i18n/messages';
|
|
|
|
suite('I18n Tests', () => {
|
|
test('all message keys have values for all three languages', () => {
|
|
const languages: Language[] = ['zh-CN', 'en', 'ja'];
|
|
const keys = getMessageKeys();
|
|
|
|
for (const lang of languages) {
|
|
setLanguage(lang);
|
|
for (const key of keys) {
|
|
const result = t(key);
|
|
assert.ok(result, `Key "${key}" is empty for language "${lang}"`);
|
|
assert.notStrictEqual(result, key, `Key "${key}" has no translation for language "${lang}"`);
|
|
}
|
|
}
|
|
});
|
|
|
|
test('default language is zh-CN', () => {
|
|
setLanguage('zh-CN');
|
|
assert.strictEqual(getLanguage(), 'zh-CN');
|
|
});
|
|
|
|
test('setLanguage changes current language', () => {
|
|
setLanguage('en');
|
|
assert.strictEqual(getLanguage(), 'en');
|
|
setLanguage('ja');
|
|
assert.strictEqual(getLanguage(), 'ja');
|
|
setLanguage('zh-CN');
|
|
});
|
|
|
|
test('t() falls back to key when key does not exist', () => {
|
|
setLanguage('zh-CN');
|
|
const result = t('nonexistent.key');
|
|
assert.strictEqual(result, 'nonexistent.key');
|
|
});
|
|
|
|
test('t() returns zh-CN string in zh-CN language', () => {
|
|
setLanguage('zh-CN');
|
|
assert.strictEqual(t('review.noEditor'), '请先打开一个文件');
|
|
});
|
|
|
|
test('t() returns English string in en language', () => {
|
|
setLanguage('en');
|
|
assert.strictEqual(t('review.noEditor'), 'Please open a file first');
|
|
});
|
|
|
|
test('t() returns Japanese string in ja language', () => {
|
|
setLanguage('ja');
|
|
assert.strictEqual(t('review.noEditor'), '最初にファイルを開いてください');
|
|
});
|
|
|
|
test('t() with template variables', () => {
|
|
setLanguage('en');
|
|
assert.strictEqual(
|
|
t('export.saved', { 0: '/home/user/report.md' }),
|
|
'Report saved to /home/user/report.md'
|
|
);
|
|
});
|
|
|
|
test('t() with multiple template variables', () => {
|
|
setLanguage('zh-CN');
|
|
assert.strictEqual(
|
|
t('report.totalSummary', { 0: '10', 1: '3', 2: '5', 3: '2' }),
|
|
'总计: 10 | 错误: 3 | 警告: 5 | 建议: 2'
|
|
);
|
|
});
|
|
|
|
teardown(() => {
|
|
setLanguage('zh-CN');
|
|
});
|
|
});
|