Files
2026Technology-Competition/tests/fix-prompt.test.ts
T
范智鹏 e469554691 test: 新增 8 个测试文件 63 用例 + 覆盖率设施,行覆盖 42.58%→48.24%
- 新增 jsp-extractor/report/method-extractor/fix-prompt/registry/provider-chat/import-service/yaml-parser 测试
- .vscode-test.mjs 加 srcDir+coverage,package.json 加 test:coverage,产出 tests/coverage/(html)
- 修复 method-extractor java fallback 取错捕获组、mockDocument.getText 忽略 range
- 更新 tests/test-cases.md(24 文件 179 条)与 test-execution-log.md(覆盖率记录)
2026-08-27 22:54:00 +08:00

89 lines
2.9 KiB
TypeScript

import * as assert from 'assert';
import { setLanguage, getLanguage } from '../src/i18n/messages';
import {
buildFixSystemPrompt,
buildFixUserPrompt,
buildFixContext,
buildVerifySystemPrompt,
buildVerifyUserPrompt,
} from '../src/fix/fixPrompt';
suite('FixPrompt Tests', () => {
let orig: string;
setup(() => { orig = getLanguage(); });
teardown(() => { setLanguage(orig as 'zh-CN' | 'en' | 'ja'); });
test('buildFixSystemPrompt defaults to Chinese', () => {
setLanguage('zh-CN');
assert.match(buildFixSystemPrompt(), /资深代码修复专家/);
});
test('buildFixSystemPrompt returns English variant', () => {
setLanguage('en');
assert.match(buildFixSystemPrompt(), /senior code fixer/i);
});
test('buildFixSystemPrompt returns Japanese variant', () => {
setLanguage('ja');
assert.match(buildFixSystemPrompt(), /シニア/);
});
test('buildFixUserPrompt includes issue, message and context', () => {
const prompt = buildFixUserPrompt(
{ ruleId: 'eslint:eqeqeq', line: 3, message: 'Use ===' },
'1| var a = b == c;'
);
assert.match(prompt, /eslint:eqeqeq/);
assert.match(prompt, /Use ===/);
assert.match(prompt, /var a = b == c;/);
});
test('buildFixUserPrompt includes suggestion when present', () => {
const prompt = buildFixUserPrompt(
{ ruleId: 'r', line: 1, message: 'm', suggestion: 'use let' },
'ctx'
);
assert.match(prompt, /use let/);
});
test('buildFixUserPrompt omits suggestion when blank', () => {
setLanguage('zh-CN');
const prompt = buildFixUserPrompt(
{ ruleId: 'r', line: 1, message: 'm', suggestion: ' ' },
'ctx'
);
assert.ok(!prompt.includes('参考建议'));
});
test('buildFixContext windows around line with padding', () => {
const code = Array.from({ length: 20 }, (_, i) => `line-${i + 1}`).join('\n');
const ctx = buildFixContext(code, 10);
const lines = ctx.split('\n');
assert.ok(lines.length >= 13);
assert.match(lines[0], /^\s+5\| line-5/);
assert.match(lines[lines.length - 1], /line-17/);
});
test('buildFixContext clamps at document boundaries', () => {
const ctx = buildFixContext('a\nb\nc\n', 0);
const lines = ctx.split('\n');
assert.match(lines[0], /1\| a/);
assert.match(ctx, /3\| c/);
});
test('buildVerifySystemPrompt has language variants', () => {
setLanguage('zh-CN');
assert.match(buildVerifySystemPrompt(), /代码审查员/);
setLanguage('en');
assert.match(buildVerifySystemPrompt(), /code reviewer/i);
setLanguage('ja');
assert.match(buildVerifySystemPrompt(), /レビュアー/);
});
test('buildVerifyUserPrompt includes issue and code', () => {
const prompt = buildVerifyUserPrompt({ ruleId: 'r', line: 0, message: 'no-var' }, 'var x = 1;');
assert.match(prompt, /no-var/);
assert.match(prompt, /var x = 1;/);
});
});