# 测试用例清单 来源:`tests/*.test.ts` 中 `suite()` / `test()` 声明。共 **16 个测试文件、116 条用例**。 ## 1. adapter.test.ts — Adapter Tests(6) | # | 用例 | 覆盖点 | |---|---|---| | 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 Handling(6) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(4) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(4) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(5) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(3) | # | 用例 | 覆盖点 | |---|---|---| | 26 | buildDedupOnlyPrompt 同时提供静态规则与自定义规则 | 去重 prompt 组装 | | 27 | 自定义规则时包含静态规则 | 去重 prompt 规则合并 | | 28 | buildKnownRulesSection 生成的规则包含全部 | 已知规则段完整性 | ## 7. diagnostics.test.ts — DiagnosticMarkers Tests(6) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(5) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(6) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(25) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(12) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(9) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(1) | # | 用例 | 覆盖点 | |---|---|---| | 91 | Full pipeline: linter check + merge | 全链路(linter + 合并) | ## 14. rule-filter.test.ts — Rule Filter Tests(15) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(4) | # | 用例 | 覆盖点 | |---|---|---| | 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 Tests(6) | # | 用例 | 覆盖点 | |---|---|---| | 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** |