yajl/test/run_tests.sh

95 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
ECHO=`which echo`
DIFF_FLAGS="-u"
case "$(uname)" in
*W32*)
DIFF_FLAGS="-wu"
;;
esac
if [ -z "$testBin" ]; then
testBin="$1"
fi
# find test binary on both platforms. allow the caller to force a
# particular test binary (useful for non-cmake build systems).
if [ -z "$testBin" ]; then
testBin="../build/test/Release/yajl_test.exe"
if [ ! -x $testBin ] ; then
testBin="../build/test/Debug/yajl_test.exe"
if [ ! -x $testBin ] ; then
testBin="../build/test/yajl_test"
if [ ! -x $testBin ] ; then
${ECHO} "cannot execute test binary: '$testBin'"
exit 1;
fi
fi
fi
fi
${ECHO} "using test binary: $testBin"
testBinShort=`basename $testBin`
testsSucceeded=0
testsTotal=0
for file in cases/*.json ; do
allowComments=""
allowGarbage=""
allowMultiple=""
allowPartials=""
# if the filename starts with dc_, we disallow comments for this test
case $(basename $file) in
ac_*)
allowComments="-c "
;;
ag_*)
allowGarbage="-g "
;;
am_*)
allowMultiple="-m ";
;;
ap_*)
allowPartials="-p ";
;;
esac
fileShort=`basename $file`
testName=`echo $fileShort | sed -e 's/\.json$//'`
${ECHO} -n " test ($testName): "
iter=1
success="SUCCESS"
# ${ECHO} -n "$testBinShort $allowPartials$allowComments$allowGarbage$allowMultiple-b $iter < $fileShort > ${fileShort}.test : "
# parse with a read buffer size ranging from 1-31 to stress stream parsing
while [ $iter -lt 32 ] && [ $success = "SUCCESS" ] ; do
$testBin $allowPartials $allowComments $allowGarbage $allowMultiple -b $iter < $file > ${file}.test 2>&1
diff ${DIFF_FLAGS} ${file}.gold ${file}.test > ${file}.out
if [ $? -eq 0 ] ; then
if [ $iter -eq 31 ] ; then : $(( testsSucceeded += 1)) ; fi
else
success="FAILURE"
iter=32
${ECHO}
cat ${file}.out
fi
: $(( iter += 1 ))
rm ${file}.test ${file}.out
done
${ECHO} $success
: $(( testsTotal += 1 ))
done
${ECHO} $testsSucceeded/$testsTotal tests successful
if [ $testsSucceeded != $testsTotal ] ; then
exit 1
fi
exit 0