% This file is part of Jiffy released under the MIT license.
% See the LICENSE file for more information.

-module(jiffy_17_copy_strings_tests).

-include_lib("eunit/include/eunit.hrl").


check_binaries({Props}) when is_list(Props) ->
    lists:all(fun({Key, Value}) ->
        check_binaries(Key) andalso check_binaries(Value)
    end, Props);
check_binaries(Values) when is_list(Values) ->
    lists:all(fun(Value) ->
        check_binaries(Value)
    end, Values);
check_binaries(Bin) when is_binary(Bin) ->
    io:format("~s :: ~p ~p", [Bin, byte_size(Bin), binary:referenced_byte_size(Bin)]),
    byte_size(Bin) == binary:referenced_byte_size(Bin);
check_binaries(_Bin) ->
    true.


copy_strings_test_() ->
    Opts = [copy_strings],
    Cases = [
        <<"\"xoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\"">>,
        <<"[\"yoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\"]">>,
        <<"{\"zoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\":\"woooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\"}">>,
        <<"{\"koooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\":[\"loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\"]}">>
    ],
    {"Test copy_strings", lists:map(fun(Json) ->
        EJson = jiffy:decode(Json, Opts),
        ?_assert(check_binaries(EJson))
    end, Cases)}.
