#!/bin/bash # # Test script is organized like this: # o two variables (PASSED and FAILED) hold the total # number of passed/faled tests # o expect() function performs a single test. First # argument of the function is the variable name and # the second is an expected value. PASSED/FAILED # values are updated automatically # # Most tests look like: # | # | expect "varName" "expectedValue" << JSON_END # | ..json data here... # | JSON_END # | # PASSED=0 FAILED=0 function expect() { ret=$(./jsmn_demo -t 10 -b 256 - | grep -A 1 "$1" | tail -n 1 | cut -c 15-) if [ "x$ret" = "x$2" ]; then PASSED=$(($PASSED+1)) else echo "Failed: $1 != $2" FAILED=$(($FAILED+1)) fi } # # TEST SET: Basic types (simple values) # expect 'boolVar' 'true' << JSON_END "boolVar" : true JSON_END expect 'boolVar' 'false'<< JSON_END "boolVar" : false JSON_END expect 'intVar' '12345' << JSON_END "intVar" : 12345 JSON_END expect 'floatVar' '12.345' << JSON_END "floatVar" : 12.345 JSON_END expect 'nullVar' 'null' << JSON_END "nullVar" : null JSON_END expect 'strVar' 'hello' << JSON_END "strVar" : "hello" JSON_END # # TEST SET: Simple types (boundary values) # expect 'intVar' '0' << JSON_END "intVar" : 0 JSON_END expect 'intVar' '-0' << JSON_END "intVar" : -0 JSON_END expect 'floarVar' '-0.0' << JSON_END "floarVar" : -0.0 JSON_END expect 'strVar' '\n\r\b\t \u1234' << JSON_END "strVar" : "\n\r\b\t \u1234" JSON_END expect 'strVar' '' << JSON_END "strVar" : "" JSON_END # # TEST SET: Array types # expect 'arr' '[1,2,3,4,5]' << JSON_END "arr" : [1,2,3,4,5] JSON_END expect 'arr' '[1, 2.3, "4", null, true]' << JSON_END "arr" : [1, 2.3, "4", null, true] JSON_END expect 'arr' '[]' << JSON_END "arr" : [] JSON_END # # TEST SET: Object types # expect 'obj' '{"a":"b"}' << JSON_END "obj":{"a":"b"} JSON_END expect 'objField' 'value' << JSON_END { "foo" : "bar", "objField" : "value" } JSON_END expect 'foo' 'bar' << JSON_END { "foo" : "bar" "a" : [ { "x" : "y", "z" : "zz" }, 3, false, true, "end" ], } JSON_END echo echo "Passed: $PASSED" echo "Failed: $FAILED" echo