- 新增 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(覆盖率记录)
89 lines
2.9 KiB
TypeScript
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;/);
|
|
});
|
|
});
|