Rc@szdZddlZddlmZddlmZmZddlmZm Z eZ defdYZ dZ dS( s jinja2.testsuite.filters ~~~~~~~~~~~~~~~~~~~~~~~~ Tests for the jinja filters. :copyright: (c) 2010 by the Jinja Team. :license: BSD, see LICENSE for more details. iN(t JinjaTestCase(tMarkupt Environment(t text_typetimplements_to_stringtFilterTestCasecBs?eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@RS(?cCs/tjddddg}|j|ddS(Ntsumiiii(tenvt call_filtert assert_equal(tselftrv((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_filter_callingscCstjd}dS(Ns{{ "foo bar"|capitalize }}(Rt from_string(R ttmpl((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_capitalizescCstjd}dS(Ns{{ "foo"|center(9) }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_centerscCstjd}dS(Nso{{ missing|default('no') }}|{{ false|default('no') }}|{{ false|default('no', true) }}|{{ given|default('no') }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_default"s cCsAtjd}|jdidd6dd6dd6d d 6}dS( NsN{{ foo|dictsort }}|{{ foo|dictsort(true) }}|{{ foo|dictsort(false, "value") }}tfooitaaitbitcitAB(RR trender(R Rtout((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_dictsort)s .cCs1tjd}|jdttd}dS(Ns4{{ foo|batch(3)|list }}|{{ foo|batch(3, 'X')|list }}Ri (RR Rtlisttrange(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_batch4scCs1tjd}|jdttd}dS(Ns4{{ foo|slice(3)|list }}|{{ foo|slice(3, "X")|list }}Ri (RR RRR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_slice;scCstjd}|j}dS(Ns{{ '<">&'|escape }}(RR R(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_escapeBs cCs%tjd}|jdd}dS(Ns{{ foo|striptags }}Rss

just a small example link

to a webpage

(RR R(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_striptagsGscCs/tjd}|j}|j|ddS(NsC{{ 100|filesizeformat }}|{{ 1000|filesizeformat }}|{{ 1000000|filesizeformat }}|{{ 1000000000|filesizeformat }}|{{ 1000000000000|filesizeformat }}|{{ 100|filesizeformat(true) }}|{{ 1000|filesizeformat(true) }}|{{ 1000000|filesizeformat(true) }}|{{ 1000000000|filesizeformat(true) }}|{{ 1000000000000|filesizeformat(true) }}sX100 Bytes|1.0 kB|1.0 MB|1.0 GB|1.0 TB|100 Bytes|1000 Bytes|976.6 KiB|953.7 MiB|931.3 GiB(RR RR (R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_filesizeformatNs   cCs/tjd}|j}|j|ddS(Ns{{ 300|filesizeformat }}|{{ 3000|filesizeformat }}|{{ 3000000|filesizeformat }}|{{ 3000000000|filesizeformat }}|{{ 3000000000000|filesizeformat }}|{{ 300|filesizeformat(true) }}|{{ 3000|filesizeformat(true) }}|{{ 3000000|filesizeformat(true) }}s?300 Bytes|3.0 kB|3.0 MB|3.0 GB|3.0 TB|300 Bytes|2.9 KiB|2.9 MiB(RR RR (R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_filesizeformat_issue59as   cCs1tjd}|jdttd}dS(Ns{{ foo|first }}Ri (RR RRR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_firstsscCstjd}|j}dS(Ns={{ "42"|float }}|{{ "ajsghasjgd"|float }}|{{ "32.32"|float }}(RR R(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_floatxs cCstjd}|j}dS(Ns{{ "%s|%s"|format("a", "b") }}(RR R(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_formats cCsNtjd}djdjddgdgd}|jd|}dS(Ns-{{ foo|indent(2) }}|{{ foo|indent(2, true) }}s t Rtbari(RR tjoinR(R RttextR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_indents)cCstjd}|j}dS(Ns7{{ "42"|int }}|{{ "ajsghasjgd"|int }}|{{ "32.32"|int }}(RR R(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_ints cCs=tjd}|j}tdt}|jd}dS(Ns{{ [1, 2, 3]|join("|") }}t autoescapes-{{ ["", "foo"|safe]|join }}(RR RRtTrue(R RRtenv2((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_joins  cCs)dtfdY}tjd}dS(NtUsercBseZdZRS(cSs ||_dS(N(tusername(R R0((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt__init__s(t__name__t __module__R1(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR/ss"{{ users|join(', ', 'username') }}(tobjectRR (R R/R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_join_attributescCs1tjd}|jdttd}dS(Ns{{ foo|last }}Ri (RR RRR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_lastscCstjd}|j}dS(Ns{{ "hello world"|length }}(RR R(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_lengths cCstjd}|j}dS(Ns{{ "FOO"|lower }}(RR R(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_lowers cCs5ddlm}tjd}ttd}dS(Ni(tpformats{{ data|pprint }}i(tpprintR9RR RR(R R9Rtdata((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_pprintscCs<tjd}ttd}xtdD]}q.WdS(Ns{{ seq|random }}idi (RR RR(R Rtseqt_((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_randomscCstjd}dS(Ns8{{ "foobar"|reverse|join }}|{{ [1, 2, 3]|reverse|list }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_reversescCs(dddddg}tjd}dS(Niiiiis{{ obj|string }}(RR (R txR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_stringscCsmtjd}tjd}tjd}tjd}tjd}tjd}tjd}dS(Ns{{ "foo bar"|title }}s{{ "foo's bar"|title }}s{{ "foo bar"|title }}s{{ "f bar f"|title }}s{{ "foo-bar"|title }}s{{ "foo bar"|title }}s{{ "FOO BAR"|title }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_titlescCs/tjd}|jddddd}dS(Nsg{{ data|truncate(15, true, ">>>") }}|{{ data|truncate(15, false, ">>>") }}|{{ smalldata|truncate(15) }}R;sfoobar baz barit smalldata(RR R(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_truncates   cCstjd}dS(Ns{{ "foo"|upper }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_upperscCstjd}dS(Ns.{{ "foo http://www.example.com/ bar"|urlize }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_urlizescCstjd}dS(Ns{{ "foo bar baz"|wordcount }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_wordcountscCstjd}dS(Ns.{% filter lower|escape %}{% endfilter %}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_blockscCstjd}dS(Ns+{{ ['', '']|first|upper|escape }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_chainingscCstjd}dS(Ns{{ [1, 2, 3, 4, 5, 6]|sum }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_sumscCstjd}dS(Ns{{ values|sum('value') }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_sum_attributesscCstjd}dS(Ns{{ values|sum('real.value') }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_sum_attributes_nestedscCstjd}dS(Ns{{ values.items()|sum('1') }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_sum_attributes_tuple scCstjd}dS(Ns{{ -1|abs }}|{{ 1|abs }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_absscCstjd}dS(NsY{{ 2.7|round }}|{{ 2.1|round }}|{{ 2.1234|round(3, 'floor') }}|{{ 2.1|round(0, 'ceil') }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_round_positivescCstjd}dS(NsL{{ 21.3|round(-1)}}|{{ 21.3|round(-1, 'ceil')}}|{{ 21.3|round(-1, 'floor')}}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_round_negativescCs%tjd}|jj}dS(NsW{{ {'foo': 42, 'bar': 23, 'fish': none, 'spam': missing, 'blub:blub': ''}|xmlattr }}(RR Rtsplit(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_xmlattr!scCstjd}dS(Ns/{{ [2, 3, 1]|sort }}|{{ [2, 3, 1]|sort(true) }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_sort1*scCstjd}dS(Ns({{ "".join(["c", "A", "b", "D"]|sort) }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_sort2.scCstjd}dS(Ns!{{ ['foo', 'Bar', 'blah']|sort }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_sort32scCs/tdtfdY}tjd}dS(NtMagiccBseZdZdZRS(cSs ||_dS(N(tvalue(R RX((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR19scSs t|jS(N(RRX(R ((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt__str__;s(R2R3R1RY(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyRW7s s({{ items|sort(attribute='value')|join }}(RR4RR (R RWR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_sort46scCstjd}dS(Ns] {%- for grouper, list in [{'foo': 1, 'bar': 2}, {'foo': 2, 'bar': 3}, {'foo': 1, 'bar': 1}, {'foo': 3, 'bar': 4}]|groupby('foo') -%} {{ grouper }}{% for x in list %}: {{ x.foo }}, {{ x.bar }}{% endfor %}| {%- endfor %}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_groupby@s cCstjd}dS(Ns {%- for grouper, list in [('a', 1), ('a', 2), ('b', 1)]|groupby(0) -%} {{ grouper }}{% for x in list %}:{{ x.1 }}{% endfor %}| {%- endfor %}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_groupby_tuple_indexOs csdtfdYdtffdY}|dddd|dd dd|d d dd|d ddd g}tjd}dS(NtDatecBseZdZRS(cSs||_||_||_dS(N(tdaytmonthtyear(R R^R_R`((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR1Xs  (R2R3R1(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR]WstArticlecseZfdZRS(cs||_||_dS(N(tdatettitle(R RcRb(R](s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR1]s(R2R3R1((R](s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyRa\stahaiit interestingisreally?is totally notis {%- for year, list in articles|groupby('date.year') -%} {{ year }}{% for x in list %}[{{ x.title }}]{% endfor %}| {%- endfor %}(R4RR (R RatarticlesR((R]s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_groupby_multidotVs cCstjd}dS(Ns={% filter upper|replace('FOO', 'foo') %}foobar{% endfilter %}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_filtertagpscCsXt}|jd}tdt}|jd}|jd}|jd}dS(Ns{{ string|replace("o", 42) }}R+s{{ string|replace("<", 42) }}s {{ string|replace("o", ">x<") }}(RR R,(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_replaceus cCstjd}dS(Ns{{ x|forceescape }}(RR (R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_forceescapescCs1tdt}|jd}|jd}dS(NR+s{{ "
foo
"|safe }}s{{ "
foo
" }}(RR,R (R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_safescCs1tdt}|jd}|jd}dS(NR+s{{ "Hello, world!"|urlencode }}s{{ o|urlencode }}(RR,R (R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_urlencodescCs2t}|jd}|j|jddS(Ns${{ ["1", "2", "3"]|map("int")|sum }}t6(RR t assertEqualR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_maps cCsodtfdY}t}|d|d|dg}|jd}|j|jd|ddS( NR/cBseZdZRS(cSs ||_dS(N(tname(R Rp((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR1s(R2R3R1(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR/stjohntjanetmikes+{{ users|map(attribute="name")|join("|") }}tuserssjohn|jane|mike(R4RR RnR(R R/RRtR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_attribute_maps   cCs2t}|jd}|j|jddS(Ns{{ none|map("upper")|list }}s[](RR RnR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_empty_maps cCs2t}|jd}|j|jddS(Ns-{{ [1, 2, 3, 4, 5]|select("odd")|join("|") }}s1|3|5(RR RnR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_selects cCs2t}|jd}|j|jddS(Ns6{{ [none, false, 0, 1, 2, 3, 4, 5]|select|join("|") }}s 1|2|3|4|5(RR RnR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_bool_selects cCs2t}|jd}|j|jddS(Ns-{{ [1, 2, 3, 4, 5]|reject("odd")|join("|") }}s2|4(RR RnR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_rejects cCs2t}|jd}|j|jddS(Ns6{{ [none, false, 0, 1, 2, 3, 4, 5]|reject|join("|") }}s None|False|0(RR RnR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_bool_rejects cCsxdtfdY}t}|dt|dt|dtg}|jd}|j|jd|ddS( NR/cBseZdZRS(cSs||_||_dS(N(Rpt is_active(R RpR{((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR1s (R2R3R1(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR/sRqRrRssC{{ users|selectattr("is_active")|map(attribute="name")|join("|") }}Rts john|jane(R4RR,tFalseR RnR(R R/RRtR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_select_attrs   cCsxdtfdY}t}|dt|dt|dtg}|jd}|j|jd|ddS(NR/cBseZdZRS(cSs||_||_dS(N(RpR{(R RpR{((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR1s (R2R3R1(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR/sRqRrRssC{{ users|rejectattr("is_active")|map(attribute="name")|join("|") }}Rt(R4RR,R|R RnR(R R/RRtR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_reject_attrs   cCsxdtfdY}t}|dd|dd|ddg}|jd }|j|jd |d dS( NR/cBseZdZRS(cSs||_||_dS(N(tidRp(R RRp((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR1s (R2R3R1(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR/siRqiRriRssC{{ users|selectattr("id", "odd")|map(attribute="name")|join("|") }}Rts john|mike(R4RR RnR(R R/RRtR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_func_select_attrs   cCsxdtfdY}t}|dd|dd|ddg}|jd }|j|jd |ddS( NR/cBseZdZRS(cSs||_||_dS(N(RRp(R RRp((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR1s (R2R3R1(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR/siRqiRriRssC{{ users|rejectattr("id", "odd")|map(attribute="name")|join("|") }}Rt(R4RR RnR(R R/RRtR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_func_reject_attrs   (AR2R3R RRRRRRRRR R!R"R#R$R)R*R.R5R6R7R8R<R?R@RBRCRERFRGRHRIRJRKRLRMRNRORPRQRSRTRURVRZR[R\RgRhRiRjRkRlRoRuRvRwRxRyRzR}R~RR(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyRs~                                                      cCs&tj}|jtjt|S(N(tunittestt TestSuitetaddTestt makeSuiteR(tsuite((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyRs ( t__doc__Rtjinja2.testsuiteRtjinja2RRtjinja2._compatRRRRR(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt s