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:
@@ -0,0 +1,85 @@
|
||||
import * as assert from 'assert';
|
||||
import * as vscode from 'vscode';
|
||||
import * as fs from 'fs';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
import { getProviders, invalidateProviderCache, getProviderById, getAllProviderMeta } from '../src/ai/registry';
|
||||
import type { ProviderConfig } from '../src/ai/types';
|
||||
|
||||
function cfg(overrides: Partial<ProviderConfig>): ProviderConfig {
|
||||
return {
|
||||
id: 'x',
|
||||
name: 'X',
|
||||
protocol: 'openai-compatible',
|
||||
defaultBaseUrl: 'https://api.x.test/v1',
|
||||
models: ['m1'],
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function writeTempProviders(providers: ProviderConfig[]): string {
|
||||
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'reg-test-'));
|
||||
fs.writeFileSync(path.join(dir, 'providers.json'), JSON.stringify({ providers }), 'utf8');
|
||||
return dir;
|
||||
}
|
||||
|
||||
suite('Provider Registry Tests', () => {
|
||||
setup(() => invalidateProviderCache());
|
||||
|
||||
test('returns empty when no extension uri', () => {
|
||||
assert.deepStrictEqual(getProviders(), []);
|
||||
});
|
||||
|
||||
test('loads builtin providers from extension providers.json', () => {
|
||||
const dir = writeTempProviders([cfg({ id: 'a', name: 'A' })]);
|
||||
const uri = vscode.Uri.file(dir);
|
||||
const providers = getProviders(uri);
|
||||
assert.strictEqual(providers.length, 1);
|
||||
assert.strictEqual(providers[0].id, 'a');
|
||||
fs.rmSync(dir, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
test('caches providers across calls', () => {
|
||||
const dir = writeTempProviders([cfg({ id: 'b', name: 'B' })]);
|
||||
const uri = vscode.Uri.file(dir);
|
||||
const first = getProviders(uri);
|
||||
fs.rmSync(dir, { recursive: true, force: true });
|
||||
const second = getProviders(uri);
|
||||
assert.strictEqual(second, first);
|
||||
});
|
||||
|
||||
test('invalidateProviderCache forces reload', () => {
|
||||
const dir = writeTempProviders([cfg({ id: 'c', name: 'C' })]);
|
||||
const uri = vscode.Uri.file(dir);
|
||||
getProviders(uri);
|
||||
invalidateProviderCache();
|
||||
assert.strictEqual(getProviders(uri).length, 1);
|
||||
fs.rmSync(dir, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
test('returns empty for missing or invalid providers.json', () => {
|
||||
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'reg-test2-'));
|
||||
const uri = vscode.Uri.file(dir);
|
||||
assert.deepStrictEqual(getProviders(uri), []);
|
||||
fs.writeFileSync(path.join(dir, 'providers.json'), 'not json', 'utf8');
|
||||
invalidateProviderCache();
|
||||
assert.deepStrictEqual(getProviders(uri), []);
|
||||
fs.rmSync(dir, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
test('getProviderById finds or misses', () => {
|
||||
const dir = writeTempProviders([cfg({ id: 'x', name: 'X', models: ['m'] })]);
|
||||
const uri = vscode.Uri.file(dir);
|
||||
assert.strictEqual(getProviderById(uri, 'x')?.name, 'X');
|
||||
assert.strictEqual(getProviderById(uri, 'nope'), undefined);
|
||||
fs.rmSync(dir, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
test('getAllProviderMeta returns name and models', () => {
|
||||
const dir = writeTempProviders([cfg({ id: 'p1', name: 'P1', models: ['a', 'b'] })]);
|
||||
const uri = vscode.Uri.file(dir);
|
||||
const meta = getAllProviderMeta(uri);
|
||||
assert.deepStrictEqual(meta.p1, { name: 'P1', models: ['a', 'b'] });
|
||||
fs.rmSync(dir, { recursive: true, force: true });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user