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(