1: -module(mam_jid_mini_SUITE).
    2: -include_lib("eunit/include/eunit.hrl").
    3: -compile([export_all, nowarn_export_all]).
    4: 
    5: all() -> [test_encode_decode_functionality].
    6: 
    7: init_per_suite(Config) ->
    8:     {ok, _} = application:ensure_all_started(jid),
    9:     Config.
   10: 
   11: end_per_suite(Config) -> Config.
   12: 
   13: test_encode_decode_functionality(_Config) ->
   14:     PossibleDomainNames = [<<"a">>, <<"b">>, <<"c">>, <<"d">>, <<"e">>, <<"f">>],
   15:     PossibleUserNames = [<<"">> | PossibleDomainNames],
   16:     PossibleResourceNames = [<<"just:some@random/text here">> | PossibleUserNames],
   17:     PossibleJIDs = [{U, D, R, jid:make(U, D, R)} || U <- PossibleUserNames,
   18:                                                     D <- PossibleDomainNames,
   19:                                                     R <- PossibleResourceNames],
   20:     FailedJIDs = [[{U1, D1, R1}, {U2, D2, R2}, EncodedJID, DecodedJID]
   21:                   || {U1, D1, R1, JID1} <- PossibleJIDs,
   22:                      {U2, D2, R2, JID2} <- PossibleJIDs,
   23:                      EncodedJID <- [catch mam_jid_mini:encode(JID1, JID2)],
   24:                      DecodedJID <- [catch mam_jid_mini:decode(JID1, EncodedJID)],
   25:                      DecodedJID =/= JID2],
   26:     case lists:sublist(FailedJIDs, 100) of
   27:         [] -> ok;
   28:         First100FailedJIDs ->
   29:             [ct:log("~nJID encoding/decoding failed:~n"
   30:                     "\tbase JID      - ~p~n"
   31:                     "\tJID to encode - ~p~n"
   32:                     "\tencoded JID   - ~p~n"
   33:                     "\tdecoded JID   - ~p~n", Params) || Params <- First100FailedJIDs],
   34:             ct:fail("Failed to encode/decode some of the JIDs,"
   35:                     " see test suite logs for more details", [])
   36:     end.
   37: