test suite test json parser
import idealmachinecharactersunicode handler
private json parser make parser()
return json parser • new(unicode handlerinstance)
test case test tokenizer()
words : parsertest tokenize(" \"foo\" \"bar\" ")
assert wordssize == 2
assert words[0] == "foo"
assert words[1] == "bar"
words2 : parsertest tokenize("[ \"foo\" , \"bar\", -68 ] ")
assert words2size == 7
assert words2[0] == json tokenOPEN BRACKET
assert words2[1] == "foo"
assert words2[2] == json tokenCOMMA
assert words2[3] == "bar"
assert words2[4] == json tokenCOMMA
assert words2[5] == -68
assert words2[6] == json tokenCLOSE BRACKET
words3 : parsertest tokenize("{ \"foo\" : \"bar\", \"baz\":68, \"x\":\"\\\"y\\\"\" } ")
assert words3size == 13
assert words3[0] == json tokenOPEN BRACE
assert words3[1] == "foo"
assert words3[2] == json tokenCOLON
assert words3[3] == "bar"
assert words3[4] == json tokenCOMMA
assert words3[5] == "baz"
assert words3[6] == json tokenCOLON
assert words3[7] == 68
assert words3[8] == json tokenCOMMA
assert words3[9] == "x"
assert words3[10] == json tokenCOLON
assert words3[11] == "\"y\""
assert words3[12] == json tokenCLOSE BRACE
words4 : parsertest tokenize(" \"special: \\\\ \\u0066\\u006f\\u006f\" ")
assert words4size == 1
assert words4[0] == "special: \\ foo"
words5 : parsertest tokenize("[ true , false, null ] ")
assert words5size == 7
assert words5[0] == json tokenOPEN BRACKET
w51 : words5[1]
assert w51 !> boolean
assert words5[2] == json tokenCOMMA
w53 : words5[3]
assert !(w53 !> boolean)
assert words5[4] == json tokenCOMMA
w55 : words5[5]
assert (w55 !> value) is null
assert words5[6] == json tokenCLOSE BRACKET
test case test parser()
parsed0 : parserparse(" \"foo\" ")
assert parsed0 == "foo"
parsed1 : parserparse(" 68 ")
assert parsed1 == 68
parsed2 : parserparse(" false ")
assert (parsed2 !> boolean) == false
parsed3 : parserparse("{ \"foo\" : \"bar\", \"baz\":68 } ") !> readonly dictionary[string, readonly value]
assert parsed3size == 2
assert parsed3get("foo") == "bar"
assert parsed3get("baz") == 68
parsed4 : parserparse("[ \"foo\" , \"bar\", -68 ] ") !> readonly list[readonly value]
assert parsed4size == 3
assert parsed4[0] == "foo"
assert parsed4[1] == "bar"
assert parsed4[2] == -68
parsed5 : parserparse("{ \"foo\" : [ \"bar\", true ],\"baz\":-68 } ") !> readonly dictionary[string, readonly value]
assert parsed5size == 2
the object : parsed5get("foo") !> readonly list[readonly value]
assert the object[0] == "bar"
assert (the object[1] !> boolean) == true
assert parsed5get("baz") == -68