almost complete coverage of decoder achieved via test cases, fixed one outstanding comments bug
This commit is contained in:
parent
6515f9981d
commit
fca157c116
14 changed files with 20 additions and 10 deletions
|
@ -237,8 +237,6 @@ zero(<<S/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S
|
||||||
maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
zero(<<?solidus/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when Opts#opts.comments == true ->
|
zero(<<?solidus/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when Opts#opts.comments == true ->
|
||||||
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
zero(<<>>, [], Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
|
||||||
{callback(eof, callback({number, lists:reverse(Acc)}, Callbacks)), <<>>};
|
|
||||||
zero(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
zero(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
||||||
fun(Stream) -> zero(Stream, Stack, Callbacks, Opts, Acc) end;
|
fun(Stream) -> zero(Stream, Stack, Callbacks, Opts, Acc) end;
|
||||||
zero(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == true ->
|
zero(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == true ->
|
||||||
|
@ -269,8 +267,6 @@ integer(<<S/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespac
|
||||||
maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
integer(<<?solidus/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when Opts#opts.comments == true ->
|
integer(<<?solidus/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when Opts#opts.comments == true ->
|
||||||
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
integer(<<>>, [], Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
|
||||||
{callback(eof, callback({number, lists:reverse(Acc)}, Callbacks)), <<>>};
|
|
||||||
integer(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
integer(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
||||||
fun(Stream) -> integer(Stream, Stack, Callbacks, Opts, Acc) end;
|
fun(Stream) -> integer(Stream, Stack, Callbacks, Opts, Acc) end;
|
||||||
integer(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == true ->
|
integer(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == true ->
|
||||||
|
@ -299,8 +295,6 @@ fraction(<<S/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespa
|
||||||
maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
fraction(<<?solidus/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when Opts#opts.comments == true ->
|
fraction(<<?solidus/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when Opts#opts.comments == true ->
|
||||||
maybe_comment(Rest, fun(Resume) -> fraction(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> fraction(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
fraction(<<>>, [], Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
|
||||||
{callback(eof, callback({number, lists:reverse(Acc)}, Callbacks)), <<>>};
|
|
||||||
fraction(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
fraction(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
||||||
fun(Stream) -> fraction(Stream, Stack, Callbacks, Opts, Acc) end;
|
fun(Stream) -> fraction(Stream, Stack, Callbacks, Opts, Acc) end;
|
||||||
fraction(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == true ->
|
fraction(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == true ->
|
||||||
|
@ -337,10 +331,8 @@ exp(<<S/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_nonzero(S) ->
|
||||||
exp(Rest, Stack, Callbacks, Opts, [S] ++ Acc);
|
exp(Rest, Stack, Callbacks, Opts, [S] ++ Acc);
|
||||||
exp(<<S/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
exp(<<S/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
||||||
maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
exp(<<?rsolidus/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when Opts#opts.comments == true ->
|
exp(<<?solidus/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when Opts#opts.comments == true ->
|
||||||
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
exp(<<>>, [], Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
|
||||||
{callback(eof, callback({number, lists:reverse(Acc)}, Callbacks)), <<>>};
|
|
||||||
exp(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
exp(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == false ->
|
||||||
fun(Stream) -> exp(Stream, Stack, Callbacks, Opts, Acc) end;
|
fun(Stream) -> exp(Stream, Stack, Callbacks, Opts, Acc) end;
|
||||||
exp(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == true ->
|
exp(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == true ->
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
["foo","bar", "baz",[true],[false],[null],true, false, null, 0.7, {"key":"value"},[{}, null,null,null,[]],"\n\r\\", [-1]]
|
["foo","bar", "baz",[true],[false],[null],true, false, null, 0.7, {"key":"value"},[{}, null,null,null,[]],"\n\r\\", [-1]] g
|
||||||
|
|
1
test/cases/exp.json
Normal file
1
test/cases/exp.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[[2.0e7], 2.0e7, {"key":2.0e7, "another key":2.0E7}, 4.2e70/*a comment*/ ]
|
3
test/cases/exp.test
Normal file
3
test/cases/exp.test
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[start_array, start_array, {number, "2.0e7"}, end_array, {number, "2.0e7"}, start_object, {key, "key"}, {number, "2.0e7"}, {key, "another key"}, {number, "2.0e7"}, end_object, {number, "4.2e70"}, end_array].
|
||||||
|
|
||||||
|
[{comments, true}].
|
1
test/cases/fraction.json
Normal file
1
test/cases/fraction.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[[2.0], 2.0, {"key":2.0e7, "another key":2.0E7}, {"key":2.0, "another key":2.0}, 4.2/*a comment*/ ]
|
3
test/cases/fraction.test
Normal file
3
test/cases/fraction.test
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[start_array, start_array, {number, "2.0"}, end_array, {number, "2.0"}, start_object, {key, "key"}, {number, "2.0e7"}, {key, "another key"}, {number, "2.0e7"}, end_object, start_object, {key, "key"}, {number, "2.0"}, {key, "another key"}, {number, "2.0"}, end_object, {number, "4.2"}, end_array].
|
||||||
|
|
||||||
|
[{comments, true}].
|
1
test/cases/integer.json
Normal file
1
test/cases/integer.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[[20], 20, {"key":20, "another key":20}, 42 ]
|
1
test/cases/integer.test
Normal file
1
test/cases/integer.test
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[start_array, start_array, {number, "20"}, end_array, {number, "20"}, start_object, {key, "key"}, {number, "20"}, {key, "another key"}, {number, "20"}, end_object, {number, "42"}, end_array].
|
1
test/cases/naked_number_e.json
Normal file
1
test/cases/naked_number_e.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0
|
2
test/cases/naked_number_e.test
Normal file
2
test/cases/naked_number_e.test
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[{number, "0"}].
|
||||||
|
[{naked_values, true}].
|
1
test/cases/naked_number_f.json
Normal file
1
test/cases/naked_number_f.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
1e100
|
2
test/cases/naked_number_f.test
Normal file
2
test/cases/naked_number_f.test
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[{number, "1e100"}].
|
||||||
|
[{naked_values, true}].
|
1
test/cases/zero.json
Normal file
1
test/cases/zero.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[[0], 0, {"key":0, "another key":0}, 0 ]
|
1
test/cases/zero.test
Normal file
1
test/cases/zero.test
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[start_array, start_array, {number, "0"}, end_array, {number, "0"}, start_object, {key, "key"}, {number, "0"}, {key, "another key"}, {number, "0"}, end_object, {number, "0"}, end_array].
|
Loading…
Add table
Add a link
Reference in a new issue