55 lines
1.5 KiB
Markdown
55 lines
1.5 KiB
Markdown
# 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 💣](http://seriot.ch/parsing_json.php).
|
|
|
|
**/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/**
|
|
|
|
<img src="results/pruned_results.png" alt="JSON Parsing Tests" />
|