Skip to content

test: 补充 Go-style JSON grammar corpus #135

@membphis

Description

@membphis

背景

父任务:#132

对标 Go 标准库 encoding/json 的语法级测试方式,补齐 qjson 在 JSON 原子语法、错误码和错误偏移上的回归用例。

Go 参考:

  • src/encoding/json/number_test.go
  • src/encoding/json/scanner_test.go
  • src/encoding/json/internal/jsonwire/decode_test.go

目标

新增一组表驱动 grammar corpus,覆盖 qjson 的核心 JSON 语法边界,并固定 EAGER 模式下的错误行为。

重点覆盖:

  • number ABNF:合法/非法整数、小数、指数、前导零、+.NaNInfinity、超长数字。
  • string grammar:控制字符、合法 escape、非法 escape、截断 \u、surrogate pair、非法 UTF-8。
  • literal grammar:true / false / null 的截断和拼写错误。
  • trailing content:顶层 scalar/container 后的尾随内容。
  • parse error offset:对象 key 后、数组元素后、number 小数点/指数后、literal 中断等位置。

建议实现

  • 优先放在 Rust integration tests 或 validator 单元测试中。
  • 对每条 case 明确输入、期望错误码、期望 offset。
  • 复用现有 qjson_parse_ex / qjson_error.offset 验证 FFI 暴露行为。
  • 不要求与 Go 的错误文案一致,只借鉴用例维度和边界覆盖方式。

验收标准

  • 新增 grammar corpus 覆盖 number/string/literal/trailing/offset 五类边界。
  • cargo test --release 通过。
  • cargo test --release --no-default-features 通过。
  • 若发现 qjson 当前行为与设计不一致,补充说明并拆出后续修复 issue。

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