diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index e4437cc..cb07f53 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -237,8 +237,6 @@ zero(<>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts); zero(<>, 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(<>, Stack, Callbacks, Opts, Acc) when ?is_whitespac maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts); integer(<>, 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(<>, Stack, Callbacks, Opts, Acc) when ?is_whitespa maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts); fraction(<>, 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(<>, Stack, Callbacks, Opts, Acc) when ?is_nonzero(S) -> exp(Rest, Stack, Callbacks, Opts, [S] ++ Acc); exp(<>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) -> maybe_done(Rest, Stack, callback({number, lists:reverse(Acc)}, Callbacks), Opts); -exp(<>, Stack, Callbacks, Opts, Acc) when Opts#opts.comments == true -> +exp(<>, 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 -> diff --git a/test/cases/array.json b/test/cases/array.json index ee1041c..836ecbe 100644 --- a/test/cases/array.json +++ b/test/cases/array.json @@ -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 diff --git a/test/cases/exp.json b/test/cases/exp.json new file mode 100644 index 0000000..2544928 --- /dev/null +++ b/test/cases/exp.json @@ -0,0 +1 @@ +[[2.0e7], 2.0e7, {"key":2.0e7, "another key":2.0E7}, 4.2e70/*a comment*/ ] \ No newline at end of file diff --git a/test/cases/exp.test b/test/cases/exp.test new file mode 100644 index 0000000..48cb663 --- /dev/null +++ b/test/cases/exp.test @@ -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}]. \ No newline at end of file diff --git a/test/cases/fraction.json b/test/cases/fraction.json new file mode 100644 index 0000000..bbe0ffb --- /dev/null +++ b/test/cases/fraction.json @@ -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*/ ] \ No newline at end of file diff --git a/test/cases/fraction.test b/test/cases/fraction.test new file mode 100644 index 0000000..39e7cf9 --- /dev/null +++ b/test/cases/fraction.test @@ -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}]. \ No newline at end of file diff --git a/test/cases/integer.json b/test/cases/integer.json new file mode 100644 index 0000000..6474285 --- /dev/null +++ b/test/cases/integer.json @@ -0,0 +1 @@ +[[20], 20, {"key":20, "another key":20}, 42 ] \ No newline at end of file diff --git a/test/cases/integer.test b/test/cases/integer.test new file mode 100644 index 0000000..008ca74 --- /dev/null +++ b/test/cases/integer.test @@ -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]. \ No newline at end of file diff --git a/test/cases/naked_number_e.json b/test/cases/naked_number_e.json new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/test/cases/naked_number_e.json @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/test/cases/naked_number_e.test b/test/cases/naked_number_e.test new file mode 100644 index 0000000..8ac58d3 --- /dev/null +++ b/test/cases/naked_number_e.test @@ -0,0 +1,2 @@ +[{number, "0"}]. +[{naked_values, true}]. \ No newline at end of file diff --git a/test/cases/naked_number_f.json b/test/cases/naked_number_f.json new file mode 100644 index 0000000..c624f44 --- /dev/null +++ b/test/cases/naked_number_f.json @@ -0,0 +1 @@ +1e100 \ No newline at end of file diff --git a/test/cases/naked_number_f.test b/test/cases/naked_number_f.test new file mode 100644 index 0000000..66e8405 --- /dev/null +++ b/test/cases/naked_number_f.test @@ -0,0 +1,2 @@ +[{number, "1e100"}]. +[{naked_values, true}]. \ No newline at end of file diff --git a/test/cases/zero.json b/test/cases/zero.json new file mode 100644 index 0000000..7009e04 --- /dev/null +++ b/test/cases/zero.json @@ -0,0 +1 @@ +[[0], 0, {"key":0, "another key":0}, 0 ] \ No newline at end of file diff --git a/test/cases/zero.test b/test/cases/zero.test new file mode 100644 index 0000000..4b0fff8 --- /dev/null +++ b/test/cases/zero.test @@ -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]. \ No newline at end of file