Files
2026Technology-Competition/tests/sqlfluff-range.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

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);
});
});