nst / JSONTestSuite

A comprehensive test suite for RFC 8259 compliant JSON parsers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

JSON Parsing Test Suite

A comprehensive test suite for RFC 8259 compliant JSON parsers

This repository was created as an appendix to the article Parsing JSON is a Minefield 💣.

/parsers/

This directory contains several parsers and tiny wrappers to turn the parsers into JSON validators, by returning a specific value.

  • 0 the parser did accept the content
  • 1 the parser did reject the content
  • >1 the process did crash
  • timeout happens after 5 seconds

/test_parsing/

The name of these files tell if their contents should be accepted or rejected.

  • y_ content must be accepted by parsers
  • n_ content must be rejected by parsers
  • i_ parsers are free to accept or reject content

/test_transform/

These files contain weird structures and characters that parsers may understand differently, eg:

  • huge numbers
  • dictionaries with similar keys
  • NULL characters
  • escaped invalid strings

These files were used to produce results/transform.html.

/run_tests.py

Run all parsers with all files:

$ python3 run_tests.py

Run all parsers with a specific file:

$ python3 run_tests.py file.json

Run specific parsers with all files:

$ echo '["Python 2.7.10", "Python 3.5.2"]' > python_only.json
$ python3 run_tests.py --filter=python_only.json

The script writes logs in results/logs.txt.

The script then reads logs.txt and generates results/parsing.html.

/results/

JSON Parsing Tests

About

A comprehensive test suite for RFC 8259 compliant JSON parsers

License:MIT License


Languages

Language:C++ 39.9%Language:Swift 28.0%Language:Objective-C 13.8%Language:C 12.6%Language:Lua 1.4%Language:Python 1.0%Language:HTML 0.9%Language:Awk 0.8%Language:Java 0.4%Language:Elixir 0.3%Language:Rich Text Format 0.3%Language:Shell 0.2%Language:Perl 0.1%Language:Rust 0.1%Language:Ruby 0.1%Language:C# 0.1%Language:CSS 0.0%Language:OCaml 0.0%Language:Zig 0.0%Language:PHP 0.0%Language:Scala 0.0%Language:Haskell 0.0%Language:Go 0.0%Language:Pascal 0.0%Language:Smalltalk 0.0%Language:Crystal 0.0%Language:R 0.0%Language:JavaScript 0.0%Language:Nim 0.0%Language:QMake 0.0%