Rc@sdZddlZddlZddlmZddlmZmZmZm Z ddl m Z ddl m Z ddlmZmZddlmZmZmZmZd Zejd Zid d 6d d6dd6dd6dd6Zi d d 6d d6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6Ziid&d'6d(d)6d*d+6d,d-6d.d/6d0d16d2d36d4d56d66Zed7Zed8Zed9eed:d;gZejj ied<6ed=6ed>6ed9eed:d;gZ!e!j"eed?e#d@e fdAYZ$dBe fdCYZ%dDe fdEYZ&dFefdGYZ'dHefdIYZ(dJefdKYZ)dLefdMYZ*dNZ+dS(Os jinja2.testsuite.ext ~~~~~~~~~~~~~~~~~~~~ Tests for the extensions. :copyright: (c) 2010 by the Jinja Team. :license: BSD, see LICENSE for more details. iN(t JinjaTestCase(t Environmentt DictLoadertcontextfunctiontnodes(tTemplateAssertionError(t Extension(tTokentcount_newlines(tnexttBytesIOt itervaluest text_typeis_\((.*?)\)(?s)sS{{ page_title|default(_("missing")) }}{% block body %}{% endblock %}s master.htmls[{% extends "master.html" %}{% block body %}{% trans %}watch out{% endtrans %}{% endblock %}s child.htmls_{% trans user_count %}One user online{% pluralize %}{{ user_count }} users online{% endtrans %}s plural.htmlsf{% trans user_count=get_user_count() %}{{ user_count }}s{% pluralize %}{{ user_count }}p{% endtrans %}s plural2.htmls/{{ _("User: %(num)s")|format(num=user_count) }}sstringformat.htmls({{ _("User: %(num)s", num=user_count) }}s9{{ ngettext("%(num)s apple", "%(num)s apples", apples) }}s ngettext.htmlsR{% trans num=apples %}{{ num }} apple{% pluralize %}{{ num }} apples{% endtrans %}sngettext_long.htmls({% trans %}User: {{ num }}{% endtrans %}stransvars1.htmls2{% trans num=count %}User: {{ num }}{% endtrans %}stransvars2.htmls4{% trans count=num %}User: {{ count }}{% endtrans %}stransvars3.htmls"{% trans %}%(hello)s{% endtrans %}s novars.htmls){% trans %}{{ foo }}%(foo)s{% endtrans %}s vars.htmls){% trans foo="42" %}%(foo)s{% endtrans %}sexplicitvars.htmlufehlendtmissingupass aufs watch outuEin Benutzer onlinesOne user onlineu%(user_count)s Benutzer onlines%(user_count)s users onlineuBenutzer: %(num)ss User: %(num)suBenutzer: %(count)ssUser: %(count)su %(num)s Apfels %(num)s appleu%(num)s Äpfels%(num)s applestdecCs.|jdd}tj|ij||S(NtLANGUAGEten(tgett languages(tcontexttstringtlanguage((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pytgettextIscCsV|jdd}|dkr:tj|ij||Stj|ij||S(NRRi(RR(RtstptnR((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pytngettextOs tloadert extensionssjinja2.ext.i18nt_RRtnewstylet TestExtensioncBs/eZedgZdZdZdZRS(ttesti*cCsbtj|jdtjd|jdtjtdtjggjt |j j S(Nt_dumpt sandboxedtext_attrs.importable_object( RtOutputt call_methodtEnvironmentAttributetattrt ImportedNamet__name__tContextReferencet set_linenoR tstreamtlineno(tselftparser((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pytparseks   cCsd||||jfS(Ns %s|%s|%s|%s(tblocks(R.R"R#timported_objectR((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR!ss (R)t __module__tsetttagsR#R0R!(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRgs tPreprocessorExtensioncBseZddZRS(cCs|jddS(Ns[[TEST]]s ({{ foo }})(treplace(R.tsourcetnametfilename((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt preprocess~sN(R)R3tNoneR;(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR6|stStreamFilterExtensioncBseZdZdZRS(ccsKxD|D]<}|jdkr>x$|j|D] }|Vq,Wq|VqWdS(Ntdata(ttypet interpolate(R.R,ttokentt((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt filter_streams   ccs2d}t|j}|j}xtj|j|}|dkrFPn|j||j!}|rvt|d|Vn|t|j7}t|ddVt|ddVt|ddVt|d|j dVt|d dVt|d dV|j }q!||kr.t|d|j|VndS( NiR>tvariable_beginR9RtlparenRitrparent variable_end( tlentvalueR-t _gettext_retsearchR<tstartRRtgrouptend(R.RAtposRNR-tmatchRI((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR@s(   (R)R3RCR@(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR=s tExtensionsTestCasecBsbeZdZdZdZdZdZdZdZdZ dZ d Z RS( cCsAt}|jd|jd}|jdks=tdS(Nsjinja2.ext.autoescapes6{% autoescape true %}{{ "" }}{% endautoescape %}s <test>(Rt add_extensiont from_stringtrendertAssertionError(R.tenvRB((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_extend_lates  cCsdtddg}|jd}|jdks9t|jd}|jdks`tdS(NRsjinja2.ext.loopcontrolss {%- for item in [1, 2, 3, 4] %} {%- if item % 2 == 0 %}{% continue %}{% endif -%} {{ item }} {%- endfor %}t13s {%- for item in [1, 2, 3, 4] %} {%- if item > 2 %}{% break %}{% endif -%} {{ item }} {%- endfor %}t12(RRSRTRU(R.RVttmpl((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_loop_controlss  cCs=tddg}|jd}|jdks9tdS(NRs jinja2.ext.dos {%- set items = [] %} {%- for char in "foo" %} {%- do items.append(loop.index0 ~ char) %} {%- endfor %}{{ items|join(', ') }}s 0f, 1o, 2o(RRSRTRU(R.RVRZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_dos cCsntddg}|jd}g|jddddjD]}|j^q@dd gksjtdS( NRsjinja2.ext.with_sy {% with a=42, b=23 -%} {{ a }} = {{ b }} {% endwith -%} {{ a }} = {{ b }} taitbis42 = 23s1 = 2(RRSRTt splitlineststripRU(R.RVRZtx((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt test_withs  4cCs=tdtg}|jd}|jdks9tdS(NRs {% test %}sFalse|42|23|{}(RRRSRTRU(R.RVRZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_extension_nodesscCstjtdkstdS(Ns.TestExtension(Rt identifierR)RU(R.((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_identifierscCshtdtg}|j}xC||fD]5}x,t|jD]}|j|ksAtqAWq+WdS(NR(RRtoverlayR Rt environmentRU(R.toriginalRfRVtext((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_rebindings  cCsCtdtg}|jd}|jdddks?tdS(NRs {[[TEST]]}tfooi*s{(42)}(RR6RSRTRU(R.RVRZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_preprocessor_extensionscCsStdtg}d|jd<|jd}|j}|dksOtdS(NRcSs |jS(N(tupper(Ra((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pytsRsFoo _(bar) Bazs Foo BAR Baz(RR=tglobalsRSRTRU(R.RVRZtout((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_streamfilter_extensions  cCsdtfdY}dtfdY}td||g}t|j}|dj|kslt|dj|kstdS(NtT1cBseZdZRS(i(R)R3tpriority(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRrstT2cBseZdZRS(i(R)R3Rs(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRtsRii(RRtlisttiter_extensionst __class__RU(R.RrRtRVRi((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_extension_orderings ( R)R3RWR[R\RbRcReRjRlRqRx(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRQs       tInternationalizationTestCasecBsGeZdZdZdZdZdZdZdZRS(cCs1tjd}|jdddks-tdS(Ns child.htmlRRsfehlendpass auf(ti18n_envt get_templateRTRU(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt test_transscCs[tjd}|jdddddks3t|jdddddksWtdS( Ns plural.htmlRRt user_countisEin Benutzer onlineis2 Benutzer online(RzR{RTRU(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_trans_plurals$csdtjd}fdd_|jddddksKtjdks`tdS( Ns plural2.htmlcsjd7_dS(Ni(tcalled((tget_user_count(s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRsiRRRt1si(RzR{RRTRU(R.RZ((Rs8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt test_trans_plural_with_functionss  $cCsAtjd}|jdks't|jttjddS(Ns_{% trans foo=42, count=2 %}{{ count }} item{% pluralize count %}{{ count }} items{% endtrans %}s2 itemss6{% trans foo %}...{% pluralize bar %}...{% endtrans %}(RzRSRTRUt assert_raisesR(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_complex_plural scCs7tjd}|jdddddks3tdS(Nsstringformat.htmlRRR}is Benutzer: 5(RzR{RTRU(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_trans_stringformattingscCs}ddlm}tdjd}t||dgiddd gfd dd gfd ddgfgksytdS(Ni(t babel_extracts {{ gettext('Hello World') }} {% trans %}Hello World{% endtrans %} {% trans %}{{ users }} user{% pluralize %}{{ users }} users{% endtrans %} tasciiRRRiu Hello Worldiiu%(users)s useru%(users)s users(sgettextsngettextR(u%(users)s useru%(users)s usersN(t jinja2.extRR tencodeRuR<RU(R.RR8((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt test_extractscCsddlm}tdjd}t||ddd gid dd d gfd dd dgfddddgfgkstdS(Ni(Rs {# trans first #} {{ gettext('Hello World') }} {% trans %}Hello World{% endtrans %}{# trans second #} {#: third #} {% trans %}{{ users }} user{% pluralize %}{{ users }} users{% endtrans %} sutf-8RRRttranst:iu Hello Worldtfirstitsecondiu%(users)s useru%(users)s userstthird(sgettextsngettextR(u%(users)s useru%(users)s usersN(RRR RRuR<RU(R.RR8((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_comment_extract"s( R)R3R|R~RRRRR(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRys     t$NewstyleInternationalizationTestCasecBsbeZdZdZdZdZdZdZdZdZ dZ d Z RS( cCs1tjd}|jdddks-tdS(Ns child.htmlRRsfehlendpass auf(tnewstyle_i18n_envR{RTRU(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR|4scCs[tjd}|jdddddks3t|jdddddksWtdS( Ns plural.htmlRRR}isEin Benutzer onlineis2 Benutzer online(RR{RTRU(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR~8s$cCsAtjd}|jdks't|jttjddS(Ns_{% trans foo=42, count=2 %}{{ count }} item{% pluralize count %}{{ count }} items{% endtrans %}s2 itemss6{% trans foo %}...{% pluralize bar %}...{% endtrans %}(RRSRTRURRRz(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR=scCs7tjd}|jdddddks3tdS(Nsstringformat.htmlRRR}is Benutzer: 5(RR{RTRU(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRDscCs[tjd}|jdddddks3t|jdddddksWtdS( Ns ngettext.htmlRRtapplesis1 Apfeliu5 Äpfel(RR{RTRU(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_newstyle_pluralHs$cCstdddg}|jdddt|jd}|jdtd ks^t|jdtd ks|tdS( NRsjinja2.ext.autoescapesjinja2.ext.i18ncSsdS(NuWert: %(name)s((Ra((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRnPscSs|S(N((RRR((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRnQsRsI{% autoescape ae %}{{ gettext("foo", name="") }}{% endautoescape %}taes#Wert: <test>sWert: (Rtinstall_gettext_callablestTrueRSRTRUtFalse(R.RVRB((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_autoescape_supportMs   cCs7tjd}|jdddddks3tdS(Nsngettext_long.htmlRiRRu5 Äpfel(RR{RTRU(R.RZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_num_used_twiceWscCs7tjddt}tjd|dk s3tdS(Nso {% trans num=3 %}{{ num }} apple{% pluralize %}{{ num }} apples{% endtrans %} traws:l_ngettext, u?'\%\(num\)s apple', u?'\%\(num\)s apples', 3(RtcompileRtreRKR<RU(R.R8((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_num_called_num[s cCstjd}tjd}tjd}|jdddddksQt|jd d ddd ksut|jdd ddd kstdS(Nstransvars1.htmlstransvars2.htmlstransvars3.htmltnumiRRs Benutzer: 1tcountis Benutzer: 23i*s Benutzer: 42(RR{RTRU(R.tt1tt2tt3((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_trans_varsgs $$cCstjd}|jdks'ttjd}|jdddksTttjd}|jdks{tdS( Ns novars.htmls %(hello)ss vars.htmlRkt42s 42%(foo)ssexplicitvars.htmls%(foo)s(RR{RTRU(R.RB((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_novars_vars_escapingos ( R)R3R|R~RRRRRRRR(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR2s       tAutoEscapeTestCasecBs5eZdZdZdZdZdZRS(cCstddgdt}|jd}|jjdddgksNttddgdt}|jd}|jjdddgkstdS(NRsjinja2.ext.autoescapet autoescapes {{ "" }} {% autoescape false %} {{ "" }} {% endautoescape %} {{ "" }} u<HelloWorld>u s {{ "" }} {% autoescape true %} {{ "" }} {% endautoescape %} {{ "" }} (RRRSRTtsplitRUR(R.RVRZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_scoped_settingzs    cCsjtddgdt}|jd}|jdks?t|jd}|jdksftdS(NRsjinja2.ext.autoescapeRs&{{ {"foo": ""}|xmlattr|escape }}s foo="<test>"sO{% autoescape false %}{{ {"foo": ""}|xmlattr|escape }}{% endautoescape %}s# foo="&lt;test&gt;"(RRRSRTRU(R.RVRZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_nonvolatiles  cCsgtddgdt}|jd}|jdtdksEt|jdtdksctdS(NRsjinja2.ext.autoescapeRsM{% autoescape foo %}{{ {"foo": ""}|xmlattr|escape }}{% endautoescape %}Rks# foo="&lt;test&gt;"s foo="<test>"(RRRSRTRRU(R.RVRZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt test_volatiles  cCsCtddg}|jd}|jdddks?tdS(NRsjinja2.ext.autoescapesT{% autoescape true %}{% set x = "" %}{{ x }}{% endautoescape %}{{ x }}{{ "" }}Rais <x>1(RRSRTRU(R.RVRZ((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt test_scopingscCstddg}d}|j|}|jdtjddksOt|jdtjdtjkszttddg}|j |dt}d|ksttddgd t}|j |dt}d |kstdS( NRsjinja2.ext.autoescapes {% autoescape val %} {% macro foo(x) %} [{{ x }}] {% endmacro %} {{ foo().__class__.__name__ }} {% endautoescape %} {{ '' }} tvalitMarkupRs \nRs<testing>\n( RRSRTRRRURR R)R(R.RVt tmplsourceRZtpysource((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyttest_volatile_scopings (+ (R)R3RRRRR(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRxs    cCshtj}|jtjt|jtjt|jtjt|jtjt|S(N(tunittestt TestSuitetaddTestt makeSuiteRQRyRR(tsuite((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRs  (,t__doc__RRtjinja2.testsuiteRtjinja2RRRRtjinja2.exceptionsRRRt jinja2.lexerRRtjinja2._compatR R R R timportable_objectRRJti18n_templatestnewstyle_i18n_templatesRRRRzRotupdateRRRRR6R=RQRyRRR(((s8/usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt sx  ""        !S<FM