Bladeren bron

Support printing iolists with ~s

pull/108/head
Andrew Thompson 12 jaren geleden
bovenliggende
commit
932b482e4a
3 gewijzigde bestanden met toevoegingen van 20 en 3 verwijderingen
  1. +2
    -0
      src/lager_format.erl
  2. +10
    -0
      src/lager_trunc_io.erl
  3. +8
    -3
      test/trunc_io_eqc.erl

+ 2
- 0
src/lager_format.erl Bestand weergeven

@ -29,6 +29,8 @@
format(FmtStr, Args, MaxLen) ->
format(FmtStr, Args, MaxLen, []).
format([], [], _, _) ->
"";
format(FmtStr, Args, MaxLen, Opts) when is_atom(FmtStr) ->
format(atom_to_list(FmtStr), Args, MaxLen, Opts);
format(FmtStr, Args, MaxLen, Opts) when is_binary(FmtStr) ->

+ 10
- 0
src/lager_trunc_io.erl Bestand weergeven

@ -394,6 +394,11 @@ alist([H|T], Max, Options) when H =:= $\t; H =:= $\n; H =:= $\r; H =:= $\v; H =:
alist([H|T], Max, #print_options{force_strings=true} = Options) when is_integer(H) ->
{L, Len} = alist(T, Max-1, Options),
{[H|L], Len + 1};
alist([H|T], Max, Options = #print_options{force_strings=true}) when is_binary(H) ->
{List, Len} = print(H, Max, Options),
%% no need to decrement depth, as we're in printable string mode
{Final, FLen} = alist(T, Max - Len, Options),
{[List|Final], FLen};
alist(_, _, #print_options{force_strings=true}) ->
erlang:error(badarg);
alist([H|_L], _Max, _Options) ->
@ -650,6 +655,11 @@ list_printing_test() ->
?assertEqual("[9|9]", lists:flatten(format("~p", [[9|9]], 50))),
ok.
iolist_printing_test() ->
?assertEqual("iolist: HelloIamaniolist",
lists:flatten(format("iolist: ~s", [[$H, $e, $l, $l, $o, "I", ["am", [<<"an">>], [$i, $o, $l, $i, $s, $t]]]], 1000))),
ok.
tuple_printing_test() ->
?assertEqual("{}", lists:flatten(format("~p", [{}], 50))),
?assertEqual("{}", lists:flatten(format("~w", [{}], 50))),

+ 8
- 3
test/trunc_io_eqc.erl Bestand weergeven

@ -66,7 +66,7 @@ gen_fmt_args() ->
"~~",
{"~10000000.p", gen_any(5)},
{"~w", gen_any(5)},
{"~s", oneof([gen_print_str(), gen_atom(), gen_quoted_atom(), gen_print_bin()])},
{"~s", oneof([gen_print_str(), gen_atom(), gen_quoted_atom(), gen_print_bin(), gen_iolist(5)])},
{"~1000000.P", gen_any(5), 4},
{"~W", gen_any(5), 4},
{"~i", gen_any(5)},
@ -91,7 +91,7 @@ gen_fmt_args() ->
%% Generates a printable string
gen_print_str() ->
?LET(Xs, list(char()), [X || X <- Xs, io_lib:printable_list([X]), X /= $~]).
?LET(Xs, list(char()), [X || X <- Xs, io_lib:printable_list([X]), X /= $~, X < 255]).
gen_print_bin() ->
?LET(Xs, gen_print_str(), list_to_binary(Xs)).
@ -110,7 +110,12 @@ gen_any(MaxDepth) ->
gen_fun()] ++
[?LAZY(list(gen_any(MaxDepth - 1))) || MaxDepth /= 0] ++
[?LAZY(gen_tuple(gen_any(MaxDepth - 1))) || MaxDepth /= 0]).
gen_iolist(0) ->
[];
gen_iolist(Depth) ->
list(oneof([gen_char(), gen_print_str(), gen_print_bin(), gen_iolist(Depth-1)])).
gen_atom() ->
elements([abc, def, ghi]).

Laden…
Annuleren
Opslaan