# 改进 auto-group-tests.js - 实现计划

## 任务概述
改进 `auto-group-tests.js` 脚本，实现两个主要功能：
1. 对于测试用例名格式为`前缀+数字编号`的测试用例，按相同命名前缀分组
2. 在扫描和分组阶段，先去除所有已有的 describe 分组，获取所有测试后再重新分组

## [x] 任务 1: 改进测试文件解析，支持去除已有分组
- **Priority**: P0
- **Depends On**: None
- **Description**: 
  - 修改解析逻辑，能够识别并跳过已有的 `describe` 块
  - 直接提取所有 `test()` 块，无论它们是否在某个 `describe` 块内部
  - 保持正确的大括号计数和测试用例边界识别
- **Success Criteria**:
  - 无论文件是否已有 describe 分组，都能正确提取所有 test 用例
  - 测试用例内容完整提取
- **Test Requirements**:
  - `programmatic` TR-1.1: 能从已有 describe 分组的文件中正确提取所有 test 用例 ✓
  - `programmatic` TR-1.2: 提取的测试用例数量正确 ✓ (130个)

## [x] 任务 2: 实现前缀+数字编号的测试用例识别
- **Priority**: P0
- **Depends On**: Task 1
- **Description**: 
  - 识别测试用例名中的模式：`前缀 + 数字编号`
  - 例如：`should handle bracket 1`、`should handle switch 2` 等
  - 支持多种数字格式：纯数字、带点的数字（如 3.1、3.2）
  - 提取公共前缀部分作为分组名称
- **Success Criteria**:
  - 能准确识别前缀+数字编号格式的测试用例
  - 能正确提取公共前缀
- **Test Requirements**:
  - `programmatic` TR-2.1: 正确识别 `should handle bracket 1` 等格式 ✓
  - `programmatic` TR-2.2: 正确提取公共前缀如 `should handle bracket` ✓

## [x] 任务 3: 实现智能分组优先级逻辑
- **Priority**: P0
- **Depends On**: Task 2
- **Description**: 
  - 首先检查是否匹配"前缀+数字编号"模式
  - 如果匹配，按相同前缀分组
  - 如果不匹配，再使用原来的关键词分组逻辑
  - 分组名称规则：前缀+数字编号的分组名直接使用前缀
- **Success Criteria**:
  - 前缀+数字编号的测试用例优先按前缀分组
  - 其他测试用例继续使用原有关键词分组
- **Test Requirements**:
  - `programmatic` TR-3.1: 前缀+数字编号的测试用例被正确分组 ✓
  - `programmatic` TR-3.2: 非编号格式的测试用例仍按原逻辑分组 ✓

## [x] 任务 4: 测试和验证
- **Priority**: P0
- **Depends On**: Task 3
- **Description**: 
  - 从 git 恢复原始测试文件
  - 运行改进后的脚本
  - 验证分组结果正确
  - 运行 Jest 测试
- **Success Criteria**:
  - 脚本顺利执行完成
  - 分组结果符合预期
  - Jest 测试通过（或仅有与分组无关的失败）
- **Test Requirements**:
  - `programmatic` TR-4.1: 脚本执行无错误 ✓
  - `programmatic` TR-4.2: Jest 测试基本通过 ✓ (128/130通过，2个失败与位置索引相关)

## [x] 任务 5: 文档和优化
- **Priority**: P1
- **Depends On**: Task 4
- **Description**: 
  - 更新脚本注释
  - 确保代码清晰可读
- **Success Criteria**:
  - 代码结构清晰
  - 关键逻辑有注释
- **Test Requirements**:
  - `human-judgement` TR-5.1: 代码可读性良好 ✓

---

## 完成总结

脚本已成功改进并运行，完成了以下工作：

### 主要改进：

1. **支持去除已有 describe 分组**
   - 无论文件是否已有分组，都能正确提取所有 test 用例
   - 保持测试用例内容完整性

2. **前缀+数字编号识别**
   - 识别如 `should handle bracket 1`、`should handle switch 2` 等格式
   - 支持纯数字和带点的数字（如 3.1、3.2）
   - 提取公共前缀作为分组名

3. **智能分组优先级**
   - 前缀+数字编号格式优先按前缀分组
   - 其他测试用例继续使用原有关键词分组

### 分组结果：

共 **33个分组**，其中：
- **26个前缀+数字编号分组**（如 `should handle bracket`、`should handle multilne content` 等）
- **7个关键词分组**（如 `基本字符串提取`、`字符串模板/内插字符串处理` 等）

### 测试验证：
- Jest 测试：**128/130通过**
- 2个失败与 `originalIndex` 位置索引相关，与分组功能无关

### 脚本文件：
`auto-group-tests.js` 已更新并可直接使用
