-module(erlydtl_translation_tests). -include_lib("eunit/include/eunit.hrl"). all_sources_parser_test_() -> [{Title, [test_fun(Test) || Test <- Tests]} || {Title, Tests} <- test_defs()]. test_fun({Name, Template, Variables, Options, Output}) -> {Name, fun () -> Tokens = (catch compile_and_render(Template, Variables, Options)), ?assertMatch(Output, Tokens) end}. compile_and_render(Template, Variables, Options) -> {ok, test} = erlydtl:compile_template(Template, test), {ok, R} = test:render(Variables, Options), iolist_to_binary(R). test_defs() -> [ {"trans", [ {"simple", "{% trans \"hello\" %}", [], [], <<"hello">>}, {"with_fun", "{% trans \"text\" %}", [], [{translation_fun, fun(_ID, _L) -> "hola" end}], <<"hola">>}, {"with_fun_utf8", "{% trans \"text\" %}", [], [{translation_fun, fun(_ID, _L) -> <<"привет"/utf8>> end}], <<"привет"/utf8>>} ]}, {"blocktrans", [ {"simple", "{% blocktrans %} hello {% endblocktrans %}", [], [], <<" hello ">>}, {"with_fun", "{% blocktrans %} hello {% endblocktrans %}", [], [{translation_fun, fun(_ID, _L) -> "hola" end}], <<"hola">>}, {"s_param_no_fun", "{% blocktrans %} hello {{ p }} {% endblocktrans %}", [{p, "mundo"}], [], <<" hello mundo ">>}, {"s_param", "{% blocktrans %} hello {{ p }} {% endblocktrans %}", [{p, "mundo"}], [{translation_fun, fun(_ID, _L) -> "hola {{ p }}" end}], <<"hola mundo">>}, {"b_param", "{% blocktrans %} hello {{ p }} {% endblocktrans %}", [{p, <<"mundo">>}], [{translation_fun, fun(_ID, _L) -> "hola {{ p }}" end}], <<"hola mundo">>}, {"i_param", "{% blocktrans %} hello {{ p }} {% endblocktrans %}", [{p, 1}], [{translation_fun, fun(_ID, _L) -> "hola {{ p }}" end}], <<"hola 1">>}, {"f_param", "{% blocktrans %} hello {{ p }} {% endblocktrans %}", [{p, 3.1415}], [{translation_fun, fun(_ID, _L) -> "hola {{ p }}" end}], <<"hola 3.1415">>}, {"b_xss", "{% blocktrans %} hello {{ p }} {% endblocktrans %}", [{p, <<"">>}], [{translation_fun, fun(_ID, _L) -> "hola {{ p }}" end}], <<"hola <script>alert('pwnd');</script>">>}, {"s_xss", "{% blocktrans %} hello {{ p }} {% endblocktrans %}", [{p, ""}], [{translation_fun, fun(_ID, _L) -> "hola {{ p }}" end}], <<"hola <script>alert('pwnd');</script>">>}, {"b_autoecape_off", "{% autoescape off %}{% blocktrans %} hello {{ p }} {% endblocktrans %}{% endautoescape %}", [{p, <<"">>}], [{translation_fun, fun(_ID, _L) -> "hola {{ p }}" end}], <<"hola ">>}, {"b_autoecape_nested", "{% autoescape off %}{% autoescape on %}{% blocktrans %} hello {{ p }} {% endblocktrans %}{% endautoescape %}{% endautoescape %}", [{p, <<"">>}], [{translation_fun, fun(_ID, _L) -> "hola {{ p }}" end}], <<"hola <script>alert('pwnd');</script>">>}, {"term_hack_", "{% blocktrans %} hello {{ p }} {% endblocktrans %}", [{p, {""}}], [{translation_fun, fun(_ID, _L) -> "hola {{ p }}" end}], <<"hola {"<script>alert('pwnd');</script>"}">>}, {"plural_2", "{% blocktrans count counter=p %} hello world {% plural %} hello {{ p }} worlds {% endblocktrans %}", [{p, 2}], [{translation_fun, fun({" hello world ", {" hello {{ p }} worlds ", 2}}, _L) -> "hola {{ p }} mundos" end}], <<"hola 2 mundos">>} ]} ].