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(覆盖率记录)
This commit is contained in:
范智鹏
2026-08-27 22:54:00 +08:00
parent 8244d2081d
commit e469554691
99 changed files with 44095 additions and 20 deletions
+113 -2
View File
@@ -1,6 +1,6 @@
# 测试用例清单
来源:`tests/*.test.ts``suite()` / `test()` 声明。共 **16 个测试文件、116 条用例**
来源:`tests/*.test.ts``suite()` / `test()` 声明。共 **24 个测试文件、179 条用例**
## 1. adapter.test.ts — Adapter Tests6
@@ -198,6 +198,109 @@
| 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 跳过 |
## 统计
| 文件 | 用例数 |
@@ -218,4 +321,12 @@
| rule-filter.test.ts | 15 |
| sqlfluff-prs.test.ts | 4 |
| sqlfluff-range.test.ts | 6 |
| **合计** | **116** |
| 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** |