% This file is part of Jiffy released under the MIT license.
|
|
% See the LICENSE file for more information.
|
|
|
|
-module(jiffy_16_dedupe_keys_tests).
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
dedupe_keys_test_() ->
|
|
Opts = [dedupe_keys],
|
|
Cases = [
|
|
% Simple sanity check
|
|
{
|
|
{[{<<"foo">>, 1}]},
|
|
{[{<<"foo">>, 1}]}
|
|
},
|
|
% Basic test
|
|
{
|
|
{[{<<"foo">>, 1}, {<<"foo">>, 2}]},
|
|
{[{<<"foo">>, 2}]}
|
|
},
|
|
% Non-repeated keys are fine
|
|
{
|
|
{[{<<"foo">>, 1}, {<<"bar">>, 2}]},
|
|
{[{<<"foo">>, 1}, {<<"bar">>, 2}]}
|
|
},
|
|
% Key order stays the same other than deduped keys
|
|
{
|
|
{[{<<"bar">>, 1}, {<<"foo">>, 2}, {<<"baz">>, 3}, {<<"foo">>, 4}]},
|
|
{[{<<"bar">>, 1}, {<<"baz">>, 3}, {<<"foo">>, 4}]}
|
|
},
|
|
% Multiple repeats are handled
|
|
{
|
|
{[{<<"foo">>, 1}, {<<"foo">>, 2}, {<<"foo">>, 3}]},
|
|
{[{<<"foo">>, 3}]}
|
|
},
|
|
% Sub-objects are covered
|
|
{
|
|
{[{<<"foo">>, {[{<<"bar">>, 1}, {<<"bar">>, 2}]}}]},
|
|
{[{<<"foo">>, {[{<<"bar">>, 2}]}}]}
|
|
},
|
|
% Objects in arrays are handled
|
|
{
|
|
[{[{<<"foo">>, 1}, {<<"foo">>, 2}]}],
|
|
[{[{<<"foo">>, 2}]}]
|
|
},
|
|
% Embedded NULL bytes are handled
|
|
{
|
|
{[{<<"foo\\u0000bar">>, 1}, {<<"foo\\u0000baz">>, 2}]},
|
|
{[{<<"foo\\u0000bar">>, 1}, {<<"foo\\u0000baz">>, 2}]}
|
|
},
|
|
% Can dedupe with embedded NULL bytes
|
|
{
|
|
{[{<<"foo\\u0000bar">>, 1}, {<<"foo\\u0000bar">>, 2}]},
|
|
{[{<<"foo\\u0000bar">>, 2}]}
|
|
}
|
|
],
|
|
{"Test dedupe_keys", lists:map(fun({Data, Result}) ->
|
|
Json = jiffy:encode(Data),
|
|
?_assertEqual(Result, jiffy:decode(Json, Opts))
|
|
end, Cases)}.
|