diff --git a/src/jsx_tests.hrl b/src/jsx_tests.hrl index a560824..2efd265 100644 --- a/src/jsx_tests.hrl +++ b/src/jsx_tests.hrl @@ -6,6 +6,7 @@ -export([literals/0, naked_literals/0]). -export([integers/0, naked_integers/0]). -export([floats/0, naked_floats/0]). +-export([decodeables/0]). -include_lib("eunit/include/eunit.hrl"). @@ -49,7 +50,7 @@ naked_integers() -> [{integer, X}] } || X <- Raw ++ [ -1 * Y || Y <- Raw ] ++ [0] - ] ++ [{"-0", <<"-0">>, 0, [{integer, 0}]}]. + ]. integers() -> [ wrap_with_array(Test) || Test <- naked_integers() ] @@ -80,13 +81,7 @@ naked_floats() -> [{float, X}] } || X <- Raw ++ [ -1 * Y || Y <- Raw ] - ] - ++ [{"-0.0", <<"-0.0">>, 0.0, [{float, 0.0}]}] - ++ [{"1e0", <<"1e0">>, 1.0, [{float, 1.0}]}] - ++ [{"0e0", <<"0e0">>, 0.0, [{float, 0.0}]}] - ++ [{"1e4", <<"1e4">>, 1.0e4, [{float, 1.0e4}]}] - ++ [{"0e4", <<"0e4">>, 0.0, [{float, 0.0}]}] - ++ [{"-1e0", <<"-1e0">>, -1.0, [{float, -1.0}]}]. + ]. floats() -> @@ -95,6 +90,22 @@ floats() -> ++ [listify(naked_floats())] ++ [objectify(naked_floats())]. +decodeables() -> + Tests = [ + {"-0.0", <<"-0.0">>, 0.0, [{float, 0.0}]}, + {"1e0", <<"1e0">>, 1.0, [{float, 1.0}]}, + {"0e0", <<"0e0">>, 0.0, [{float, 0.0}]}, + {"1e4", <<"1e4">>, 1.0e4, [{float, 1.0e4}]}, + {"0e4", <<"0e4">>, 0.0, [{float, 0.0}]}, + {"-1e0", <<"-1e0">>, -1.0, [{float, -1.0}]}, + {"-0", <<"-0">>, 0, [{integer, 0}]} + ], + [ wrap_with_array(Test) || Test <- Tests ] + ++ [ wrap_with_object(Test) || Test <- Tests ] + ++ [listify(Tests)] + ++ [objectify(Tests)]. + + sane_float_to_list(X) -> [Output] = io_lib:format("~p", [X]), Output. @@ -147,18 +158,18 @@ listify([], {_, JSON, Term, Events}) -> binary_to_list(<<"["/utf8, JSON/binary, "]"/utf8>>), <<"["/utf8, JSON/binary, "]"/utf8>>, Term, - [start_array, Events, end_array] + [start_array] ++ Events ++ [end_array] }; listify([Test|Rest], Acc) -> {_, A, M, X} = Acc, {_, B, N, Y} = Test, - listify(Rest, {null, <>, M ++ [N], X ++ Y}). + listify(Rest, {null, <>, M ++ [N], X ++ Y}). objectify([{_, JSON, Term, Events}|Rest]) -> objectify( Rest, - {null, <<"\"", JSON/binary, "\": ", JSON/binary>>, [{JSON, Term}], [{key, JSON}] ++ Events} + {null, <<"\"", JSON/binary, "\":", JSON/binary>>, [{JSON, Term}], [{key, JSON}] ++ Events} ). objectify([], {_, JSON, Term, Events}) -> @@ -173,7 +184,7 @@ objectify([Test|Rest], Acc) -> {_, B, N, [Y]} = Test, objectify(Rest, { null, - <>, + <>, M ++ [{B, N}], X ++ [{key, B}, Y] }). diff --git a/src/jsx_to_json.erl b/src/jsx_to_json.erl index 44a2584..4e3bac9 100644 --- a/src/jsx_to_json.erl +++ b/src/jsx_to_json.erl @@ -291,4 +291,25 @@ format_test_() -> ]. +handle_event_test_() -> + Data = jsx:empty_array() + ++ jsx:deep_array() + ++ jsx:really_deep_array() + ++ jsx:empty_object() + ++ jsx:literals() + ++ jsx:naked_literals() + ++ jsx:integers() + ++ jsx:naked_integers() + ++ jsx:floats() + ++ jsx:naked_floats(), + [ + { + Title, ?_assertEqual( + JSON, + lists:foldl(fun handle_event/2, {start, [], #opts{}}, Events ++ [end_json]) + ) + } || {Title, JSON, _, Events} <- Data + ]. + + -endif. \ No newline at end of file diff --git a/src/jsx_to_term.erl b/src/jsx_to_term.erl index d8fb0bd..007d8dc 100644 --- a/src/jsx_to_term.erl +++ b/src/jsx_to_term.erl @@ -265,4 +265,27 @@ post_decoders_test_() -> )} ]. + +handle_event_test_() -> + Data = jsx:empty_array() + ++ jsx:deep_array() + ++ jsx:really_deep_array() + ++ jsx:empty_object() + ++ jsx:literals() + ++ jsx:naked_literals() + ++ jsx:integers() + ++ jsx:naked_integers() + ++ jsx:floats() + ++ jsx:naked_floats() + ++ jsx:decodeables(), + [ + { + Title, ?_assertEqual( + Term, + lists:foldl(fun handle_event/2, {[[]], #opts{}}, Events ++ [end_json]) + ) + } || {Title, _, Term, Events} <- Data + ]. + + -endif. diff --git a/src/jsx_verify.erl b/src/jsx_verify.erl index a8ba58b..059385a 100644 --- a/src/jsx_verify.erl +++ b/src/jsx_verify.erl @@ -124,7 +124,8 @@ handle_event_test_() -> ++ jsx:integers() ++ jsx:naked_integers() ++ jsx:floats() - ++ jsx:naked_floats(), + ++ jsx:naked_floats() + ++ jsx:decodeables(), [ { Title, ?_assertEqual(