Browse Source

Add more unit tests for filter yesno.

Also refactored yesno_io/2 a bit.

Fixes #72.
Andreas Stenius 11 years ago
parent
commit
fa670cad59
2 changed files with 31 additions and 14 deletions
  1. 14 13
      src/erlydtl_filters.erl
  2. 17 1
      tests/src/erlydtl_unittests.erl

+ 14 - 13
src/erlydtl_filters.erl

@@ -1204,21 +1204,22 @@ process_binary_match(Pre, Insertion, SizePost, Post) ->
     end.
 
 yesno_io(Val, Choices) ->
-    case {term_to_bool(Val), binary:split(Choices, <<",">>, [global])} of
-        {true, [T|_]} -> T;
-        {false, [_,F|_]} -> F;
-        {undefined, [_,_,U|_]} -> U;
-        {undefined, [_,F|_]} -> F;
-        _ -> error
+    {True, False, Undefined} =
+        case binary:split(Choices, <<",">>, [global]) of
+            [T, F, U] -> {T, F, U};
+            [T, F] -> {T, F, F};
+            _ -> throw({error, "invalid choices to yesno filter"})
+        end,
+    if Val =:= false -> False;
+       Val =:= undefined -> Undefined;
+           is_list(Val); is_binary(Val) ->
+                case iolist_size(Val) of
+                    0 -> False;
+                    _ -> True
+                end;
+       true -> True
     end.
 
-term_to_bool(true) -> true;
-term_to_bool(false) -> false;
-term_to_bool(undefined) -> undefined;
-term_to_bool(Str) when is_list(Str); is_binary(Str) ->
-    iolist_size(Str) > 0;
-term_to_bool(_) -> true.
-
 %% unjoin == split in other languages; inverse of join
 %%FROM: http://www.erlang.org/pipermail/erlang-questions/2008-October/038896.html
 unjoin(String, []) ->

+ 17 - 1
tests/src/erlydtl_unittests.erl

@@ -918,7 +918,23 @@ tests() ->
 		   <<"no">>},
 		  {"|yesno:\"yeah,no,maybe\"",
 		   <<"{{ var|yesno:\"yeah,no,maybe\" }}">>, [{var, undefined}],
-		   <<"maybe">>}
+		   <<"maybe">>},
+
+		  {"string |yesno:\"yeah,no,maybe\"",
+		   <<"{{ var|yesno:\"yeah,no,maybe\" }}">>, [{var, "non-empty string"}],
+		   <<"yeah">>},
+		  {"binary |yesno:\"yeah,no,maybe\"",
+		   <<"{{ var|yesno:\"yeah,no,maybe\" }}">>, [{var, <<"non-empty binary">>}],
+		   <<"yeah">>},
+		  {"empty string |yesno:\"yeah,no,maybe\"",
+		   <<"{{ var|yesno:\"yeah,no,maybe\" }}">>, [{var, ""}],
+		   <<"no">>},
+		  {"empty binary |yesno:\"yeah,no\"",
+		   <<"{{ var|yesno:\"yeah,no\" }}">>, [{var, <<"">>}],
+		   <<"no">>},
+		  {"term |yesno:\"yeah,no,maybe\"",
+		   <<"{{ var|yesno:\"yeah,no,maybe\" }}">>, [{var, {my, [term, "test"]}}],
+		   <<"yeah">>}
 		 ]},
      {"filters_if", [
 		     {"Filter if 1.1",