summaryrefslogtreecommitdiff
path: root/test/parsing/cases
diff options
context:
space:
mode:
Diffstat (limited to 'test/parsing/cases')
-rw-r--r--test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json1
-rw-r--r--test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json.gold36
-rw-r--r--test/parsing/cases/ac_simple_with_comments.json11
-rw-r--r--test/parsing/cases/ac_simple_with_comments.json.gold9
-rw-r--r--test/parsing/cases/ag_false_then_garbage.json1
-rw-r--r--test/parsing/cases/ag_false_then_garbage.json.gold2
-rw-r--r--test/parsing/cases/ag_null_then_garbage.json1
-rw-r--r--test/parsing/cases/ag_null_then_garbage.json.gold2
-rw-r--r--test/parsing/cases/ag_true_then_garbage.json1
-rw-r--r--test/parsing/cases/ag_true_then_garbage.json.gold2
-rw-r--r--test/parsing/cases/am_eof.json1
-rw-r--r--test/parsing/cases/am_eof.json.gold4
-rw-r--r--test/parsing/cases/am_integers.json1
-rw-r--r--test/parsing/cases/am_integers.json.gold3
-rw-r--r--test/parsing/cases/am_multiple.json3
-rw-r--r--test/parsing/cases/am_multiple.json.gold5
-rw-r--r--test/parsing/cases/am_stuff.json7
-rw-r--r--test/parsing/cases/am_stuff.json.gold14
-rw-r--r--test/parsing/cases/ap_array_open.json1
-rw-r--r--test/parsing/cases/ap_array_open.json.gold2
-rw-r--r--test/parsing/cases/ap_eof_str.json1
-rw-r--r--test/parsing/cases/ap_eof_str.json.gold1
-rw-r--r--test/parsing/cases/ap_map_open.json1
-rw-r--r--test/parsing/cases/ap_map_open.json.gold2
-rw-r--r--test/parsing/cases/ap_partial_ok.json1
-rw-r--r--test/parsing/cases/ap_partial_ok.json.gold4
-rw-r--r--test/parsing/cases/array.json6
-rw-r--r--test/parsing/cases/array.json.gold22
-rw-r--r--test/parsing/cases/array_close.json1
-rw-r--r--test/parsing/cases/array_close.json.gold2
-rw-r--r--test/parsing/cases/bignums.json1
-rw-r--r--test/parsing/cases/bignums.json.gold5
-rw-r--r--test/parsing/cases/bogus_char.json4
-rw-r--r--test/parsing/cases/bogus_char.json.gold10
-rw-r--r--test/parsing/cases/codepoints_from_unicode_org.json1
-rw-r--r--test/parsing/cases/codepoints_from_unicode_org.json.gold2
-rw-r--r--test/parsing/cases/deep_arrays.json1
-rw-r--r--test/parsing/cases/deep_arrays.json.gold2049
-rw-r--r--test/parsing/cases/difficult_json_c_test_case.json1
-rw-r--r--test/parsing/cases/difficult_json_c_test_case.json.gold36
-rw-r--r--test/parsing/cases/doubles.json1
-rw-r--r--test/parsing/cases/doubles.json.gold7
-rw-r--r--test/parsing/cases/doubles_in_array.json1
-rw-r--r--test/parsing/cases/doubles_in_array.json.gold8
-rw-r--r--test/parsing/cases/empty_array.json1
-rw-r--r--test/parsing/cases/empty_array.json.gold3
-rw-r--r--test/parsing/cases/empty_string.json1
-rw-r--r--test/parsing/cases/empty_string.json.gold2
-rw-r--r--test/parsing/cases/escaped_bulgarian.json4
-rw-r--r--test/parsing/cases/escaped_bulgarian.json.gold7
-rw-r--r--test/parsing/cases/escaped_foobar.json1
-rw-r--r--test/parsing/cases/escaped_foobar.json.gold2
-rw-r--r--test/parsing/cases/false.json1
-rw-r--r--test/parsing/cases/false.json.gold2
-rw-r--r--test/parsing/cases/fg_false_then_garbage.json1
-rw-r--r--test/parsing/cases/fg_false_then_garbage.json.gold3
-rw-r--r--test/parsing/cases/fg_issue_7.json1
-rw-r--r--test/parsing/cases/fg_issue_7.json.gold3
-rw-r--r--test/parsing/cases/fg_null_then_garbage.json1
-rw-r--r--test/parsing/cases/fg_null_then_garbage.json.gold3
-rw-r--r--test/parsing/cases/fg_true_then_garbage.json1
-rw-r--r--test/parsing/cases/fg_true_then_garbage.json.gold3
-rw-r--r--test/parsing/cases/four_byte_utf8.json2
-rw-r--r--test/parsing/cases/four_byte_utf8.json.gold5
-rw-r--r--test/parsing/cases/high_overflow.json1
-rw-r--r--test/parsing/cases/high_overflow.json.gold2
-rw-r--r--test/parsing/cases/integers.json3
-rw-r--r--test/parsing/cases/integers.json.gold14
-rw-r--r--test/parsing/cases/invalid_utf8.json1
-rw-r--r--test/parsing/cases/invalid_utf8.json.gold3
-rw-r--r--test/parsing/cases/isolated_surrogate_marker.json1
-rw-r--r--test/parsing/cases/isolated_surrogate_marker.json.gold2
-rw-r--r--test/parsing/cases/leading_zero_in_number.json1
-rw-r--r--test/parsing/cases/leading_zero_in_number.json.gold5
-rw-r--r--test/parsing/cases/lonely_minus_sign.json7
-rw-r--r--test/parsing/cases/lonely_minus_sign.json.gold9
-rw-r--r--test/parsing/cases/lonely_number.json1
-rw-r--r--test/parsing/cases/lonely_number.json.gold2
-rw-r--r--test/parsing/cases/low_overflow.json1
-rw-r--r--test/parsing/cases/low_overflow.json.gold2
-rw-r--r--test/parsing/cases/map_close.json1
-rw-r--r--test/parsing/cases/map_close.json.gold2
-rw-r--r--test/parsing/cases/missing_integer_after_decimal_point.json1
-rw-r--r--test/parsing/cases/missing_integer_after_decimal_point.json.gold2
-rw-r--r--test/parsing/cases/missing_integer_after_exponent.json1
-rw-r--r--test/parsing/cases/missing_integer_after_exponent.json.gold2
-rw-r--r--test/parsing/cases/multiple.json3
-rw-r--r--test/parsing/cases/multiple.json.gold4
-rw-r--r--test/parsing/cases/non_utf8_char_in_string.json1
-rw-r--r--test/parsing/cases/non_utf8_char_in_string.json.gold8
-rw-r--r--test/parsing/cases/np_partial_bad.json1
-rw-r--r--test/parsing/cases/np_partial_bad.json.gold5
-rw-r--r--test/parsing/cases/null.json1
-rw-r--r--test/parsing/cases/null.json.gold2
-rw-r--r--test/parsing/cases/nulls_and_bools.json5
-rw-r--r--test/parsing/cases/nulls_and_bools.json.gold9
-rw-r--r--test/parsing/cases/simple.json5
-rw-r--r--test/parsing/cases/simple.json.gold9
-rw-r--r--test/parsing/cases/simple_with_comments.json11
-rw-r--r--test/parsing/cases/simple_with_comments.json.gold5
-rw-r--r--test/parsing/cases/string_invalid_escape.json1
-rw-r--r--test/parsing/cases/string_invalid_escape.json.gold3
-rw-r--r--test/parsing/cases/string_invalid_hex_char.json1
-rw-r--r--test/parsing/cases/string_invalid_hex_char.json.gold2
-rw-r--r--test/parsing/cases/string_with_escapes.json3
-rw-r--r--test/parsing/cases/string_with_escapes.json.gold7
-rw-r--r--test/parsing/cases/string_with_invalid_newline.json2
-rw-r--r--test/parsing/cases/string_with_invalid_newline.json.gold2
-rw-r--r--test/parsing/cases/three_byte_utf8.json1
-rw-r--r--test/parsing/cases/three_byte_utf8.json.gold7
-rw-r--r--test/parsing/cases/true.json1
-rw-r--r--test/parsing/cases/true.json.gold2
-rw-r--r--test/parsing/cases/unescaped_bulgarian.json1
-rw-r--r--test/parsing/cases/unescaped_bulgarian.json.gold4
-rw-r--r--test/parsing/cases/zerobyte.json1
-rw-r--r--test/parsing/cases/zerobyte.json.goldbin0 -> 28 bytes
116 files changed, 2493 insertions, 0 deletions
diff --git a/test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json b/test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json
new file mode 100644
index 0000000..2463c71
--- /dev/null
+++ b/test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json
@@ -0,0 +1 @@
+{ "glossary": { /* you */ "title": /**/ "example glossary", /*should*/"GlossDiv": { "title": /*never*/"S", /*ever*/"GlossList": [ { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": "A meta-markup language, used to create markup languages such as DocBook.", /*see*/"GlossSeeAlso"/*this*/:/*coming*/[/*out*/"GML"/*of*/,/*the*/"XML"/*parser!*/, "markup"] /*hey*/}/*ho*/]/*hey*/}/*ho*/} } // and the parser won't even get this far, so chill. /* hah!
diff --git a/test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json.gold b/test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json.gold
new file mode 100644
index 0000000..c3adc11
--- /dev/null
+++ b/test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json.gold
@@ -0,0 +1,36 @@
+map open '{'
+key: 'glossary'
+map open '{'
+key: 'title'
+string: 'example glossary'
+key: 'GlossDiv'
+map open '{'
+key: 'title'
+string: 'S'
+key: 'GlossList'
+array open '['
+map open '{'
+key: 'ID'
+string: 'SGML'
+key: 'SortAs'
+string: 'SGML'
+key: 'GlossTerm'
+string: 'Standard Generalized Markup Language'
+key: 'Acronym'
+string: 'SGML'
+key: 'Abbrev'
+string: 'ISO 8879:1986'
+key: 'GlossDef'
+string: 'A meta-markup language, used to create markup languages such as DocBook.'
+key: 'GlossSeeAlso'
+array open '['
+string: 'GML'
+string: 'XML'
+string: 'markup'
+array close ']'
+map close '}'
+array close ']'
+map close '}'
+map close '}'
+map close '}'
+memory leaks: 0
diff --git a/test/parsing/cases/ac_simple_with_comments.json b/test/parsing/cases/ac_simple_with_comments.json
new file mode 100644
index 0000000..3b79bba
--- /dev/null
+++ b/test/parsing/cases/ac_simple_with_comments.json
@@ -0,0 +1,11 @@
+{
+ "this": "is", // ignore this
+ "really": "simple",
+ /* ignore
+this
+too * /
+** //
+(/
+******/
+ "json": "right?"
+}
diff --git a/test/parsing/cases/ac_simple_with_comments.json.gold b/test/parsing/cases/ac_simple_with_comments.json.gold
new file mode 100644
index 0000000..80fcad2
--- /dev/null
+++ b/test/parsing/cases/ac_simple_with_comments.json.gold
@@ -0,0 +1,9 @@
+map open '{'
+key: 'this'
+string: 'is'
+key: 'really'
+string: 'simple'
+key: 'json'
+string: 'right?'
+map close '}'
+memory leaks: 0
diff --git a/test/parsing/cases/ag_false_then_garbage.json b/test/parsing/cases/ag_false_then_garbage.json
new file mode 100644
index 0000000..78f4e96
--- /dev/null
+++ b/test/parsing/cases/ag_false_then_garbage.json
@@ -0,0 +1 @@
+falsex \ No newline at end of file
diff --git a/test/parsing/cases/ag_false_then_garbage.json.gold b/test/parsing/cases/ag_false_then_garbage.json.gold
new file mode 100644
index 0000000..e55fa1f
--- /dev/null
+++ b/test/parsing/cases/ag_false_then_garbage.json.gold
@@ -0,0 +1,2 @@
+bool: false
+memory leaks: 0
diff --git a/test/parsing/cases/ag_null_then_garbage.json b/test/parsing/cases/ag_null_then_garbage.json
new file mode 100644
index 0000000..7b65b35
--- /dev/null
+++ b/test/parsing/cases/ag_null_then_garbage.json
@@ -0,0 +1 @@
+nullx
diff --git a/test/parsing/cases/ag_null_then_garbage.json.gold b/test/parsing/cases/ag_null_then_garbage.json.gold
new file mode 100644
index 0000000..94ad0fa
--- /dev/null
+++ b/test/parsing/cases/ag_null_then_garbage.json.gold
@@ -0,0 +1,2 @@
+null
+memory leaks: 0
diff --git a/test/parsing/cases/ag_true_then_garbage.json b/test/parsing/cases/ag_true_then_garbage.json
new file mode 100644
index 0000000..9151612
--- /dev/null
+++ b/test/parsing/cases/ag_true_then_garbage.json
@@ -0,0 +1 @@
+truex \ No newline at end of file
diff --git a/test/parsing/cases/ag_true_then_garbage.json.gold b/test/parsing/cases/ag_true_then_garbage.json.gold
new file mode 100644
index 0000000..0858bf7
--- /dev/null
+++ b/test/parsing/cases/ag_true_then_garbage.json.gold
@@ -0,0 +1,2 @@
+bool: true
+memory leaks: 0
diff --git a/test/parsing/cases/am_eof.json b/test/parsing/cases/am_eof.json
new file mode 100644
index 0000000..43a772f
--- /dev/null
+++ b/test/parsing/cases/am_eof.json
@@ -0,0 +1 @@
+{ "123":
diff --git a/test/parsing/cases/am_eof.json.gold b/test/parsing/cases/am_eof.json.gold
new file mode 100644
index 0000000..5a9708b
--- /dev/null
+++ b/test/parsing/cases/am_eof.json.gold
@@ -0,0 +1,4 @@
+map open '{'
+key: '123'
+parse error: premature EOF
+memory leaks: 0
diff --git a/test/parsing/cases/am_integers.json b/test/parsing/cases/am_integers.json
new file mode 100644
index 0000000..856809b
--- /dev/null
+++ b/test/parsing/cases/am_integers.json
@@ -0,0 +1 @@
+1221 21
diff --git a/test/parsing/cases/am_integers.json.gold b/test/parsing/cases/am_integers.json.gold
new file mode 100644
index 0000000..7b8a953
--- /dev/null
+++ b/test/parsing/cases/am_integers.json.gold
@@ -0,0 +1,3 @@
+integer: 1221
+integer: 21
+memory leaks: 0
diff --git a/test/parsing/cases/am_multiple.json b/test/parsing/cases/am_multiple.json
new file mode 100644
index 0000000..b573db0
--- /dev/null
+++ b/test/parsing/cases/am_multiple.json
@@ -0,0 +1,3 @@
+
+{}
+{}
diff --git a/test/parsing/cases/am_multiple.json.gold b/test/parsing/cases/am_multiple.json.gold
new file mode 100644
index 0000000..bf705d4
--- /dev/null
+++ b/test/parsing/cases/am_multiple.json.gold
@@ -0,0 +1,5 @@
+map open '{'
+map close '}'
+map open '{'
+map close '}'
+memory leaks: 0
diff --git a/test/parsing/cases/am_stuff.json b/test/parsing/cases/am_stuff.json
new file mode 100644
index 0000000..89c607d
--- /dev/null
+++ b/test/parsing/cases/am_stuff.json
@@ -0,0 +1,7 @@
+{}
+[]
+[]
+"sdfasd"
+123
+{ "123" : 123 }
+3.1e124
diff --git a/test/parsing/cases/am_stuff.json.gold b/test/parsing/cases/am_stuff.json.gold
new file mode 100644
index 0000000..bf3a5bb
--- /dev/null
+++ b/test/parsing/cases/am_stuff.json.gold
@@ -0,0 +1,14 @@
+map open '{'
+map close '}'
+array open '['
+array close ']'
+array open '['
+array close ']'
+string: 'sdfasd'
+integer: 123
+map open '{'
+key: '123'
+integer: 123
+map close '}'
+double: 3.1e+124
+memory leaks: 0
diff --git a/test/parsing/cases/ap_array_open.json b/test/parsing/cases/ap_array_open.json
new file mode 100644
index 0000000..558ed37
--- /dev/null
+++ b/test/parsing/cases/ap_array_open.json
@@ -0,0 +1 @@
+[
diff --git a/test/parsing/cases/ap_array_open.json.gold b/test/parsing/cases/ap_array_open.json.gold
new file mode 100644
index 0000000..478b6b9
--- /dev/null
+++ b/test/parsing/cases/ap_array_open.json.gold
@@ -0,0 +1,2 @@
+array open '['
+memory leaks: 0
diff --git a/test/parsing/cases/ap_eof_str.json b/test/parsing/cases/ap_eof_str.json
new file mode 100644
index 0000000..6a21793
--- /dev/null
+++ b/test/parsing/cases/ap_eof_str.json
@@ -0,0 +1 @@
+"abc \ No newline at end of file
diff --git a/test/parsing/cases/ap_eof_str.json.gold b/test/parsing/cases/ap_eof_str.json.gold
new file mode 100644
index 0000000..736730b
--- /dev/null
+++ b/test/parsing/cases/ap_eof_str.json.gold
@@ -0,0 +1 @@
+memory leaks: 0
diff --git a/test/parsing/cases/ap_map_open.json b/test/parsing/cases/ap_map_open.json
new file mode 100644
index 0000000..98232c6
--- /dev/null
+++ b/test/parsing/cases/ap_map_open.json
@@ -0,0 +1 @@
+{
diff --git a/test/parsing/cases/ap_map_open.json.gold b/test/parsing/cases/ap_map_open.json.gold
new file mode 100644
index 0000000..ab1f33d
--- /dev/null
+++ b/test/parsing/cases/ap_map_open.json.gold
@@ -0,0 +1,2 @@
+map open '{'
+memory leaks: 0
diff --git a/test/parsing/cases/ap_partial_ok.json b/test/parsing/cases/ap_partial_ok.json
new file mode 100644
index 0000000..2fbd027
--- /dev/null
+++ b/test/parsing/cases/ap_partial_ok.json
@@ -0,0 +1 @@
+[ "foo", "bar"
diff --git a/test/parsing/cases/ap_partial_ok.json.gold b/test/parsing/cases/ap_partial_ok.json.gold
new file mode 100644
index 0000000..9f754c7
--- /dev/null
+++ b/test/parsing/cases/ap_partial_ok.json.gold
@@ -0,0 +1,4 @@
+array open '['
+string: 'foo'
+string: 'bar'
+memory leaks: 0
diff --git a/test/parsing/cases/array.json b/test/parsing/cases/array.json
new file mode 100644
index 0000000..f76058d
--- /dev/null
+++ b/test/parsing/cases/array.json
@@ -0,0 +1,6 @@
+["foo",
+ "bar", "baz",
+ true,false,null,{"key":"value"},
+ [null,null,null,[]],
+ "\n\r\\"
+]
diff --git a/test/parsing/cases/array.json.gold b/test/parsing/cases/array.json.gold
new file mode 100644
index 0000000..477559d
--- /dev/null
+++ b/test/parsing/cases/array.json.gold
@@ -0,0 +1,22 @@
+array open '['
+string: 'foo'
+string: 'bar'
+string: 'baz'
+bool: true
+bool: false
+null
+map open '{'
+key: 'key'
+string: 'value'
+map close '}'
+array open '['
+null
+null
+null
+array open '['
+array close ']'
+array close ']'
+string: '
+ \'
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/array_close.json b/test/parsing/cases/array_close.json
new file mode 100644
index 0000000..079b579
--- /dev/null
+++ b/test/parsing/cases/array_close.json
@@ -0,0 +1 @@
+]
diff --git a/test/parsing/cases/array_close.json.gold b/test/parsing/cases/array_close.json.gold
new file mode 100644
index 0000000..972fd39
--- /dev/null
+++ b/test/parsing/cases/array_close.json.gold
@@ -0,0 +1,2 @@
+parse error: unallowed token at this point in JSON text
+memory leaks: 0
diff --git a/test/parsing/cases/bignums.json b/test/parsing/cases/bignums.json
new file mode 100644
index 0000000..75aca9a
--- /dev/null
+++ b/test/parsing/cases/bignums.json
@@ -0,0 +1 @@
+[ 9223372036854775807, -9223372036854775807 ]
diff --git a/test/parsing/cases/bignums.json.gold b/test/parsing/cases/bignums.json.gold
new file mode 100644
index 0000000..8bb3b1e
--- /dev/null
+++ b/test/parsing/cases/bignums.json.gold
@@ -0,0 +1,5 @@
+array open '['
+integer: 9223372036854775807
+integer: -9223372036854775807
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/bogus_char.json b/test/parsing/cases/bogus_char.json
new file mode 100644
index 0000000..8163bd8
--- /dev/null
+++ b/test/parsing/cases/bogus_char.json
@@ -0,0 +1,4 @@
+["this","is","what","should","be",
+ "a happy bit of json",
+ "but someone, misspelled \"true\"", ture,
+ "who says JSON is easy for humans to generate?"]
diff --git a/test/parsing/cases/bogus_char.json.gold b/test/parsing/cases/bogus_char.json.gold
new file mode 100644
index 0000000..0c68a49
--- /dev/null
+++ b/test/parsing/cases/bogus_char.json.gold
@@ -0,0 +1,10 @@
+array open '['
+string: 'this'
+string: 'is'
+string: 'what'
+string: 'should'
+string: 'be'
+string: 'a happy bit of json'
+string: 'but someone, misspelled "true"'
+lexical error: invalid string in json text.
+memory leaks: 0
diff --git a/test/parsing/cases/codepoints_from_unicode_org.json b/test/parsing/cases/codepoints_from_unicode_org.json
new file mode 100644
index 0000000..f91f3be
--- /dev/null
+++ b/test/parsing/cases/codepoints_from_unicode_org.json
@@ -0,0 +1 @@
+"\u004d\u0430\u4e8c\ud800\udf02"
diff --git a/test/parsing/cases/codepoints_from_unicode_org.json.gold b/test/parsing/cases/codepoints_from_unicode_org.json.gold
new file mode 100644
index 0000000..f359a1b
--- /dev/null
+++ b/test/parsing/cases/codepoints_from_unicode_org.json.gold
@@ -0,0 +1,2 @@
+string: 'Mа二𐌂'
+memory leaks: 0
diff --git a/test/parsing/cases/deep_arrays.json b/test/parsing/cases/deep_arrays.json
new file mode 100644
index 0000000..82d1b0d
--- /dev/null
+++ b/test/parsing/cases/deep_arrays.json
@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] \ No newline at end of file
diff --git a/test/parsing/cases/deep_arrays.json.gold b/test/parsing/cases/deep_arrays.json.gold
new file mode 100644
index 0000000..4d5cd99
--- /dev/null
+++ b/test/parsing/cases/deep_arrays.json.gold
@@ -0,0 +1,2049 @@
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array open '['
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/difficult_json_c_test_case.json b/test/parsing/cases/difficult_json_c_test_case.json
new file mode 100644
index 0000000..6998f55
--- /dev/null
+++ b/test/parsing/cases/difficult_json_c_test_case.json
@@ -0,0 +1 @@
+{ "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": [ { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML", "markup"] } ] } } }
diff --git a/test/parsing/cases/difficult_json_c_test_case.json.gold b/test/parsing/cases/difficult_json_c_test_case.json.gold
new file mode 100644
index 0000000..c3adc11
--- /dev/null
+++ b/test/parsing/cases/difficult_json_c_test_case.json.gold
@@ -0,0 +1,36 @@
+map open '{'
+key: 'glossary'
+map open '{'
+key: 'title'
+string: 'example glossary'
+key: 'GlossDiv'
+map open '{'
+key: 'title'
+string: 'S'
+key: 'GlossList'
+array open '['
+map open '{'
+key: 'ID'
+string: 'SGML'
+key: 'SortAs'
+string: 'SGML'
+key: 'GlossTerm'
+string: 'Standard Generalized Markup Language'
+key: 'Acronym'
+string: 'SGML'
+key: 'Abbrev'
+string: 'ISO 8879:1986'
+key: 'GlossDef'
+string: 'A meta-markup language, used to create markup languages such as DocBook.'
+key: 'GlossSeeAlso'
+array open '['
+string: 'GML'
+string: 'XML'
+string: 'markup'
+array close ']'
+map close '}'
+array close ']'
+map close '}'
+map close '}'
+map close '}'
+memory leaks: 0
diff --git a/test/parsing/cases/doubles.json b/test/parsing/cases/doubles.json
new file mode 100644
index 0000000..626f21c
--- /dev/null
+++ b/test/parsing/cases/doubles.json
@@ -0,0 +1 @@
+[ 0.1e2, 1e1, 3.141569, 10000000000000e-10]
diff --git a/test/parsing/cases/doubles.json.gold b/test/parsing/cases/doubles.json.gold
new file mode 100644
index 0000000..c0ea726
--- /dev/null
+++ b/test/parsing/cases/doubles.json.gold
@@ -0,0 +1,7 @@
+array open '['
+double: 10
+double: 10
+double: 3.14157
+double: 1000
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/doubles_in_array.json b/test/parsing/cases/doubles_in_array.json
new file mode 100644
index 0000000..06bf727
--- /dev/null
+++ b/test/parsing/cases/doubles_in_array.json
@@ -0,0 +1 @@
+[0.00011999999999999999, 6E-06, 6E-06, 1E-06, 1E-06]
diff --git a/test/parsing/cases/doubles_in_array.json.gold b/test/parsing/cases/doubles_in_array.json.gold
new file mode 100644
index 0000000..57f5b9a
--- /dev/null
+++ b/test/parsing/cases/doubles_in_array.json.gold
@@ -0,0 +1,8 @@
+array open '['
+double: 0.00012
+double: 6e-06
+double: 6e-06
+double: 1e-06
+double: 1e-06
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/empty_array.json b/test/parsing/cases/empty_array.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/parsing/cases/empty_array.json
@@ -0,0 +1 @@
+[] \ No newline at end of file
diff --git a/test/parsing/cases/empty_array.json.gold b/test/parsing/cases/empty_array.json.gold
new file mode 100644
index 0000000..f069c8f
--- /dev/null
+++ b/test/parsing/cases/empty_array.json.gold
@@ -0,0 +1,3 @@
+array open '['
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/empty_string.json b/test/parsing/cases/empty_string.json
new file mode 100644
index 0000000..e16c76d
--- /dev/null
+++ b/test/parsing/cases/empty_string.json
@@ -0,0 +1 @@
+""
diff --git a/test/parsing/cases/empty_string.json.gold b/test/parsing/cases/empty_string.json.gold
new file mode 100644
index 0000000..c197bba
--- /dev/null
+++ b/test/parsing/cases/empty_string.json.gold
@@ -0,0 +1,2 @@
+string: ''
+memory leaks: 0
diff --git a/test/parsing/cases/escaped_bulgarian.json b/test/parsing/cases/escaped_bulgarian.json
new file mode 100644
index 0000000..9ce1d1c
--- /dev/null
+++ b/test/parsing/cases/escaped_bulgarian.json
@@ -0,0 +1,4 @@
+["\u0414\u0430",
+ "\u041c\u0443",
+ "\u0415\u0431\u0430",
+ "\u041c\u0430\u0439\u043a\u0430\u0442\u0430"]
diff --git a/test/parsing/cases/escaped_bulgarian.json.gold b/test/parsing/cases/escaped_bulgarian.json.gold
new file mode 100644
index 0000000..a0c9ae9
--- /dev/null
+++ b/test/parsing/cases/escaped_bulgarian.json.gold
@@ -0,0 +1,7 @@
+array open '['
+string: 'Да'
+string: 'Му'
+string: 'Еба'
+string: 'Майката'
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/escaped_foobar.json b/test/parsing/cases/escaped_foobar.json
new file mode 100644
index 0000000..2c0e25f
--- /dev/null
+++ b/test/parsing/cases/escaped_foobar.json
@@ -0,0 +1 @@
+"\u0066\u006f\u006f\u0062\u0061\u0072"
diff --git a/test/parsing/cases/escaped_foobar.json.gold b/test/parsing/cases/escaped_foobar.json.gold
new file mode 100644
index 0000000..5753c64
--- /dev/null
+++ b/test/parsing/cases/escaped_foobar.json.gold
@@ -0,0 +1,2 @@
+string: 'foobar'
+memory leaks: 0
diff --git a/test/parsing/cases/false.json b/test/parsing/cases/false.json
new file mode 100644
index 0000000..c508d53
--- /dev/null
+++ b/test/parsing/cases/false.json
@@ -0,0 +1 @@
+false
diff --git a/test/parsing/cases/false.json.gold b/test/parsing/cases/false.json.gold
new file mode 100644
index 0000000..e55fa1f
--- /dev/null
+++ b/test/parsing/cases/false.json.gold
@@ -0,0 +1,2 @@
+bool: false
+memory leaks: 0
diff --git a/test/parsing/cases/fg_false_then_garbage.json b/test/parsing/cases/fg_false_then_garbage.json
new file mode 100644
index 0000000..78f4e96
--- /dev/null
+++ b/test/parsing/cases/fg_false_then_garbage.json
@@ -0,0 +1 @@
+falsex \ No newline at end of file
diff --git a/test/parsing/cases/fg_false_then_garbage.json.gold b/test/parsing/cases/fg_false_then_garbage.json.gold
new file mode 100644
index 0000000..fe8fc1a
--- /dev/null
+++ b/test/parsing/cases/fg_false_then_garbage.json.gold
@@ -0,0 +1,3 @@
+bool: false
+parse error: trailing garbage
+memory leaks: 0
diff --git a/test/parsing/cases/fg_issue_7.json b/test/parsing/cases/fg_issue_7.json
new file mode 100644
index 0000000..77152a9
--- /dev/null
+++ b/test/parsing/cases/fg_issue_7.json
@@ -0,0 +1 @@
+2009-10-20@20:38:21.539575
diff --git a/test/parsing/cases/fg_issue_7.json.gold b/test/parsing/cases/fg_issue_7.json.gold
new file mode 100644
index 0000000..4d0de0f
--- /dev/null
+++ b/test/parsing/cases/fg_issue_7.json.gold
@@ -0,0 +1,3 @@
+integer: 2009
+parse error: trailing garbage
+memory leaks: 0
diff --git a/test/parsing/cases/fg_null_then_garbage.json b/test/parsing/cases/fg_null_then_garbage.json
new file mode 100644
index 0000000..7b65b35
--- /dev/null
+++ b/test/parsing/cases/fg_null_then_garbage.json
@@ -0,0 +1 @@
+nullx
diff --git a/test/parsing/cases/fg_null_then_garbage.json.gold b/test/parsing/cases/fg_null_then_garbage.json.gold
new file mode 100644
index 0000000..349235c
--- /dev/null
+++ b/test/parsing/cases/fg_null_then_garbage.json.gold
@@ -0,0 +1,3 @@
+null
+parse error: trailing garbage
+memory leaks: 0
diff --git a/test/parsing/cases/fg_true_then_garbage.json b/test/parsing/cases/fg_true_then_garbage.json
new file mode 100644
index 0000000..31f9deb
--- /dev/null
+++ b/test/parsing/cases/fg_true_then_garbage.json
@@ -0,0 +1 @@
+truex
diff --git a/test/parsing/cases/fg_true_then_garbage.json.gold b/test/parsing/cases/fg_true_then_garbage.json.gold
new file mode 100644
index 0000000..73af6ce
--- /dev/null
+++ b/test/parsing/cases/fg_true_then_garbage.json.gold
@@ -0,0 +1,3 @@
+bool: true
+parse error: trailing garbage
+memory leaks: 0
diff --git a/test/parsing/cases/four_byte_utf8.json b/test/parsing/cases/four_byte_utf8.json
new file mode 100644
index 0000000..582c575
--- /dev/null
+++ b/test/parsing/cases/four_byte_utf8.json
@@ -0,0 +1,2 @@
+{ "U+10ABCD": "􊯍" }
+
diff --git a/test/parsing/cases/four_byte_utf8.json.gold b/test/parsing/cases/four_byte_utf8.json.gold
new file mode 100644
index 0000000..f6260f2
--- /dev/null
+++ b/test/parsing/cases/four_byte_utf8.json.gold
@@ -0,0 +1,5 @@
+map open '{'
+key: 'U+10ABCD'
+string: '􊯍'
+map close '}'
+memory leaks: 0
diff --git a/test/parsing/cases/high_overflow.json b/test/parsing/cases/high_overflow.json
new file mode 100644
index 0000000..8136b73
--- /dev/null
+++ b/test/parsing/cases/high_overflow.json
@@ -0,0 +1 @@
+9223372036854775808 \ No newline at end of file
diff --git a/test/parsing/cases/high_overflow.json.gold b/test/parsing/cases/high_overflow.json.gold
new file mode 100644
index 0000000..19c4b77
--- /dev/null
+++ b/test/parsing/cases/high_overflow.json.gold
@@ -0,0 +1,2 @@
+parse error: integer overflow
+memory leaks: 0
diff --git a/test/parsing/cases/integers.json b/test/parsing/cases/integers.json
new file mode 100644
index 0000000..c50e4c9
--- /dev/null
+++ b/test/parsing/cases/integers.json
@@ -0,0 +1,3 @@
+[ 1,2,3,4,5,6,7,
+ 123456789 , -123456789,
+ 2147483647, -2147483647 ]
diff --git a/test/parsing/cases/integers.json.gold b/test/parsing/cases/integers.json.gold
new file mode 100644
index 0000000..7ac4bee
--- /dev/null
+++ b/test/parsing/cases/integers.json.gold
@@ -0,0 +1,14 @@
+array open '['
+integer: 1
+integer: 2
+integer: 3
+integer: 4
+integer: 5
+integer: 6
+integer: 7
+integer: 123456789
+integer: -123456789
+integer: 2147483647
+integer: -2147483647
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/invalid_utf8.json b/test/parsing/cases/invalid_utf8.json
new file mode 100644
index 0000000..12f1718
--- /dev/null
+++ b/test/parsing/cases/invalid_utf8.json
@@ -0,0 +1 @@
+["Да М Еба Майката"]
diff --git a/test/parsing/cases/invalid_utf8.json.gold b/test/parsing/cases/invalid_utf8.json.gold
new file mode 100644
index 0000000..c0dec77
--- /dev/null
+++ b/test/parsing/cases/invalid_utf8.json.gold
@@ -0,0 +1,3 @@
+array open '['
+lexical error: invalid bytes in UTF8 string.
+memory leaks: 0
diff --git a/test/parsing/cases/isolated_surrogate_marker.json b/test/parsing/cases/isolated_surrogate_marker.json
new file mode 100644
index 0000000..36959f4
--- /dev/null
+++ b/test/parsing/cases/isolated_surrogate_marker.json
@@ -0,0 +1 @@
+"\ud800"
diff --git a/test/parsing/cases/isolated_surrogate_marker.json.gold b/test/parsing/cases/isolated_surrogate_marker.json.gold
new file mode 100644
index 0000000..cca172e
--- /dev/null
+++ b/test/parsing/cases/isolated_surrogate_marker.json.gold
@@ -0,0 +1,2 @@
+string: '?'
+memory leaks: 0
diff --git a/test/parsing/cases/leading_zero_in_number.json b/test/parsing/cases/leading_zero_in_number.json
new file mode 100644
index 0000000..959f5ba
--- /dev/null
+++ b/test/parsing/cases/leading_zero_in_number.json
@@ -0,0 +1 @@
+{ "bad thing": 01 }
diff --git a/test/parsing/cases/leading_zero_in_number.json.gold b/test/parsing/cases/leading_zero_in_number.json.gold
new file mode 100644
index 0000000..1a1580d
--- /dev/null
+++ b/test/parsing/cases/leading_zero_in_number.json.gold
@@ -0,0 +1,5 @@
+map open '{'
+key: 'bad thing'
+integer: 0
+parse error: after key and value, inside map, I expect ',' or '}'
+memory leaks: 0
diff --git a/test/parsing/cases/lonely_minus_sign.json b/test/parsing/cases/lonely_minus_sign.json
new file mode 100644
index 0000000..85f69bd
--- /dev/null
+++ b/test/parsing/cases/lonely_minus_sign.json
@@ -0,0 +1,7 @@
+[
+ "foo", true,
+ true, "blue",
+ "baby where are you?", "oh boo hoo!",
+ -
+]
+
diff --git a/test/parsing/cases/lonely_minus_sign.json.gold b/test/parsing/cases/lonely_minus_sign.json.gold
new file mode 100644
index 0000000..d15ede9
--- /dev/null
+++ b/test/parsing/cases/lonely_minus_sign.json.gold
@@ -0,0 +1,9 @@
+array open '['
+string: 'foo'
+bool: true
+bool: true
+string: 'blue'
+string: 'baby where are you?'
+string: 'oh boo hoo!'
+lexical error: malformed number, a digit is required after the minus sign.
+memory leaks: 0
diff --git a/test/parsing/cases/lonely_number.json b/test/parsing/cases/lonely_number.json
new file mode 100644
index 0000000..e2e107a
--- /dev/null
+++ b/test/parsing/cases/lonely_number.json
@@ -0,0 +1 @@
+123456789 \ No newline at end of file
diff --git a/test/parsing/cases/lonely_number.json.gold b/test/parsing/cases/lonely_number.json.gold
new file mode 100644
index 0000000..181fdfa
--- /dev/null
+++ b/test/parsing/cases/lonely_number.json.gold
@@ -0,0 +1,2 @@
+integer: 123456789
+memory leaks: 0
diff --git a/test/parsing/cases/low_overflow.json b/test/parsing/cases/low_overflow.json
new file mode 100644
index 0000000..9af921b
--- /dev/null
+++ b/test/parsing/cases/low_overflow.json
@@ -0,0 +1 @@
+-9223372036854775808 \ No newline at end of file
diff --git a/test/parsing/cases/low_overflow.json.gold b/test/parsing/cases/low_overflow.json.gold
new file mode 100644
index 0000000..19c4b77
--- /dev/null
+++ b/test/parsing/cases/low_overflow.json.gold
@@ -0,0 +1,2 @@
+parse error: integer overflow
+memory leaks: 0
diff --git a/test/parsing/cases/map_close.json b/test/parsing/cases/map_close.json
new file mode 100644
index 0000000..5c34318
--- /dev/null
+++ b/test/parsing/cases/map_close.json
@@ -0,0 +1 @@
+}
diff --git a/test/parsing/cases/map_close.json.gold b/test/parsing/cases/map_close.json.gold
new file mode 100644
index 0000000..972fd39
--- /dev/null
+++ b/test/parsing/cases/map_close.json.gold
@@ -0,0 +1,2 @@
+parse error: unallowed token at this point in JSON text
+memory leaks: 0
diff --git a/test/parsing/cases/missing_integer_after_decimal_point.json b/test/parsing/cases/missing_integer_after_decimal_point.json
new file mode 100644
index 0000000..2369f4b
--- /dev/null
+++ b/test/parsing/cases/missing_integer_after_decimal_point.json
@@ -0,0 +1 @@
+10.e2
diff --git a/test/parsing/cases/missing_integer_after_decimal_point.json.gold b/test/parsing/cases/missing_integer_after_decimal_point.json.gold
new file mode 100644
index 0000000..c2e7e2e
--- /dev/null
+++ b/test/parsing/cases/missing_integer_after_decimal_point.json.gold
@@ -0,0 +1,2 @@
+lexical error: malformed number, a digit is required after the decimal point.
+memory leaks: 0
diff --git a/test/parsing/cases/missing_integer_after_exponent.json b/test/parsing/cases/missing_integer_after_exponent.json
new file mode 100644
index 0000000..a62b45d
--- /dev/null
+++ b/test/parsing/cases/missing_integer_after_exponent.json
@@ -0,0 +1 @@
+10e
diff --git a/test/parsing/cases/missing_integer_after_exponent.json.gold b/test/parsing/cases/missing_integer_after_exponent.json.gold
new file mode 100644
index 0000000..5089681
--- /dev/null
+++ b/test/parsing/cases/missing_integer_after_exponent.json.gold
@@ -0,0 +1,2 @@
+lexical error: malformed number, a digit is required after the exponent.
+memory leaks: 0
diff --git a/test/parsing/cases/multiple.json b/test/parsing/cases/multiple.json
new file mode 100644
index 0000000..b573db0
--- /dev/null
+++ b/test/parsing/cases/multiple.json
@@ -0,0 +1,3 @@
+
+{}
+{}
diff --git a/test/parsing/cases/multiple.json.gold b/test/parsing/cases/multiple.json.gold
new file mode 100644
index 0000000..0f6f3df
--- /dev/null
+++ b/test/parsing/cases/multiple.json.gold
@@ -0,0 +1,4 @@
+map open '{'
+map close '}'
+parse error: trailing garbage
+memory leaks: 0
diff --git a/test/parsing/cases/non_utf8_char_in_string.json b/test/parsing/cases/non_utf8_char_in_string.json
new file mode 100644
index 0000000..253a664
--- /dev/null
+++ b/test/parsing/cases/non_utf8_char_in_string.json
@@ -0,0 +1 @@
+{"CoreletAPIVersion":2,"CoreletType":"standalone","documentation":"A corelet that provides the capability to upload a folders contents into a users locker.","functions":[{"documentation":"Displays a dialog box that allows user to select a folder on the local system.","name":"ShowBrowseDialog","parameters":[{"documentation":"The callback function for results.","name":"callback","required":true,"type":"callback"}]},{"documentation":"Uploads all mp3 files in the folder provided.","name":"UploadFolder","parameters":[{"documentation":"The path to upload mp3 files from.","name":"path","required":true,"type":"string"},{"documentation":"The callback function for progress.","name":"callback","required":true,"type":"callback"}]},{"documentation":"Returns the server name to the current locker service.","name":"GetLockerService","parameters":[]},{"documentation":"Changes the name of the locker service.","name":"SetLockerService","parameters":[{"documentation":"The value of the locker service to set active.","name":"LockerService","required":true,"type":"string"}]},{"documentation":"Downloads locker files to the suggested folder.","name":"DownloadFile","parameters":[{"documentation":"The origin path of the locker file.","name":"path","required":true,"type":"string"},{"documentation":"The Window destination path of the locker file.","name":"destination","required":true,"type":"integer"},{"documentation":"The callback function for progress.","name":"callback","required":true,"type":"callback"}]}],"name":"LockerUploader","version":{"major":0,"micro":1,"minor":0},"versionString":"0.0.1"} \ No newline at end of file
diff --git a/test/parsing/cases/non_utf8_char_in_string.json.gold b/test/parsing/cases/non_utf8_char_in_string.json.gold
new file mode 100644
index 0000000..5e3c580
--- /dev/null
+++ b/test/parsing/cases/non_utf8_char_in_string.json.gold
@@ -0,0 +1,8 @@
+map open '{'
+key: 'CoreletAPIVersion'
+integer: 2
+key: 'CoreletType'
+string: 'standalone'
+key: 'documentation'
+lexical error: invalid bytes in UTF8 string.
+memory leaks: 0
diff --git a/test/parsing/cases/np_partial_bad.json b/test/parsing/cases/np_partial_bad.json
new file mode 100644
index 0000000..2fbd027
--- /dev/null
+++ b/test/parsing/cases/np_partial_bad.json
@@ -0,0 +1 @@
+[ "foo", "bar"
diff --git a/test/parsing/cases/np_partial_bad.json.gold b/test/parsing/cases/np_partial_bad.json.gold
new file mode 100644
index 0000000..b981bda
--- /dev/null
+++ b/test/parsing/cases/np_partial_bad.json.gold
@@ -0,0 +1,5 @@
+array open '['
+string: 'foo'
+string: 'bar'
+parse error: premature EOF
+memory leaks: 0
diff --git a/test/parsing/cases/null.json b/test/parsing/cases/null.json
new file mode 100644
index 0000000..19765bd
--- /dev/null
+++ b/test/parsing/cases/null.json
@@ -0,0 +1 @@
+null
diff --git a/test/parsing/cases/null.json.gold b/test/parsing/cases/null.json.gold
new file mode 100644
index 0000000..94ad0fa
--- /dev/null
+++ b/test/parsing/cases/null.json.gold
@@ -0,0 +1,2 @@
+null
+memory leaks: 0
diff --git a/test/parsing/cases/nulls_and_bools.json b/test/parsing/cases/nulls_and_bools.json
new file mode 100644
index 0000000..65eb01f
--- /dev/null
+++ b/test/parsing/cases/nulls_and_bools.json
@@ -0,0 +1,5 @@
+{
+ "boolean, true": true,
+ "boolean, false": false,
+ "null": null
+}
diff --git a/test/parsing/cases/nulls_and_bools.json.gold b/test/parsing/cases/nulls_and_bools.json.gold
new file mode 100644
index 0000000..51f990b
--- /dev/null
+++ b/test/parsing/cases/nulls_and_bools.json.gold
@@ -0,0 +1,9 @@
+map open '{'
+key: 'boolean, true'
+bool: true
+key: 'boolean, false'
+bool: false
+key: 'null'
+null
+map close '}'
+memory leaks: 0
diff --git a/test/parsing/cases/simple.json b/test/parsing/cases/simple.json
new file mode 100644
index 0000000..9ed80c9
--- /dev/null
+++ b/test/parsing/cases/simple.json
@@ -0,0 +1,5 @@
+{
+ "this": "is",
+ "really": "simple",
+ "json": "right?"
+}
diff --git a/test/parsing/cases/simple.json.gold b/test/parsing/cases/simple.json.gold
new file mode 100644
index 0000000..80fcad2
--- /dev/null
+++ b/test/parsing/cases/simple.json.gold
@@ -0,0 +1,9 @@
+map open '{'
+key: 'this'
+string: 'is'
+key: 'really'
+string: 'simple'
+key: 'json'
+string: 'right?'
+map close '}'
+memory leaks: 0
diff --git a/test/parsing/cases/simple_with_comments.json b/test/parsing/cases/simple_with_comments.json
new file mode 100644
index 0000000..3b79bba
--- /dev/null
+++ b/test/parsing/cases/simple_with_comments.json
@@ -0,0 +1,11 @@
+{
+ "this": "is", // ignore this
+ "really": "simple",
+ /* ignore
+this
+too * /
+** //
+(/
+******/
+ "json": "right?"
+}
diff --git a/test/parsing/cases/simple_with_comments.json.gold b/test/parsing/cases/simple_with_comments.json.gold
new file mode 100644
index 0000000..d222e9b
--- /dev/null
+++ b/test/parsing/cases/simple_with_comments.json.gold
@@ -0,0 +1,5 @@
+map open '{'
+key: 'this'
+string: 'is'
+lexical error: probable comment found in input text, comments are not enabled.
+memory leaks: 0
diff --git a/test/parsing/cases/string_invalid_escape.json b/test/parsing/cases/string_invalid_escape.json
new file mode 100644
index 0000000..c554182
--- /dev/null
+++ b/test/parsing/cases/string_invalid_escape.json
@@ -0,0 +1 @@
+["\n foo \/ bar \r\f\\\uffff\t\b\"\\ and you can't escape thi\s"]
diff --git a/test/parsing/cases/string_invalid_escape.json.gold b/test/parsing/cases/string_invalid_escape.json.gold
new file mode 100644
index 0000000..439df43
--- /dev/null
+++ b/test/parsing/cases/string_invalid_escape.json.gold
@@ -0,0 +1,3 @@
+array open '['
+lexical error: inside a string, '\' occurs before a character which it may not.
+memory leaks: 0
diff --git a/test/parsing/cases/string_invalid_hex_char.json b/test/parsing/cases/string_invalid_hex_char.json
new file mode 100644
index 0000000..bde7ee9
--- /dev/null
+++ b/test/parsing/cases/string_invalid_hex_char.json
@@ -0,0 +1 @@
+"foo foo, blah blah \u0123 \u4567 \u89ab \uc/ef \uABCD \uEFFE bar baz bing"
diff --git a/test/parsing/cases/string_invalid_hex_char.json.gold b/test/parsing/cases/string_invalid_hex_char.json.gold
new file mode 100644
index 0000000..8498792
--- /dev/null
+++ b/test/parsing/cases/string_invalid_hex_char.json.gold
@@ -0,0 +1,2 @@
+lexical error: invalid (non-hex) character occurs after '\u' inside string.
+memory leaks: 0
diff --git a/test/parsing/cases/string_with_escapes.json b/test/parsing/cases/string_with_escapes.json
new file mode 100644
index 0000000..59cc940
--- /dev/null
+++ b/test/parsing/cases/string_with_escapes.json
@@ -0,0 +1,3 @@
+["\n foo \/ bar \r\f\\\uffff\t\b\"\\",
+ "\"and this string has an escape at the beginning",
+ "and this string has no escapes" ]
diff --git a/test/parsing/cases/string_with_escapes.json.gold b/test/parsing/cases/string_with_escapes.json.gold
new file mode 100644
index 0000000..086a9dc
--- /dev/null
+++ b/test/parsing/cases/string_with_escapes.json.gold
@@ -0,0 +1,7 @@
+array open '['
+string: '
+ foo / bar \￿ "\'
+string: '"and this string has an escape at the beginning'
+string: 'and this string has no escapes'
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/string_with_invalid_newline.json b/test/parsing/cases/string_with_invalid_newline.json
new file mode 100644
index 0000000..0e3ea0d
--- /dev/null
+++ b/test/parsing/cases/string_with_invalid_newline.json
@@ -0,0 +1,2 @@
+"la di dah. this is a string, and I can do this, \n, but not this
+"
diff --git a/test/parsing/cases/string_with_invalid_newline.json.gold b/test/parsing/cases/string_with_invalid_newline.json.gold
new file mode 100644
index 0000000..c38bdef
--- /dev/null
+++ b/test/parsing/cases/string_with_invalid_newline.json.gold
@@ -0,0 +1,2 @@
+lexical error: invalid character inside string.
+memory leaks: 0
diff --git a/test/parsing/cases/three_byte_utf8.json b/test/parsing/cases/three_byte_utf8.json
new file mode 100644
index 0000000..9c9e656
--- /dev/null
+++ b/test/parsing/cases/three_byte_utf8.json
@@ -0,0 +1 @@
+{"matzue": "松江", "asakusa": "浅草"}
diff --git a/test/parsing/cases/three_byte_utf8.json.gold b/test/parsing/cases/three_byte_utf8.json.gold
new file mode 100644
index 0000000..7d95fae
--- /dev/null
+++ b/test/parsing/cases/three_byte_utf8.json.gold
@@ -0,0 +1,7 @@
+map open '{'
+key: 'matzue'
+string: '松江'
+key: 'asakusa'
+string: '浅草'
+map close '}'
+memory leaks: 0
diff --git a/test/parsing/cases/true.json b/test/parsing/cases/true.json
new file mode 100644
index 0000000..27ba77d
--- /dev/null
+++ b/test/parsing/cases/true.json
@@ -0,0 +1 @@
+true
diff --git a/test/parsing/cases/true.json.gold b/test/parsing/cases/true.json.gold
new file mode 100644
index 0000000..0858bf7
--- /dev/null
+++ b/test/parsing/cases/true.json.gold
@@ -0,0 +1,2 @@
+bool: true
+memory leaks: 0
diff --git a/test/parsing/cases/unescaped_bulgarian.json b/test/parsing/cases/unescaped_bulgarian.json
new file mode 100644
index 0000000..f9a70a6
--- /dev/null
+++ b/test/parsing/cases/unescaped_bulgarian.json
@@ -0,0 +1 @@
+["Да Му Еба Майката"]
diff --git a/test/parsing/cases/unescaped_bulgarian.json.gold b/test/parsing/cases/unescaped_bulgarian.json.gold
new file mode 100644
index 0000000..8db076e
--- /dev/null
+++ b/test/parsing/cases/unescaped_bulgarian.json.gold
@@ -0,0 +1,4 @@
+array open '['
+string: 'Да Му Еба Майката'
+array close ']'
+memory leaks: 0
diff --git a/test/parsing/cases/zerobyte.json b/test/parsing/cases/zerobyte.json
new file mode 100644
index 0000000..09c5044
--- /dev/null
+++ b/test/parsing/cases/zerobyte.json
@@ -0,0 +1 @@
+"\u0000"
diff --git a/test/parsing/cases/zerobyte.json.gold b/test/parsing/cases/zerobyte.json.gold
new file mode 100644
index 0000000..b0c58fc
--- /dev/null
+++ b/test/parsing/cases/zerobyte.json.gold
Binary files differ