Files
2026Technology-Competition/tests/fixSession.test.ts
T
范智鹏 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

96 lines
3.8 KiB
TypeScript

import * as assert from 'assert';
import * as vscode from 'vscode';
import { FixSessionManager } from '../src/fix/fixSession';
suite('FixSession Tests', () => {
const uri = vscode.Uri.file('C:/fake/project/src/app.js');
test('add/get/has roundtrip', () => {
const session = new FixSessionManager();
const key = 'eslint:no-extra-semi@5';
session.add(uri, {
key,
ruleId: 'eslint:no-extra-semi',
line: 5,
fixes: [{ originalText: 'var x = 1;;', newText: 'var x = 1;', line: 5 }],
source: 'linter',
});
assert.strictEqual(session.has(uri, key), true);
const entry = session.get(uri, key);
assert.ok(entry);
assert.strictEqual(entry!.ruleId, 'eslint:no-extra-semi');
assert.strictEqual(entry!.line, 5);
assert.strictEqual(entry!.fixes.length, 1);
});
test('get returns undefined for missing key', () => {
const session = new FixSessionManager();
assert.strictEqual(session.get(uri, 'eslint:x@1'), undefined);
assert.strictEqual(session.has(uri, 'eslint:x@1'), false);
});
test('getEntries filters per uri', () => {
const session = new FixSessionManager();
const other = vscode.Uri.file('C:/fake/project/src/other.js');
session.add(uri, { key: 'a@1', ruleId: 'a', line: 1, fixes: [{ originalText: '1', newText: '2', line: 1 }], source: 'linter' });
session.add(uri, { key: 'b@2', ruleId: 'b', line: 2, fixes: [{ originalText: '3', newText: '4', line: 2 }], source: 'linter' });
session.add(other, { key: 'c@3', ruleId: 'c', line: 3, fixes: [{ originalText: '5', newText: '6', line: 3 }], source: 'linter' });
const entries = session.getEntries(uri);
assert.strictEqual(entries.length, 2);
assert.deepStrictEqual(entries.map(e => e.ruleId).sort(), ['a', 'b']);
});
test('clear removes entries for uri only', () => {
const session = new FixSessionManager();
const other = vscode.Uri.file('C:/fake/project/src/other.js');
session.add(uri, { key: 'a@1', ruleId: 'a', line: 1, fixes: [{ originalText: '1', newText: '2', line: 1 }], source: 'linter' });
session.add(other, { key: 'c@3', ruleId: 'c', line: 3, fixes: [{ originalText: '5', newText: '6', line: 3 }], source: 'linter' });
session.clear(uri);
assert.strictEqual(session.getEntries(uri).length, 0);
assert.strictEqual(session.getEntries(other).length, 1);
});
test('recordFixes merges multi-round fixes under same key', () => {
const session = new FixSessionManager();
session.recordFixes(uri, 'eslint:no-extra-semi', 5, [
{ originalText: ';;', newText: ';', line: 5 },
]);
session.recordFixes(uri, 'eslint:no-extra-semi', 5, [
{ originalText: ';', newText: '', line: 5 },
]);
const entry = session.get(uri, 'eslint:no-extra-semi@5');
assert.ok(entry);
assert.strictEqual(entry!.fixes.length, 2);
});
test('undo restores original text via workspace edit', async () => {
const doc = await vscode.workspace.openTextDocument({
content: 'var x = 1;;\nvar y = 2;\n',
language: 'javascript',
});
const session = new FixSessionManager();
const key = session.recordFixes(doc.uri, 'eslint:no-extra-semi', 0, [
{ originalText: ';;', newText: ';', line: 0 },
]);
const edit = new vscode.WorkspaceEdit();
edit.replace(doc.uri, new vscode.Range(0, 0, 1, 0), 'var x = 1;\n');
const applied = await vscode.workspace.applyEdit(edit);
assert.ok(applied);
const docAfterFix = await vscode.workspace.openTextDocument(doc.uri);
assert.strictEqual(docAfterFix.getText(), 'var x = 1;\nvar y = 2;\n');
const undone = await session.undo(docAfterFix, key);
assert.ok(undone);
const docAfterUndo = await vscode.workspace.openTextDocument(doc.uri);
assert.strictEqual(docAfterUndo.getText(), 'var x = 1;;\nvar y = 2;\n');
assert.strictEqual(session.has(doc.uri, key), false);
});
});