- added Features class that describes allowed extension for Reader, to allow for strict configuration
- added tests from json.org jsonchecker and modified jsontestrunner to use strict parsing mode when executing them
diff --git a/test/jsonchecker/fail1.json b/test/jsonchecker/fail1.json
new file mode 100644
index 0000000..6216b86
--- /dev/null
+++ b/test/jsonchecker/fail1.json
@@ -0,0 +1 @@
+"A JSON payload should be an object or array, not a string."
\ No newline at end of file
diff --git a/test/jsonchecker/fail10.json b/test/jsonchecker/fail10.json
new file mode 100644
index 0000000..5d8c004
--- /dev/null
+++ b/test/jsonchecker/fail10.json
@@ -0,0 +1 @@
+{"Extra value after close": true} "misplaced quoted value"
\ No newline at end of file
diff --git a/test/jsonchecker/fail11.json b/test/jsonchecker/fail11.json
new file mode 100644
index 0000000..76eb95b
--- /dev/null
+++ b/test/jsonchecker/fail11.json
@@ -0,0 +1 @@
+{"Illegal expression": 1 + 2}
\ No newline at end of file
diff --git a/test/jsonchecker/fail12.json b/test/jsonchecker/fail12.json
new file mode 100644
index 0000000..77580a4
--- /dev/null
+++ b/test/jsonchecker/fail12.json
@@ -0,0 +1 @@
+{"Illegal invocation": alert()}
\ No newline at end of file
diff --git a/test/jsonchecker/fail13.json b/test/jsonchecker/fail13.json
new file mode 100644
index 0000000..379406b
--- /dev/null
+++ b/test/jsonchecker/fail13.json
@@ -0,0 +1 @@
+{"Numbers cannot have leading zeroes": 013}
\ No newline at end of file
diff --git a/test/jsonchecker/fail14.json b/test/jsonchecker/fail14.json
new file mode 100644
index 0000000..0ed366b
--- /dev/null
+++ b/test/jsonchecker/fail14.json
@@ -0,0 +1 @@
+{"Numbers cannot be hex": 0x14}
\ No newline at end of file
diff --git a/test/jsonchecker/fail15.json b/test/jsonchecker/fail15.json
new file mode 100644
index 0000000..fc8376b
--- /dev/null
+++ b/test/jsonchecker/fail15.json
@@ -0,0 +1 @@
+["Illegal backslash escape: \x15"]
\ No newline at end of file
diff --git a/test/jsonchecker/fail16.json b/test/jsonchecker/fail16.json
new file mode 100644
index 0000000..3fe21d4
--- /dev/null
+++ b/test/jsonchecker/fail16.json
@@ -0,0 +1 @@
+[\naked]
\ No newline at end of file
diff --git a/test/jsonchecker/fail17.json b/test/jsonchecker/fail17.json
new file mode 100644
index 0000000..62b9214
--- /dev/null
+++ b/test/jsonchecker/fail17.json
@@ -0,0 +1 @@
+["Illegal backslash escape: \017"]
\ No newline at end of file
diff --git a/test/jsonchecker/fail18.json b/test/jsonchecker/fail18.json
new file mode 100644
index 0000000..edac927
--- /dev/null
+++ b/test/jsonchecker/fail18.json
@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
\ No newline at end of file
diff --git a/test/jsonchecker/fail19.json b/test/jsonchecker/fail19.json
new file mode 100644
index 0000000..3b9c46f
--- /dev/null
+++ b/test/jsonchecker/fail19.json
@@ -0,0 +1 @@
+{"Missing colon" null}
\ No newline at end of file
diff --git a/test/jsonchecker/fail2.json b/test/jsonchecker/fail2.json
new file mode 100644
index 0000000..6b7c11e
--- /dev/null
+++ b/test/jsonchecker/fail2.json
@@ -0,0 +1 @@
+["Unclosed array"
\ No newline at end of file
diff --git a/test/jsonchecker/fail20.json b/test/jsonchecker/fail20.json
new file mode 100644
index 0000000..27c1af3
--- /dev/null
+++ b/test/jsonchecker/fail20.json
@@ -0,0 +1 @@
+{"Double colon":: null}
\ No newline at end of file
diff --git a/test/jsonchecker/fail21.json b/test/jsonchecker/fail21.json
new file mode 100644
index 0000000..6247457
--- /dev/null
+++ b/test/jsonchecker/fail21.json
@@ -0,0 +1 @@
+{"Comma instead of colon", null}
\ No newline at end of file
diff --git a/test/jsonchecker/fail22.json b/test/jsonchecker/fail22.json
new file mode 100644
index 0000000..a775258
--- /dev/null
+++ b/test/jsonchecker/fail22.json
@@ -0,0 +1 @@
+["Colon instead of comma": false]
\ No newline at end of file
diff --git a/test/jsonchecker/fail23.json b/test/jsonchecker/fail23.json
new file mode 100644
index 0000000..494add1
--- /dev/null
+++ b/test/jsonchecker/fail23.json
@@ -0,0 +1 @@
+["Bad value", truth]
\ No newline at end of file
diff --git a/test/jsonchecker/fail24.json b/test/jsonchecker/fail24.json
new file mode 100644
index 0000000..caff239
--- /dev/null
+++ b/test/jsonchecker/fail24.json
@@ -0,0 +1 @@
+['single quote']
\ No newline at end of file
diff --git a/test/jsonchecker/fail25.json b/test/jsonchecker/fail25.json
new file mode 100644
index 0000000..8b7ad23
--- /dev/null
+++ b/test/jsonchecker/fail25.json
@@ -0,0 +1 @@
+[" tab character in string "]
\ No newline at end of file
diff --git a/test/jsonchecker/fail26.json b/test/jsonchecker/fail26.json
new file mode 100644
index 0000000..845d26a
--- /dev/null
+++ b/test/jsonchecker/fail26.json
@@ -0,0 +1 @@
+["tab\ character\ in\ string\ "]
\ No newline at end of file
diff --git a/test/jsonchecker/fail27.json b/test/jsonchecker/fail27.json
new file mode 100644
index 0000000..6b01a2c
--- /dev/null
+++ b/test/jsonchecker/fail27.json
@@ -0,0 +1,2 @@
+["line
+break"]
\ No newline at end of file
diff --git a/test/jsonchecker/fail28.json b/test/jsonchecker/fail28.json
new file mode 100644
index 0000000..621a010
--- /dev/null
+++ b/test/jsonchecker/fail28.json
@@ -0,0 +1,2 @@
+["line\
+break"]
\ No newline at end of file
diff --git a/test/jsonchecker/fail29.json b/test/jsonchecker/fail29.json
new file mode 100644
index 0000000..47ec421
--- /dev/null
+++ b/test/jsonchecker/fail29.json
@@ -0,0 +1 @@
+[0e]
\ No newline at end of file
diff --git a/test/jsonchecker/fail3.json b/test/jsonchecker/fail3.json
new file mode 100644
index 0000000..168c81e
--- /dev/null
+++ b/test/jsonchecker/fail3.json
@@ -0,0 +1 @@
+{unquoted_key: "keys must be quoted"}
\ No newline at end of file
diff --git a/test/jsonchecker/fail30.json b/test/jsonchecker/fail30.json
new file mode 100644
index 0000000..8ab0bc4
--- /dev/null
+++ b/test/jsonchecker/fail30.json
@@ -0,0 +1 @@
+[0e+]
\ No newline at end of file
diff --git a/test/jsonchecker/fail31.json b/test/jsonchecker/fail31.json
new file mode 100644
index 0000000..1cce602
--- /dev/null
+++ b/test/jsonchecker/fail31.json
@@ -0,0 +1 @@
+[0e+-1]
\ No newline at end of file
diff --git a/test/jsonchecker/fail32.json b/test/jsonchecker/fail32.json
new file mode 100644
index 0000000..45cba73
--- /dev/null
+++ b/test/jsonchecker/fail32.json
@@ -0,0 +1 @@
+{"Comma instead if closing brace": true,
\ No newline at end of file
diff --git a/test/jsonchecker/fail33.json b/test/jsonchecker/fail33.json
new file mode 100644
index 0000000..ca5eb19
--- /dev/null
+++ b/test/jsonchecker/fail33.json
@@ -0,0 +1 @@
+["mismatch"}
\ No newline at end of file
diff --git a/test/jsonchecker/fail4.json b/test/jsonchecker/fail4.json
new file mode 100644
index 0000000..9de168b
--- /dev/null
+++ b/test/jsonchecker/fail4.json
@@ -0,0 +1 @@
+["extra comma",]
\ No newline at end of file
diff --git a/test/jsonchecker/fail5.json b/test/jsonchecker/fail5.json
new file mode 100644
index 0000000..ddf3ce3
--- /dev/null
+++ b/test/jsonchecker/fail5.json
@@ -0,0 +1 @@
+["double extra comma",,]
\ No newline at end of file
diff --git a/test/jsonchecker/fail6.json b/test/jsonchecker/fail6.json
new file mode 100644
index 0000000..ed91580
--- /dev/null
+++ b/test/jsonchecker/fail6.json
@@ -0,0 +1 @@
+[ , "<-- missing value"]
\ No newline at end of file
diff --git a/test/jsonchecker/fail7.json b/test/jsonchecker/fail7.json
new file mode 100644
index 0000000..8a96af3
--- /dev/null
+++ b/test/jsonchecker/fail7.json
@@ -0,0 +1 @@
+["Comma after the close"],
\ No newline at end of file
diff --git a/test/jsonchecker/fail8.json b/test/jsonchecker/fail8.json
new file mode 100644
index 0000000..b28479c
--- /dev/null
+++ b/test/jsonchecker/fail8.json
@@ -0,0 +1 @@
+["Extra close"]]
\ No newline at end of file
diff --git a/test/jsonchecker/fail9.json b/test/jsonchecker/fail9.json
new file mode 100644
index 0000000..5815574
--- /dev/null
+++ b/test/jsonchecker/fail9.json
@@ -0,0 +1 @@
+{"Extra comma": true,}
\ No newline at end of file
diff --git a/test/jsonchecker/pass1.json b/test/jsonchecker/pass1.json
new file mode 100644
index 0000000..70e2685
--- /dev/null
+++ b/test/jsonchecker/pass1.json
@@ -0,0 +1,58 @@
+[
+ "JSON Test Pattern pass1",
+ {"object with 1 member":["array with 1 element"]},
+ {},
+ [],
+ -42,
+ true,
+ false,
+ null,
+ {
+ "integer": 1234567890,
+ "real": -9876.543210,
+ "e": 0.123456789e-12,
+ "E": 1.234567890E+34,
+ "": 23456789012E66,
+ "zero": 0,
+ "one": 1,
+ "space": " ",
+ "quote": "\"",
+ "backslash": "\\",
+ "controls": "\b\f\n\r\t",
+ "slash": "/ & \/",
+ "alpha": "abcdefghijklmnopqrstuvwyz",
+ "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
+ "digit": "0123456789",
+ "0123456789": "digit",
+ "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
+ "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
+ "true": true,
+ "false": false,
+ "null": null,
+ "array":[ ],
+ "object":{ },
+ "address": "50 St. James Street",
+ "url": "http://www.JSON.org/",
+ "comment": "// /* <!-- --",
+ "# -- --> */": " ",
+ " s p a c e d " :[1,2 , 3
+
+,
+
+4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],
+ "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
+ "quotes": "" \u0022 %22 0x22 034 "",
+ "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
+: "A key can be any string"
+ },
+ 0.5 ,98.6
+,
+99.44
+,
+
+1066,
+1e1,
+0.1e1,
+1e-1,
+1e00,2e+00,2e-00
+,"rosebud"]
\ No newline at end of file
diff --git a/test/jsonchecker/pass2.json b/test/jsonchecker/pass2.json
new file mode 100644
index 0000000..d3c63c7
--- /dev/null
+++ b/test/jsonchecker/pass2.json
@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
\ No newline at end of file
diff --git a/test/jsonchecker/pass3.json b/test/jsonchecker/pass3.json
new file mode 100644
index 0000000..4528d51
--- /dev/null
+++ b/test/jsonchecker/pass3.json
@@ -0,0 +1,6 @@
+{
+ "JSON Test Pattern pass3": {
+ "The outermost value": "must be an object or array.",
+ "In this test": "It is an object."
+ }
+}
diff --git a/test/jsonchecker/readme.txt b/test/jsonchecker/readme.txt
new file mode 100644
index 0000000..0efc2a4
--- /dev/null
+++ b/test/jsonchecker/readme.txt
@@ -0,0 +1,3 @@
+Test suite from http://json.org/JSON_checker/.
+
+If the JSON_checker is working correctly, it must accept all of the pass*.json files and reject all of the fail*.json files.
diff --git a/test/runjsontests.py b/test/runjsontests.py
index 2cf37e2..fa85972 100644
--- a/test/runjsontests.py
+++ b/test/runjsontests.py
@@ -3,6 +3,7 @@
import os.path
from glob import glob
+RUN_JSONCHECKER = True
def compareOutputs( expected, actual, message ):
expected = expected.strip().replace('\r','').split('\n')
@@ -39,7 +40,10 @@
if not input_dir:
input_dir = os.getcwd()
tests = glob( os.path.join( input_dir, '*.json' ) )
- test_jsonchecker = glob( os.path.join( input_dir, 'jsonchecker', '*.json' ) )
+ if RUN_JSONCHECKER:
+ test_jsonchecker = glob( os.path.join( input_dir, 'jsonchecker', '*.json' ) )
+ else:
+ test_jsonchecker = []
failed_tests = []
for input_path in tests + test_jsonchecker:
is_json_checker_test = input_path in test_jsonchecker
@@ -54,7 +58,8 @@
if expect_failure:
if status is None:
print 'FAILED'
- failed_tests.append( (input_path, 'Parsing should have failed') )
+ failed_tests.append( (input_path, 'Parsing should have failed:\n%s' %
+ safeReadFile(input_path)) )
else:
print 'OK'
else: