背景
父任务:#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:合法/非法整数、小数、指数、前导零、
+、.、NaN、Infinity、超长数字。
- 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。
背景
父任务:#132
对标 Go 标准库
encoding/json的语法级测试方式,补齐 qjson 在 JSON 原子语法、错误码和错误偏移上的回归用例。Go 参考:
src/encoding/json/number_test.gosrc/encoding/json/scanner_test.gosrc/encoding/json/internal/jsonwire/decode_test.go目标
新增一组表驱动 grammar corpus,覆盖 qjson 的核心 JSON 语法边界,并固定 EAGER 模式下的错误行为。
重点覆盖:
+、.、NaN、Infinity、超长数字。\u、surrogate pair、非法 UTF-8。true/false/null的截断和拼写错误。建议实现
qjson_parse_ex/qjson_error.offset验证 FFI 暴露行为。验收标准
cargo test --release通过。cargo test --release --no-default-features通过。