| #!/bin/bash -eu | |
| # Copyright 2020 The Wuffs Authors. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # https://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| # ---------------- | |
| # This script runs a JSON parsing program (e.g. example/jsonptr) over a JSON | |
| # test suite (e.g. https://github.com/nst/JSONTestSuite checked out on local | |
| # disk as $HOME/JSONTestSuite). | |
| # | |
| # It runs that program over every command line argument: if a file then itself, | |
| # if a directory then every [iny]_*.json child. It checks for a 0 exit code for | |
| # y_*.json files, 1 for n_*.json files and either 0 or 1 for i_*.json files. | |
| jsonparser=${JSONPARSER:-gen/bin/example-jsonptr} | |
| if [ ! "$(command -v $jsonparser)" ]; then | |
| if [ ${JSONPARSER:-} ]; then | |
| echo "Could not run \$JSONPARSER ($jsonparser)." | |
| else | |
| echo "Could not run the default JSON parser (gen/bin/example-jsonptr)." | |
| echo "Run \"./build-example.sh example/jsonptr\" from the Wuffs root directory." | |
| fi | |
| exit 1 | |
| fi | |
| sources=$@ | |
| if [ $# -eq 0 ]; then | |
| sources=$HOME/JSONTestSuite/test_parsing | |
| fi | |
| num_fail=0 | |
| num_ok=0 | |
| num_total=0 | |
| # ---- | |
| test1() { | |
| set +e | |
| $jsonparser < $1 >/dev/null 2>/dev/null | |
| local x=$? | |
| local basename=${1##*/} | |
| local ok= | |
| if [[ $basename = i_*.json ]]; then | |
| if [[ ($x == 0 || $x == 1) ]]; then | |
| ok=1 | |
| fi | |
| elif [[ $basename = n_*.json ]]; then | |
| if [[ ($x == 1) ]]; then | |
| ok=1 | |
| fi | |
| elif [[ $basename = y_*.json ]]; then | |
| if [[ ($x == 0) ]]; then | |
| ok=1 | |
| fi | |
| fi | |
| if [ $ok ]; then | |
| echo "ok $1" | |
| ((num_ok++)) | |
| else | |
| echo "fail $1" | |
| ((num_fail++)) | |
| fi | |
| ((num_total++)) | |
| set -e | |
| } | |
| # ---- | |
| for f in $sources; do | |
| if [ -f $f ]; then | |
| test1 $f | |
| elif [ -d $f ]; then | |
| for g in ${f%/}/[iny]_*.json; do | |
| test1 $g | |
| done | |
| else | |
| echo "Could not open $f" | |
| if [ $# -eq 0 ]; then | |
| echo "Run \"git clone https://github.com/nst/JSONTestSuite.git\" from your home dir." | |
| fi | |
| exit 1 | |
| fi | |
| done | |
| echo "$num_fail fail, $num_ok ok, $num_total total" | |
| if [ $num_fail -ne 0 ]; then | |
| exit 1 | |
| fi |