背景
父任务:#132
qjson 同时支持 EAGER 和 LAZY 两种解析模式。当前测试已经覆盖不少单点行为,但还需要把两种模式之间的关系系统化固定下来,避免后续验证逻辑、lazy decode 或错误处理调整时出现语义漂移。
对标 Go encoding/json/jsontext 的思路:不同配置/模式之间应有清晰的接受关系和错误边界。
目标
新增 EAGER / LAZY 模式关系测试,明确 qjson 自己的模式语义。
需要固定的关系:
- EAGER 接受的合法 JSON,LAZY 也应接受。
- EAGER 因 value-level 错误拒绝的输入,LAZY parse 可接受时,应在访问对应字段时返回稳定错误。
- depth 错误在 EAGER 和 LAZY 下都必须拒绝。
- max_depth 默认值和显式配置在两种模式下行为一致。
- trailing content 当前属于 eager-only 校验,应通过测试明确固定。
- 同一输入在 root getter 和 cursor getter 下的 lazy 错误行为应一致。
建议实现
- 使用 deterministic property/proptest 或表驱动 integration test。
- 覆盖 number、string、UTF-8、literal、nested container、trailing content。
- 对 lazy access 同时覆盖
qjson_get_* 和 qjson_cursor_get_*。
- 对错误码和 offset 做明确断言;如 offset 在 lazy path 无法稳定,应在测试里说明设计边界。
验收标准
- 新增测试能表达 EAGER/LAZY 的接受关系和差异点。
cargo test --release 通过。
cargo test --release --no-default-features 通过。
- 如果需要新增 fuzz target 或扩大现有 fuzz target,说明 PR-length 和 scheduled-length 的运行方式。
背景
父任务:#132
qjson 同时支持 EAGER 和 LAZY 两种解析模式。当前测试已经覆盖不少单点行为,但还需要把两种模式之间的关系系统化固定下来,避免后续验证逻辑、lazy decode 或错误处理调整时出现语义漂移。
对标 Go
encoding/json/jsontext的思路:不同配置/模式之间应有清晰的接受关系和错误边界。目标
新增 EAGER / LAZY 模式关系测试,明确 qjson 自己的模式语义。
需要固定的关系:
建议实现
qjson_get_*和qjson_cursor_get_*。验收标准
cargo test --release通过。cargo test --release --no-default-features通过。