58 lines
2.1 KiB
Markdown
58 lines
2.1 KiB
Markdown
# golden-tests(技术计划)
|
||
|
||
## 1. 计划目标
|
||
|
||
建立可持续回归体系,覆盖:
|
||
|
||
- **Golden Cases**:固定输入 → 固定输出(lines/wrappedText/meta),作为“可治理基线”
|
||
- **性质测试(property tests)**:
|
||
- 确定性:同输入多次调用输出一致
|
||
- 近似单调性:availableWidth 变小不会让任一行变得更宽(同测量口径下)
|
||
- maxLines 不变差:maxLines 增加时至少不从可解变 overflow
|
||
|
||
本模块产出测试数据与测试规则,不产出业务功能。
|
||
|
||
## 2. 约束与策略
|
||
|
||
### 2.1 测量可控
|
||
|
||
- APP:使用稳定的测量 mock(例如 `width = text.length`)保证 CI 可运行
|
||
- WIDGET:使用固定 profile 或 `widthMode=APPROX`(单位为 tokenCount/graphemeCount)
|
||
|
||
### 2.2 Golden 的组织方式
|
||
|
||
- 采用 TS fixture(便于类型校验与可读性)
|
||
- Golden case 至少包含:
|
||
- `text/lang/context/availableWidth/maxLines/overflowMode/lineMode/configVersion`
|
||
- 期望:`expected.lines/expected.wrappedText`(可选 meta 断言)
|
||
|
||
### 2.3 覆盖面(首版)
|
||
|
||
首版优先覆盖“易回归且高价值”的样例集:
|
||
|
||
- EN/TC 各若干条:短/长、含标点/无标点、含 emoji、含 shift/accum/self、极窄宽度
|
||
|
||
> 说明:文档建议每种语言 20 条;首版先落最小可运行集合,后续迭代扩充但保持可解释与版本化。
|
||
|
||
## 3. 测试实现结构(客户端)
|
||
|
||
- `client/src/features/textWrap/golden/fixtures.ts`(Golden cases)
|
||
- `client/src/features/textWrap/golden/__tests__/golden.test.ts`
|
||
- Golden 断言(lines/wrappedText)
|
||
- 性质测试(determinism/monotonic/maxLines)
|
||
|
||
测试内暂时使用“测试版 wrapTextHarness”把已实现模块串起来:
|
||
|
||
- normalize/tokenize(EN=tokenizeEN,TC=segmentGraphemes)
|
||
- generateBreakpoints
|
||
- search-engine-app / search-engine-widget
|
||
|
||
待 integration 模块产出正式 `wrapText()` 后,再把测试入口切到正式函数(不改变期望数据)。
|
||
|
||
## 4. 完成定义(DoD)
|
||
|
||
- Golden fixtures + 测试可在 CI 一键运行
|
||
- 至少包含 EN/TC 的基础样例与 3 类性质测试
|
||
- overview 更新记录变更文件
|
||
|