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(覆盖率记录)
This commit is contained in:
范智鹏
2026-08-27 22:54:00 +08:00
parent 8244d2081d
commit e469554691
99 changed files with 44095 additions and 20 deletions
+1 -1
View File
@@ -199,7 +199,7 @@ function fallbackRegexSymbols(document: vscode.TextDocument): MethodSymbol[] {
pattern.lastIndex = 0;
let match: RegExpExecArray | null;
while ((match = pattern.exec(text)) !== null) {
const name = match[1] ?? match[2];
const name = match[2] ?? match[1];
if (!name) { continue; }
const start = document.positionAt(match.index);
const key = `${name}@${start.line}`;
+19 -14
View File
@@ -4,6 +4,19 @@ export function mockDocument(code: string, language: string, fileName?: string):
const lines = code.split('\n');
const uri = vscode.Uri.parse('untitled:virtual');
const ext = language === 'javascript' ? 'js' : language === 'typescript' ? 'ts' : language === 'css' ? 'css' : 'java';
const offsetAt = (p: vscode.Position): number => {
let offset = 0;
for (let i = 0; i < p.line; i++) offset += lines[i].length + 1;
return offset + p.character;
};
const positionAt = (offset: number): vscode.Position => {
let remaining = offset;
for (let i = 0; i < lines.length; i++) {
if (remaining <= lines[i].length) return new vscode.Position(i, remaining);
remaining -= lines[i].length + 1;
}
return new vscode.Position(lines.length - 1, lines[lines.length - 1].length);
};
return {
uri,
fileName: fileName ?? `untitled.${ext}`,
@@ -14,7 +27,10 @@ export function mockDocument(code: string, language: string, fileName?: string):
isClosed: false,
eol: vscode.EndOfLine.LF,
lineCount: lines.length,
getText: () => code,
getText: (range?: vscode.Range) => {
if (!range) { return code; }
return code.slice(offsetAt(range.start), offsetAt(range.end));
},
lineAt: (arg: number | vscode.Position) => {
const line = typeof arg === 'number' ? arg : arg.line;
const text = lines[line] ?? '';
@@ -27,19 +43,8 @@ export function mockDocument(code: string, language: string, fileName?: string):
isEmptyOrWhitespace: text.trim().length === 0,
};
},
offsetAt: (p: vscode.Position) => {
let offset = 0;
for (let i = 0; i < p.line; i++) offset += lines[i].length + 1;
return offset + p.character;
},
positionAt: (offset: number) => {
let remaining = offset;
for (let i = 0; i < lines.length; i++) {
if (remaining <= lines[i].length) return new vscode.Position(i, remaining);
remaining -= lines[i].length + 1;
}
return new vscode.Position(lines.length - 1, lines[lines.length - 1].length);
},
offsetAt,
positionAt,
getWordRangeAtPosition: () => undefined,
validateRange: (r: vscode.Range) => r,
validatePosition: (p: vscode.Position) => p,