Files
2026Technology-Competition/tests/test-cases.md
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

222 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试用例清单
来源:`tests/*.test.ts``suite()` / `test()` 声明。共 **16 个测试文件、116 条用例**
## 1. adapter.test.ts — Adapter Tests6
| # | 用例 | 覆盖点 |
|---|---|---|
| 1 | ESLintAdapter has correct id and languages | 适配器标识与支持语言 |
| 2 | StylelintAdapter has correct id and languages | 适配器标识与支持语言 |
| 3 | ESLintAdapter check returns AdapterResult structure | 静态分析返回结构 |
| 4 | ESLintAdapter surfaces octal literal as eslint:parse-error | 八进制字面量解析错误上报 |
| 5 | ESLintAdapter surfaces \8 escape as eslint:parse-error | 非法转义解析错误上报 |
| 6 | ESLintAdapter parses JSX in .js without parse error | JSX 语法解析 |
## 2. ai-empty-response.test.ts — AI Empty Response Handling6
| # | 用例 | 覆盖点 |
|---|---|---|
| 7 | parseJsonResponse throws empty-response error on blank input | 空响应识别 |
| 8 | parseJsonResponse parses valid JSON normally | 正常 JSON 解析 |
| 9 | chatWithRetry retries once on EmptyContentError | 空内容自动重试 |
| 10 | chatWithRetry propagates error when retry also returns empty | 重试仍空则抛错 |
| 11 | chatWithRetry does not retry on non-empty-content errors | 非空内容错误不重试 |
| 12 | openai-compatible reports max_tokens truncation clearly | token 截断提示 |
## 3. ai-fix-engine.test.ts — AI FixEngine Tests4
| # | 用例 | 覆盖点 |
|---|---|---|
| 13 | aiFixDiagnostic applies AI fix and converges | AI 修复收敛 |
| 14 | aiFixDiagnostic returns ai-match-failed when originalText not found | 原文未匹配 |
| 15 | aiFixDiagnostic returns ai-no-fix when AI provides empty fix | AI 无修复 |
| 16 | aiFixDiagnostic retries until issue resolved within maxIterations | 迭代上限内收敛 |
## 4. config.test.ts — Config Tests4
| # | 用例 | 覆盖点 |
|---|---|---|
| 17 | getAIConfig returns default values | AI 配置默认值 |
| 18 | AI individual getters return defaults | 单项配置 getter |
| 19 | getLinterForLanguage returns configured linter | 语言→linter 映射 |
| 20 | getFixMaxIterations returns default | 修复迭代默认值 |
## 5. customFixEngine.test.ts — Custom FixEngine Tests5
| # | 用例 | 覆盖点 |
|---|---|---|
| 21 | aiFixReviewIssue applies AI fix and converges after verify | 自定义规则 AI 修复收敛 |
| 22 | aiFixReviewIssue returns ai-match-failed when originalText not found | 原文未匹配 |
| 23 | aiFixReviewIssue retries until verify passes within maxIterations | 验证驱动重试 |
| 24 | aiFixReviewIssue accepts last fix when verify never passes | 验证不过时接受最后修复 |
| 25 | aiFixReviewIssue retries empty fix once then fails with ai-no-fix | 空修复重试一次后失败 |
## 6. dedup-prompt.test.ts — Dedup Prompt Tests3
| # | 用例 | 覆盖点 |
|---|---|---|
| 26 | buildDedupOnlyPrompt 同时提供静态规则与自定义规则 | 去重 prompt 组装 |
| 27 | 自定义规则时包含静态规则 | 去重 prompt 规则合并 |
| 28 | buildKnownRulesSection 生成的规则包含全部 | 已知规则段完整性 |
## 7. diagnostics.test.ts — DiagnosticMarkers Tests6
| # | 用例 | 覆盖点 |
|---|---|---|
| 29 | toVscodeDiagnostics maps severity correctly | 严重级别映射 |
| 30 | toVscodeDiagnostics preserves range | 范围保留 |
| 31 | toVscodeDiagnostics prefixes message with plugin and linter | 消息前缀 |
| 32 | toVscodeDiagnostics handles ruleId without linter prefix | 无前缀 ruleId |
| 33 | toVscodeDiagnostics sets source and code for quick fix hover | hover 修复来源/代码 |
| 34 | toVscodeDiagnostics returns empty array for empty input | 空输入 |
## 8. fixEngine.test.ts — FixEngine Tests5
| # | 用例 | 覆盖点 |
|---|---|---|
| 35 | ESLint adapter attaches fix object for autofixable issues | 可自动修复诊断挂 fix |
| 36 | fixDiagnostic multi-round convergence produces applied fixes | 多轮修复收敛 |
| 37 | fixDiagnostic returns not-autofixable for non-fixable rule | 不可修复规则 |
| 38 | fixDiagnostic no-change returns no-change | 无变化场景 |
| 39 | fixDiagnostic fixes only the targeted issue, not adjacent same-rule instance | 定点修复不误伤相邻同类 |
## 9. fixSession.test.ts — FixSession Tests6
| # | 用例 | 覆盖点 |
|---|---|---|
| 40 | add/get/has roundtrip | 会话读写 |
| 41 | get returns undefined for missing key | 缺失键 |
| 42 | getEntries filters per uri | 按 uri 过滤 |
| 43 | clear removes entries for uri only | 按 uri 清理 |
| 44 | recordFixes merges multi-round fixes under same key | 多轮修复合并 |
| 45 | undo restores original text via workspace edit | 撤销恢复原文 |
## 10. import-dedup.test.ts — Import Dedup Tests25
| # | 用例 | 覆盖点 |
|---|---|---|
| 46 | 重复规则:全局检查并标注 | 全局重复检查 |
| 47 | 全局 exact:全部标注 | exact 去重 |
| 48 | 全局 overlap:全部检查并标注 | overlap 去重 |
| 49 | 跨规则 exact 标注(overlap 归 none | 跨规则 exact 归属 |
| 50 | 用户指定 exact 后取消标注 | 用户决策 exact |
| 51 | 用户标注 overlap 将标注加 # 前缀 | overlap 标注头 |
| 52 | 用户标注 none 加 # 前缀 | none 标注头 |
| 53 | 已标注 duplicateLevel/duplicateOf/duplicateReason 剔出标注 | 已标注剔除 |
| 54 | 标注规则 duplicateReason 标注头回填原由 | 原因回填 |
| 55 | 编辑 description 确认 YAML 使用该值 | description 编辑 |
| 56 | 编辑 severity 确认 YAML 使用该 severity | severity 编辑 |
| 57 | 编辑 languages 确认 YAML 有 languages | languages 编辑 |
| 58 | 编辑切换为标注、标注转为编辑值 | 编辑/标注互转 |
| 59 | 无编辑时保留原始 yamlContent | 原始内容保留 |
| 60 | severity 缺失默认为 warning | severity 默认 |
| 61 | severity 非法值默认为 warning | severity 兜底 |
| 62 | id 缺失生成 rule-N | id 自动命名 |
| 63 | 多个 id 缺失依次 rule-1, rule-2... | 递增命名 |
| 64 | description 缺失时使用 message(中文存在) | 双语回退 |
| 65 | message 缺失时使用 description(中文存在) | 双语回退 |
| 66 | description 与 message 同时缺失时兜底 | 全缺失兜底 |
| 67 | 重复规则的重复校验回归 | 去重回归 |
| 68 | id 带引号、字段带引号保留 id | 引号 id |
| 69 | scalar 字段带引号、保留引号 | 引号 scalar |
## 11. merger.test.ts — Merger Tests12
| # | 用例 | 覆盖点 |
|---|---|---|
| 70 | mergeResults counts correctly | 计数正确 |
| 71 | mergeResults marks degraded when AI fails | AI 失败降级 |
| 72 | mergeResults sorts diagnostics by severity then line | 排序 |
| 73 | mergeResults marks fixable only diagnostics with fix object | 可修复标记 |
| 74 | mergeResults converts aiFindings line to 0-based | 行号 0 基化 |
| 75 | mergeResults pairs translations by originalRuleId not index | 按规则 id 配对翻译 |
| 76 | mergeResults handles duplicate ruleId translations in order | 重复 id 有序 |
| 77 | mergeResults matches translations by normalized ruleId when prefix missing | 缺前缀归一化匹配 |
| 78 | mergeResults matches translations by normalized ruleId with slash variant | 斜杠变体匹配 |
| 79 | mergeResults prefers exact ruleId match over normalized | 精确匹配优先 |
| 80 | mergeResults computes aiFixableLinterIndices excluding native fix and sqlfluff | AI 可修复索引 |
| 81 | mergeResults aiFixableLinterIndices empty when AI unavailable | AI 不可用置空 |
## 12. messages.test.ts — I18n Tests9
| # | 用例 | 覆盖点 |
|---|---|---|
| 82 | all message keys have values for all three languages | 三语 key 完整 |
| 83 | default language is zh-CN | 默认语言 |
| 84 | setLanguage changes current language | 语言切换 |
| 85 | t() falls back to key when key does not exist | 缺失 key 回退 |
| 86 | t() returns zh-CN string in zh-CN language | 中文翻译 |
| 87 | t() returns English string in en language | 英文翻译 |
| 88 | t() returns Japanese string in ja language | 日文翻译 |
| 89 | t() with template variables | 模板变量 |
| 90 | t() with multiple template variables | 多模板变量 |
## 13. pipeline.test.ts — Pipeline Tests1
| # | 用例 | 覆盖点 |
|---|---|---|
| 91 | Full pipeline: linter check + merge | 全链路(linter + 合并) |
## 14. rule-filter.test.ts — Rule Filter Tests15
| # | 用例 | 覆盖点 |
|---|---|---|
| 92 | 规则匹配当前语言 | 语言匹配 |
| 93 | 规则未匹配被过滤 | 不匹配过滤 |
| 94 | 规则为空:全部保留 | 空规则集 |
| 95 | 规则缺失:全部保留 | 缺失过滤 |
| 96 | 规则按语言匹配后去重 | 去重 |
| 97 | 规则未匹配语言则去除 | 语言不匹配去除 |
| 98 | 规则为空时去重 | 空集去重 |
| 99 | 规则 + 语言映射匹配时过滤结果优先 | 优先级 |
| 100 | typescriptreact 同源映射到 typescript | TSX 映射 |
| 101 | plsql 同源映射到 sql | PL/SQL 映射 |
| 102 | JSP 映射 java 规则 | JSP→Java |
| 103 | JSP 不映射 css 规则 | JSP→CSS 排除 |
| 104 | 普通 HTML 触发 JSP 过滤 java 规则 | HTML→JSP |
| 105 | 全部过滤触发 skippedRequestA=true | 全过滤标记 |
| 106 | 部分过滤触发 skippedRequestA=false | 部分过滤标记 |
## 15. sqlfluff-prs.test.ts — SqlFluff PRS Tests4
| # | 用例 | 覆盖点 |
|---|---|---|
| 107 | buildPRSMessage extracts fragment from description | PRS 片段提取 |
| 108 | buildPRSMessage flattens newlines in fragment | 换行压平 |
| 109 | buildPRSMessage truncates long fragments | 长片段截断 |
| 110 | buildPRSMessage falls back to description when pattern missing | 无匹配回退 |
## 16. sqlfluff-range.test.ts — SqlFluff Range Tests6
| # | 用例 | 覆盖点 |
|---|---|---|
| 111 | full positions convert to zero-based range | 完整位置 0 基化 |
| 112 | missing end positions fall back to start (comment JJ01 case) | 缺终点回退(JJ01 |
| 113 | legacy line_no/line_pos keys are honored | 旧版 key 兼容 |
| 114 | null positions fall back to defaults | null 兜底 |
| 115 | zero positions are clamped to valid values | 零值钳制 |
| 116 | missing all positions produce a safe zero range | 全缺失安全范围 |
## 统计
| 文件 | 用例数 |
|---|---|
| adapter.test.ts | 6 |
| ai-empty-response.test.ts | 6 |
| ai-fix-engine.test.ts | 4 |
| config.test.ts | 4 |
| customFixEngine.test.ts | 5 |
| dedup-prompt.test.ts | 3 |
| diagnostics.test.ts | 6 |
| fixEngine.test.ts | 5 |
| fixSession.test.ts | 6 |
| import-dedup.test.ts | 25 |
| merger.test.ts | 12 |
| messages.test.ts | 9 |
| pipeline.test.ts | 1 |
| rule-filter.test.ts | 15 |
| sqlfluff-prs.test.ts | 4 |
| sqlfluff-range.test.ts | 6 |
| **合计** | **116** |