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:
@@ -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
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user