Skip to content

test: 补充 EAGER/LAZY 模式关系测试 #136

@membphis

Description

@membphis

背景

父任务:#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 的运行方式。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions