X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2Fjson.at;h=86ae5fad9007f190989f3d9f0672969626e6657e;hb=0ef165ecb57943e17a8ee8270df68ffb8d032e29;hp=54d4f8cf1ba1d08fe2c285b6e1ca2a311cdc9ffd;hpb=58fda1dab104041fc693032475ec4662c1a52849;p=sliver-openvswitch.git diff --git a/tests/json.at b/tests/json.at index 54d4f8cf1..86ae5fad9 100644 --- a/tests/json.at +++ b/tests/json.at @@ -1,19 +1,65 @@ -m4_define([JSON_CHECK_POSITIVE], +m4_define([JSON_CHECK_POSITIVE_C], [AT_SETUP([$1]) AT_KEYWORDS([json positive]) AT_CHECK([printf %s "AS_ESCAPE([$2])" > input]) - OVS_CHECK_LCOV([test-json $4 input], [0], [$3 -], []) + AT_CAPTURE_FILE([input]) + AT_CHECK([ovstest test-json $4 input], [0], [stdout], []) + AT_CHECK([cat stdout], [0], [$3 +]) + AT_CLEANUP]) + +m4_define([JSON_CHECK_POSITIVE_PY], + [AT_SETUP([$1]) + AT_KEYWORDS([json positive Python]) + AT_SKIP_IF([test $HAVE_PYTHON = no]) + AT_CHECK([printf %s "AS_ESCAPE([$2])" > input]) + AT_CAPTURE_FILE([input]) + AT_CHECK([$PYTHON $srcdir/test-json.py $4 input], [0], [stdout], []) + AT_CHECK([cat stdout], [0], [$3 +]) + AT_CLEANUP]) + +m4_define([JSON_CHECK_POSITIVE_UCS4PY], + [AT_SETUP([$1]) + AT_KEYWORDS([json positive Python]) + AT_SKIP_IF([test $HAVE_PYTHON = no]) + AT_XFAIL_IF([$PYTHON -c "exit(len(u'\U00010800'))"; test $? -ne 1]) + AT_CHECK([printf %s "AS_ESCAPE([$2])" > input]) + AT_CAPTURE_FILE([input]) + AT_CHECK([$PYTHON $srcdir/test-json.py $4 input], [0], [stdout], []) + AT_CHECK([cat stdout], [0], [$3 +]) AT_CLEANUP]) -m4_define([JSON_CHECK_NEGATIVE], +m4_define([JSON_CHECK_POSITIVE], + [JSON_CHECK_POSITIVE_C([$1 - C], [$2], [$3], [$4]) + JSON_CHECK_POSITIVE_PY([$1 - Python], [$2], [$3], [$4])]) + +m4_define([JSON_CHECK_NEGATIVE_C], [AT_SETUP([$1]) AT_KEYWORDS([json negative]) AT_CHECK([printf %s "AS_ESCAPE([$2])" > input]) - OVS_CHECK_LCOV([test-json $4 input], [1], [$3 + AT_CAPTURE_FILE([input]) + AT_CHECK([ovstest test-json $4 input], [1], [stdout], []) + AT_CHECK([[sed 's/^error: [^:]*:/error:/' < stdout]], [0], [$3 +]) + AT_CLEANUP]) + +m4_define([JSON_CHECK_NEGATIVE_PY], + [AT_SETUP([$1]) + AT_KEYWORDS([json negative Python]) + AT_SKIP_IF([test $HAVE_PYTHON = no]) + AT_CHECK([printf %s "AS_ESCAPE([$2])" > input]) + AT_CAPTURE_FILE([input]) + AT_CHECK([$PYTHON $srcdir/test-json.py $4 input], [1], [stdout], []) + AT_CHECK([[sed 's/^error: [^:]*:/error:/' < stdout]], [0], [$3 ]) AT_CLEANUP]) +m4_define([JSON_CHECK_NEGATIVE], + [JSON_CHECK_NEGATIVE_C([$1 - C], [$2], [$3], [$4]) + JSON_CHECK_NEGATIVE_PY([$1 - Python], [$2], [$3], [$4])]) + AT_BANNER([JSON -- arrays]) JSON_CHECK_POSITIVE([empty array], [[ [ ] ]], [[[]]]) @@ -41,7 +87,10 @@ JSON_CHECK_POSITIVE([escape sequences], JSON_CHECK_POSITIVE([Unicode escape sequences], [[[ " \u0022 \u005c \u002F \u0008 \u000c \u000A \u000d \u0009" ]]], [[[" \" \\ / \b \f \n \r \t"]]]) -JSON_CHECK_POSITIVE([surrogate pairs], +JSON_CHECK_POSITIVE_C([surrogate pairs - C], + [[["\ud834\udd1e"]]], + [[["𝄞"]]]) +JSON_CHECK_POSITIVE_UCS4PY([surrogate pairs - Python], [[["\ud834\udd1e"]]], [[["𝄞"]]]) JSON_CHECK_NEGATIVE([a string by itself is not valid JSON], ["xxx"], @@ -56,8 +105,11 @@ JSON_CHECK_NEGATIVE([formfeed in quoted string], JSON_CHECK_NEGATIVE([bad escape in quoted string], [[["\x12"]]], [error: bad escape \x]) -JSON_CHECK_NEGATIVE([\u must be followed by 4 hex digits], +JSON_CHECK_NEGATIVE([\u must be followed by 4 hex digits (1)], [[["\u1x"]]], + [error: quoted string ends within \u escape]) +JSON_CHECK_NEGATIVE([\u must be followed by 4 hex digits (2)], + [[["\u1xyz"]]], [error: malformed \u escape]) JSON_CHECK_NEGATIVE([isolated leading surrogate not allowed], [[["\ud834xxx"]]], @@ -69,10 +121,19 @@ JSON_CHECK_NEGATIVE([null bytes not allowed], [[["\u0000"]]], [error: null bytes not supported in quoted strings]) -AT_SETUP([end of input in quoted string]) +AT_SETUP([end of input in quoted string - C]) AT_KEYWORDS([json negative]) -AT_CHECK([printf '\"xxx' | test-json -], [1], - [error: unexpected end of input in quoted string +AT_CHECK([printf '"xxx' | ovstest test-json -], [1], + [error: line 0, column 4, byte 4: unexpected end of input in quoted string +]) +AT_CLEANUP + +AT_SETUP([end of input in quoted string - Python]) +AT_KEYWORDS([json negative Python]) +AT_SKIP_IF([test $HAVE_PYTHON = no]) +AT_CHECK([printf '"xxx' > input +$PYTHON $srcdir/test-json.py input], [1], + [error: line 0, column 4, byte 4: unexpected end of input in quoted string ]) AT_CLEANUP @@ -154,6 +215,14 @@ JSON_CHECK_POSITIVE( [scientific notation], [[[1e3, 1E3, 2.5E2, 1e+3, 125e-3, 3.125e-2, 3125e-05, 1.525878906e-5]]], [[[1000,1000,250,1000,0.125,0.03125,0.03125,1.525878906e-05]]]) +# It seems likely that the following test will fail on some system that +# rounds slightly differently in arithmetic or in printf, but I'd like +# to keep it this way until we run into such a system. +JSON_CHECK_POSITIVE( + [+/- DBL_MAX], + [[[1.7976931348623157e+308, -1.7976931348623157e+308]]], + [[[1.79769313486232e+308,-1.79769313486232e+308]]]) + JSON_CHECK_POSITIVE( [negative reals], [[[-0, -1.0, -2.0, -3.0, -3.5, -8.1250]]], @@ -259,7 +328,7 @@ JSON_CHECK_NEGATIVE([objects nesting too deep], AT_SETUP([input may not be empty]) AT_KEYWORDS([json negative]) -AT_CHECK([test-json /dev/null], [1], [error: empty input stream +AT_CHECK([ovstest test-json /dev/null], [1], [error: line 0, column 0, byte 0: empty input stream ]) AT_CLEANUP