Current section

Files

Jump to
jiffy test jiffy_18_pre_encoded_tests.erl
Raw

test/jiffy_18_pre_encoded_tests.erl

% This file is part of Jiffy released under the MIT license.
% See the LICENSE file for more information.
-module(jiffy_18_pre_encoded_tests).
-include_lib("eunit/include/eunit.hrl").
-include("jiffy_util.hrl").
bare_pre_encoded_test() ->
?assertEqual(<<"[1,2,3]">>, enc({json, <<"[1,2,3]">>})),
?assertEqual(<<"42">>, enc({json, <<"42">>})),
?assertEqual(<<"\"hi\"">>, enc({json, <<"\"hi\"">>})).
iolist_pre_encoded_test() ->
?assertEqual(<<"[1,2,3]">>, enc({json, [<<"[">>, "1,2,", <<"3]">>]})),
?assertEqual(<<"[1,2,3]">>, enc({json, [$[, [$1, $,, $2], <<",3]">>]})).
inside_array_test() ->
Pre = {json, <<"{\"x\":42}">>},
?assertEqual(<<"[1,{\"x\":42},3]">>, enc([1, Pre, 3])).
inside_object_test() ->
Pre = {json, <<"[1,2,3]">>},
?assertEqual(
<<"{\"a\":[1,2,3],\"b\":2}">>,
enc({[{<<"a">>, Pre}, {<<"b">>, 2}]})
),
% Map iteration order is unpredictable so round-trip it
MapOut = enc(#{<<"a">> => Pre, <<"b">> => 2}),
?assertEqual(
#{<<"a">> => [1, 2, 3], <<"b">> => 2},
jiffy:decode(MapOut, [return_maps])
).
nested_pre_encoded_test() ->
% Nesting
Inner = {json, <<"\"raw\"">>},
EJson = {[
{<<"k1">>, [1, Inner, 3]},
{<<"k2">>, {json, <<"null">>}}
]},
?assertEqual(
<<"{\"k1\":[1,\"raw\",3],\"k2\":null}">>,
enc(EJson)
).
invalid_non_arity_one_tuple_still_errors_test() ->
% Other arity-2 things still surface as an error
?assertError({invalid_ejson, {foo, bar}}, enc({foo, bar})).
pretty_with_pre_encoded_test() ->
% No pretty-printing or anything for spliced json
Pre = {json, <<"[1,2,3]">>},
Out = iol2b(jiffy:encode([1, Pre], [pretty])),
?assertNotEqual(nomatch, binary:match(Out, <<"[1,2,3]">>)).