Files
2026Technology-Competition/tests/test-cases.md
T
范智鹏 e469554691 test: 新增 8 个测试文件 63 用例 + 覆盖率设施,行覆盖 42.58%→48.24%
- 新增 jsp-extractor/report/method-extractor/fix-prompt/registry/provider-chat/import-service/yaml-parser 测试
- .vscode-test.mjs 加 srcDir+coverage,package.json 加 test:coverage,产出 tests/coverage/(html)
- 修复 method-extractor java fallback 取错捕获组、mockDocument.getText 忽略 range
- 更新 tests/test-cases.md(24 文件 179 条)与 test-execution-log.md(覆盖率记录)
2026-08-27 22:54:00 +08:00

333 lines
16 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()` 声明。共 **24 个测试文件、179 条用例**
## 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 | 全缺失安全范围 |
## 17. jsp-extractor.test.ts — JspExtractor Tests9
| # | 用例 | 覆盖点 |
|---|---|---|
| 117 | extracts script block as javascript | script 块提取 |
| 118 | extracts style block as css | style 块提取 |
| 119 | extracts statement scriptlet with line offset | 语句型 scriptlet |
| 120 | extracts declaration scriptlet | 声明型 scriptlet |
| 121 | extracts expression scriptlet | 表达式型 scriptlet |
| 122 | skips directives and comments | 指令/注释跳过 |
| 123 | reports sourceStart/sourceEnd positions | 源区间定位 |
| 124 | returns empty array for plain html | 纯 HTML 无段落 |
| 125 | collects script, style and scriptlet sections | 多段落收集 |
## 18. report.test.ts — Report Tests7
| # | 用例 | 覆盖点 |
|---|---|---|
| 126 | renders header metadata | 报告头元数据 |
| 127 | renders empty report with no-problems banner | 空报告无问题提示 |
| 128 | renders linter diagnostics with severity emoji and suggestion | 严重级 emoji 与建议 |
| 129 | renders custom rule diagnostics | 自定义规则段 |
| 130 | renders ai findings with category and suggestion | AI 发现段 |
| 131 | renders degraded banner and errors section | 降级横幅与错误区 |
| 132 | omits tools line when no adapters | 无工具时不显示 |
## 19. method-extractor.test.ts — MethodExtractor Tests9
| # | 用例 | 覆盖点 |
|---|---|---|
| 133 | fallback regex finds js function declarations and arrow functions | JS 方法兜底正则 |
| 134 | fallback regex finds java methods | Java 方法兜底正则 |
| 135 | fallback regex returns empty for unsupported language | 不支持语言返回空 |
| 136 | extractMethodScope returns code, signature and callers | 方法作用域+调用者 |
| 137 | extractMethodScope identifies callees | 被调用者识别 |
| 138 | expandToMethodBody ignores braces inside strings and comments | 括号配对(跳过字符串/注释) |
| 139 | extractSignature strips leading comments | 签名去注释 |
| 140 | inferRole maps getter, process and generic names | 角色推断 |
| 141 | extractMethodScope returns null when range matches no method | 无命中返回 null |
## 20. fix-prompt.test.ts — FixPrompt Tests10
| # | 用例 | 覆盖点 |
|---|---|---|
| 142 | buildFixSystemPrompt defaults to Chinese | 中文系统提示词 |
| 143 | buildFixSystemPrompt returns English variant | 英文系统提示词 |
| 144 | buildFixSystemPrompt returns Japanese variant | 日文系统提示词 |
| 145 | buildFixUserPrompt includes issue, message and context | 用户提示词组装 |
| 146 | buildFixUserPrompt includes suggestion when present | 建议追加 |
| 147 | buildFixUserPrompt omits suggestion when blank | 空建议省略 |
| 148 | buildFixContext windows around line with padding | 上下文窗口+对齐 |
| 149 | buildFixContext clamps at document boundaries | 边界钳制 |
| 150 | buildVerifySystemPrompt has language variants | 校验系统提示词 |
| 151 | buildVerifyUserPrompt includes issue and code | 校验用户提示词 |
## 21. registry.test.ts — Provider Registry Tests7
| # | 用例 | 覆盖点 |
|---|---|---|
| 152 | returns empty when no extension uri | 无 URI 返回空 |
| 153 | loads builtin providers from extension providers.json | 内置 Provider 加载 |
| 154 | caches providers across calls | 注册表缓存 |
| 155 | invalidateProviderCache forces reload | 缓存失效 |
| 156 | returns empty for missing or invalid providers.json | 缺失/非法文件 |
| 157 | getProviderById finds or misses | 按 ID 查询 |
| 158 | getAllProviderMeta returns name and models | Provider 元数据 |
## 22. provider-chat.test.ts — Provider Chat Tests11
| # | 用例 | 覆盖点 |
|---|---|---|
| 159 | openai chat returns content with bearer auth | OpenAI 兼容协议成功 |
| 160 | openai 401 throws invalid key error | 401 无效密钥 |
| 161 | openai truncation raises EmptyContentError | token 截断空响应 |
| 162 | openai empty content raises EmptyContentError | 空内容错误 |
| 163 | openai other status throws | 其他状态报错 |
| 164 | gemini chat returns text | Gemini 协议成功 |
| 165 | gemini empty content raises EmptyContentError | Gemini 空响应 |
| 166 | gemini non-ok throws | Gemini 报错 |
| 167 | claude chat returns text with api key header | Claude 协议成功 |
| 168 | claude 401 throws | Claude 401 |
| 169 | claude empty content raises EmptyContentError | Claude 空响应 |
## 23. import-service.test.ts — ImportService Tests7
| # | 用例 | 覆盖点 |
|---|---|---|
| 170 | parseImportableYaml handles arrays and quoted ids | YAML 数组/引号 |
| 171 | parseImportableYaml fills message from description and vice versa | 字段互填 |
| 172 | buildFinalYaml uses edited rules when present | 编辑规则分支 |
| 173 | buildFinalYaml comments exact duplicates and strips duplicate metadata | 精确重复注释 |
| 174 | buildFinalYaml keeps all when no overrides | 无覆盖全保留 |
| 175 | applyConversion writes final yaml to nested target path | 写入目标文件 |
| 176 | convert throws for unsupported extension | 不支持格式报错 |
## 24. yaml-parser.test.ts — YamlParser Tests3
| # | 用例 | 覆盖点 |
|---|---|---|
| 177 | returns empty when rules dir missing | 目录缺失 |
| 178 | loads rules from yaml files with severity normalization | 规则加载与严重级归一 |
| 179 | skips incomplete rules and non-yaml files | 不完整规则/非 yaml 跳过 |
## 统计
| 文件 | 用例数 |
|---|---|
| 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 |
| jsp-extractor.test.ts | 9 |
| report.test.ts | 7 |
| method-extractor.test.ts | 9 |
| fix-prompt.test.ts | 10 |
| registry.test.ts | 7 |
| provider-chat.test.ts | 11 |
| import-service.test.ts | 7 |
| yaml-parser.test.ts | 3 |
| **合计** | **179** |