- 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 标注演示视频进行中
82 lines
2.3 KiB
TypeScript
82 lines
2.3 KiB
TypeScript
import * as assert from 'assert';
|
|
import { resolveSqlFluffRange } from '../src/adapters/sqlfluff';
|
|
|
|
suite('SqlFluff Range Tests', () => {
|
|
function assertValid([sl, sp, el, ep]: [number, number, number, number]): void {
|
|
assert.ok(Number.isFinite(sl), 'startLine must be finite');
|
|
assert.ok(Number.isFinite(sp), 'startPos must be finite');
|
|
assert.ok(Number.isFinite(el), 'endLine must be finite');
|
|
assert.ok(Number.isFinite(ep), 'endPos must be finite');
|
|
assert.ok(sl >= 0, 'startLine must be >= 0');
|
|
assert.ok(sp >= 0, 'startPos must be >= 0');
|
|
assert.ok(el >= sl, 'endLine must be >= startLine');
|
|
}
|
|
|
|
test('full positions convert to zero-based range', () => {
|
|
const r = resolveSqlFluffRange({
|
|
start_line_no: 2,
|
|
start_line_pos: 4,
|
|
end_line_no: 2,
|
|
end_line_pos: 9,
|
|
code: 'JJ01',
|
|
description: 'x',
|
|
});
|
|
assert.deepStrictEqual(r, [1, 3, 1, 8]);
|
|
assertValid(r);
|
|
});
|
|
|
|
test('missing end positions fall back to start (comment JJ01 case)', () => {
|
|
const r = resolveSqlFluffRange({
|
|
start_line_no: 2,
|
|
start_line_pos: 1,
|
|
code: 'JJ01',
|
|
description: 'x',
|
|
});
|
|
assert.deepStrictEqual(r, [1, 0, 1, 0]);
|
|
assertValid(r);
|
|
});
|
|
|
|
test('legacy line_no/line_pos keys are honored', () => {
|
|
const r = resolveSqlFluffRange({
|
|
line_no: 3,
|
|
line_pos: 5,
|
|
code: 'LT12',
|
|
description: 'x',
|
|
});
|
|
assert.deepStrictEqual(r, [2, 4, 2, 4]);
|
|
assertValid(r);
|
|
});
|
|
|
|
test('null positions fall back to defaults', () => {
|
|
const r = resolveSqlFluffRange({
|
|
start_line_no: null,
|
|
start_line_pos: null,
|
|
end_line_no: null,
|
|
end_line_pos: null,
|
|
code: 'TMP',
|
|
description: 'x',
|
|
});
|
|
assert.deepStrictEqual(r, [0, 0, 0, 0]);
|
|
assertValid(r);
|
|
});
|
|
|
|
test('zero positions are clamped to valid values', () => {
|
|
const r = resolveSqlFluffRange({
|
|
start_line_no: 1,
|
|
start_line_pos: 0,
|
|
end_line_no: 1,
|
|
end_line_pos: 0,
|
|
code: 'TMP',
|
|
description: 'x',
|
|
});
|
|
assert.deepStrictEqual(r, [0, 0, 0, 0]);
|
|
assertValid(r);
|
|
});
|
|
|
|
test('missing all positions produce a safe zero range', () => {
|
|
const r = resolveSqlFluffRange({ code: 'PRS', description: 'x' });
|
|
assert.deepStrictEqual(r, [0, 0, 0, 0]);
|
|
assertValid(r);
|
|
});
|
|
});
|