almost complete coverage of decoder achieved via test cases, fixed one outstanding comments bug

This commit is contained in:
alisdair sullivan 2010-05-24 16:20:57 -07:00
parent 6515f9981d
commit fca157c116
14 changed files with 20 additions and 10 deletions

View file

@ -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);
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);
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 ->
fun(Stream) -> zero(Stream, Stack, Callbacks, Opts, Acc) end;
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);
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);
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 ->
fun(Stream) -> integer(Stream, Stack, Callbacks, Opts, Acc) end;
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);
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);
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 ->
fun(Stream) -> fraction(Stream, Stack, Callbacks, Opts, Acc) end;
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(<<S/utf8, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
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);
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 ->
fun(Stream) -> exp(Stream, Stack, Callbacks, Opts, Acc) end;
exp(<<>>, Stack, Callbacks, Opts, Acc) when Opts#opts.explicit_termination == true ->

View file

@ -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
View 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
View 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
View 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
View 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
View file

@ -0,0 +1 @@
[[20], 20, {"key":20, "another key":20}, 42 ]

1
test/cases/integer.test Normal file
View 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].

View file

@ -0,0 +1 @@
0

View file

@ -0,0 +1,2 @@
[{number, "0"}].
[{naked_values, true}].

View file

@ -0,0 +1 @@
1e100

View file

@ -0,0 +1,2 @@
[{number, "1e100"}].
[{naked_values, true}].

1
test/cases/zero.json Normal file
View file

@ -0,0 +1 @@
[[0], 0, {"key":0, "another key":0}, 0 ]

1
test/cases/zero.test Normal file
View 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].