# 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 更新记录变更文件

