|
|
- % 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)}.
|