Files
范智鹏 e9762bfbe1 test: 目录对齐赛道二成果物规范(tests/ 迁移+实验报告+提效测量脚本)
- src/test 迁移至根目录 tests/(16 测试 + fixtures/manual),导入改为 ../src/
- 新增 tsconfig.test.json 独立编译测试;.vscode-test.mjs / package.json / .gitignore 同步
- 新增 tests/test-execution-log.md、tests/test-cases.md(116 用例清单)
- 新增 tests/measure/measure-review-time.mjs + performance-comparison.md(提效测量)
- 重命名 3 个中文报告文件为 demo-*-coverage-report.md
- git rm --cached 解除 vsix 跟踪;README 标注演示视频进行中
2026-08-26 19:17:44 +08:00

67 lines
2.6 KiB
TypeScript

import * as assert from 'assert';
import * as vscode from 'vscode';
import { toVscodeDiagnostics } from '../src/diagnostics/diagnosticMarkers';
import type { LinterDiagnostic } from '../src/types';
suite('DiagnosticMarkers Tests', () => {
test('toVscodeDiagnostics maps severity correctly', () => {
const diags: LinterDiagnostic[] = [
{ severity: 'error', ruleId: 'eslint:no-unused', message: 'unused', range: new vscode.Range(0, 0, 0, 5) },
{ severity: 'warning', ruleId: 'pmd:avoid-duplicate', message: 'duplicate', range: new vscode.Range(1, 0, 1, 3) },
{ severity: 'info', ruleId: 'custom:no-console', message: 'console', range: new vscode.Range(2, 0, 2, 4) },
];
const result = toVscodeDiagnostics(diags);
assert.strictEqual(result[0].severity, vscode.DiagnosticSeverity.Error);
assert.strictEqual(result[1].severity, vscode.DiagnosticSeverity.Warning);
assert.strictEqual(result[2].severity, vscode.DiagnosticSeverity.Information);
});
test('toVscodeDiagnostics preserves range', () => {
const range = new vscode.Range(3, 2, 5, 10);
const diags: LinterDiagnostic[] = [
{ severity: 'error', ruleId: 'eslint:no-var', message: 'no var', range },
];
const result = toVscodeDiagnostics(diags);
assert.ok(result[0].range.isEqual(range));
});
test('toVscodeDiagnostics prefixes message with plugin and linter', () => {
const diags: LinterDiagnostic[] = [
{ severity: 'warning', ruleId: 'eslint:no-console', message: 'avoid console', range: new vscode.Range(0, 0, 0, 1) },
];
const result = toVscodeDiagnostics(diags);
assert.strictEqual(result[0].message, '[Code Purifier · eslint] no-console: avoid console');
});
test('toVscodeDiagnostics handles ruleId without linter prefix', () => {
const diags: LinterDiagnostic[] = [
{ severity: 'warning', ruleId: 'custom-rule', message: 'custom message', range: new vscode.Range(0, 0, 0, 1) },
];
const result = toVscodeDiagnostics(diags);
assert.strictEqual(result[0].message, '[Code Purifier] custom-rule: custom message');
});
test('toVscodeDiagnostics sets source and code for quick fix hover', () => {
const diags: LinterDiagnostic[] = [
{ severity: 'warning', ruleId: 'eslint:no-var', message: 'no var', range: new vscode.Range(0, 0, 0, 1) },
];
const result = toVscodeDiagnostics(diags);
assert.strictEqual(result[0].source, 'Code Purifier');
assert.strictEqual(result[0].code, 'eslint:no-var');
});
test('toVscodeDiagnostics returns empty array for empty input', () => {
assert.deepStrictEqual(toVscodeDiagnostics([]), []);
});
});