,Qc@sdZddlZddlmZddlmZmZmZmZeZ defdYZ defdYZ d efd YZ d Z dS( s jinja2.testsuite.core_tags ~~~~~~~~~~~~~~~~~~~~~~~~~~ Test the core tags like for and if. :copyright: (c) 2010 by the Jinja Team. :license: BSD, see LICENSE for more details. iN(t JinjaTestCase(t EnvironmenttTemplateSyntaxErrortUndefinedErrort DictLoadertForLoopTestCasecBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZRS(cCs=tjd}|jdttddks9tdS(Ns+{% for item in seq %}{{ item }}{% endfor %}tseqi t 0123456789(tenvt from_stringtrendertlisttrangetAssertionError(tselfttmpl((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_simplescCs+tjd}|jdks'tdS(Ns1{% for item in seq %}XXX{% else %}...{% endfor %}s...(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_elsescCs+tjd}|jdks'tdS(Ns-<{% for item in seq %}{% else %}{% endfor %}>s<>(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_empty_blockssc Cstjd}|jdddgjd\}}}|jd\}}}}} } } |jd\} } }}}}}t|dkrt| dkstt|dkrt| dkstt|dkrt|dkstt|dkr#t|dks)t| dkrA|d ksGt| d kr_|dkset| |ko|d knstdS( Ns{% for item in seq -%} {{ loop.index }}|{{ loop.index0 }}|{{ loop.revindex }}|{{ loop.revindex0 }}|{{ loop.first }}|{{ loop.last }}|{{ loop.length }}###{% endfor %}Riis###t|itTruetFalset2(RR R tsplittintR (RRtonettwot_t one_indext one_index0t one_revindext one_revindex0t one_firsttone_lastt one_lengtht two_indext two_index0t two_revindext two_revindex0t two_firstttwo_lastt two_length((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_context_vars#s *$$****cCsMtjd}|jdttddd}|ddksItdS( Ns{% for item in seq %}{{ loop.cycle('<1>', '<2>') }}{% endfor %}{% for item in seq %}{{ loop.cycle(*through) }}{% endfor %}Ritthroughs<1>s<2>s<1><2>(s<1>s<2>(RR R R R R (RRtoutput((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_cycling6s $cCs>tjd}|jdttd}| s:tdS(Ns+{% for item in seq %}{% endfor %}{{ item }}Ri (RR R R R R (RRR,((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_scope=scCsCd}tjd}|jd|}|dks?tdS(Ncss xtdD] }|Vq WdS(Ni(R (titem((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pytinnerCss,{% for item in iter %}{{ item }}{% endfor %}titert01234(RR R R (RR0RR,((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_varlenBs cCs&tjd}|jt|jdS(Ns%{% for item in none %}...{% endfor %}(RR t assert_raisest TypeErrorR (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_noniterJsc Cstjd}|jdtdddtddtddgtdddtddtddgtdddtddggdkstdS( Ns{% for item in seq recursive -%} [{{ item.a }}{% if item.b %}<{{ loop(item.b) }}>{% endif %}] {%- endfor %}Rtaitbiis[1<[1][2]>][2<[1][2]>][3<[a]>](RR R tdictR (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_recursiveNs  **$c Cstjd}|j|jdtdddtddtddgtdddtddtddgtdddtddggddS( Ns{% for item in seq recursive -%} [{{ loop.depth0 }}:{{ item.a }}{% if item.b %}<{{ loop(item.b) }}>{% endif %}] {%- endfor %}RR7iR8iis.[0:1<[1:1][1:2]>][0:2<[1:1][1:2]>][0:3<[1:a]>](RR t assertEqualR R9(RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_recursive_depth0Xs **$c Cstjd}|j|jdtdddtddtddgtdddtddtddgtdddtddggddS( Ns{% for item in seq recursive -%} [{{ loop.depth }}:{{ item.a }}{% if item.b %}<{{ loop(item.b) }}>{% endif %}] {%- endfor %}RR7iR8iis.[1:1<[2:1][2:2]>][1:2<[2:1][2:2]>][1:3<[2:a]>](RR R;R R9(RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_recursive_depthbs **$cCs7tjd}|jdddgdks3tdS(Ns{% for row in table %} {%- set rowloop = loop -%} {% for cell in row -%} [{{ rowloop.index }}|{{ loop.index }}] {%- endfor %} {%- endfor %}ttabletabtcds[1|1][1|2][2|1][2|2](RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_looploopls cCs@tjd}|jdtdddgdks<tdS(NsI{% for i in items %}{{ i }}{% if not loop.last %},{% endif %}{% endfor %}titemsiiis1,2,3(RR R treversedR (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_reversed_buguscCsMtjd}|jt|jtjd}|jdksItdS(Ns]{% for item in [1] if loop.index == 0 %}...{% endfor %}sC{% for item in [] %}...{% else %}{{ loop }}{% endfor %}t(RR R4RR R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_loop_errors{s   cCsRtjd}|jdks'ttjd}|jdksNtdS(NsC{% for item in range(10) if item is even %}[{{ item }}]{% endfor %}s[0][2][4][6][8]sr {%- for item in range(10) if item is even %}[{{ loop.index }}:{{ item }}]{% endfor %}s[1:0][2:2][3:4][4:6][5:8](RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_loop_filters  cCs|jttjddS(Ns${% for loop in seq %}...{% endfor %}(R4RRR (R((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_loop_unassignablescCs1tjd}|jdddks-tdS(Ns]{% for s in seq %}[{{ loop.first }}{% for c in s %}|{{ loop.first }}{% endfor %}]{% endfor %}RR?R@s#[True|True|False][False|True|False](sabscd(RR R R (Rtt((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_scoped_special_varscCs^tjd}|jdddks-ttjd}|jdddksZtdS(NsL{% for x in seq %}{{ loop.first }}{% for y in seq %}{% endfor %}{% endfor %}RR?t TrueFalsesL{% for x in seq %}{% for y in seq %}{{ loop.first }}{% endfor %}{% endfor %}tTrueFalseTrueFalse(RR R R (RRI((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_scoped_loop_varscCs7tjd}|jtdgdks3tdS(NsA {%- for item in foo recursive -%}{%- endfor -%} tfooRE(RR R R9R (RRI((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_recursive_empty_loop_iters cCs+tjd}|jdks'tdS(Ns {%- macro do_something() -%} [{{ caller() }}] {%- endmacro %} {%- for i in [1, 2, 3] %} {%- call do_something() -%} {{ i }} {%- endcall %} {%- endfor -%} s [1][2][3](RR R R (RRI((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_call_in_loops cCs1tjd}|jdddks-tdS(Ns {%- for item in foo %}...{{ item }}...{% endfor %} {%- macro item(a) %}...{{ a }}...{% endmacro %} {{- item(2) -}} RNis...1......2...(i(RR R R (RRI((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_scoping_bugs cCs+tjd}|jdks'tdS(NsC{% for a, b, c in [[1, 2, 3]] %}{{ a }}|{{ b }}|{{ c }}{% endfor %}s1|2|3(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_unpackings(t__name__t __module__RRRR*R-R.R3R6R:R<R=RARDRFRGRHRJRMRORPRQRR(((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRs,                tIfConditionTestCasecBs>eZdZdZdZdZdZdZRS(cCs+tjd}|jdks'tdS(Ns{% if true %}...{% endif %}s...(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRscCs+tjd}|jdks'tdS(NsG{% if false %}XXX{% elif true %}...{% else %}XXX{% endif %}s...(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_elifs cCs+tjd}|jdks'tdS(Ns){% if false %}XXX{% else %}...{% endif %}s...(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRscCs+tjd}|jdks'tdS(Ns$[{% if true %}{% else %}{% endif %}]s[](RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_emptysc CsCtjd}|jdddtddddd ks?tdS( Ns@{% if a %}A{% elif b %}B{% elif c == d %}C{% else %}D{% endif %}R7iR8tci*tdgE@tC(RR R RR (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_completescCsXtjd}|jdtdks-ttjd}|jdksTtdS(Ns/{% if a %}{% set foo = 1 %}{% endif %}{{ foo }}R7t1s2{% if true %}{% set foo = 1 %}{% endif %}{{ foo }}(RR R RR (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_no_scopes(RSRTRRVRRWR[R](((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRUs      tMacrosTestCasecBsqeZedeZdZdZdZdZdZ dZ dZ dZ d Z d ZRS( t trim_blockscCs.|jjd}|jdks*tdS(NsS{% macro say_hello(name) %}Hello {{ name }}!{% endmacro %} {{ say_hello('Peter') }}s Hello Peter!(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRs  cCs.|jjd}|jdks*tdS(Ns{% macro level1(data1) %} {% macro level2(data2) %}{{ data1 }}|{{ data2 }}{% endmacro %} {{ level2('bar') }}{% endmacro %} {{ level1('foo') }}sfoo|bar(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_scopings  cCs.|jjd}|jdks*tdS(Ns{% macro m(a, b, c='c', d='d') %}{{ a }}|{{ b }}|{{ c }}|{{ d }}{% endmacro %} {{ m() }}|{{ m('a') }}|{{ m('a', 'b') }}|{{ m(1, 2, 3) }}s||c|d|a||c|d|a|b|c|d|1|2|3|d(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_argumentss  cCs.|jjd}|jdks*tdS(NsJ{% macro test() %}{{ varargs|join('|') }}{% endmacro %}{{ test(1, 2, 3) }}s1|2|3(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_varargss  cCs.|jjd}|jdks*tdS(NsT{% macro test() %}[[{{ caller() }}]]{% endmacro %}{% call test() %}data{% endcall %}s[[data]](RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_simple_calls  cCs.|jjd}|jdks*tdS(Nsf{% macro test() %}[[{{ caller('data') }}]]{% endmacro %}{% call(data) test() %}{{ data }}{% endcall %}s[[data]](RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_complex_calls  cCs.|jjd}|jdks*tdS(Ns\{% set caller = 42 %}{% macro test() %}{{ caller is not defined }}{% endmacro %}{{ test() }}R(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_caller_undefineds  cCsMtdtidd6|_|jjd}|jdksItdS(Ntloaders.{% macro test(foo) %}[{{ foo }}]{% endmacro %}tincludes1{% from "include" import test %}{{ test("foo") }}s[foo](RRRR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_includes cCs4|jjd}|jjjdks-t|jjjdksHt|jjjdksct|jjj syt|jjj st|jjj st|jj jdkst|jj jdkst|jj j st|jj j st|jj j st|jj js0tdS( Ns{% macro foo(a, b) %}{% endmacro %}{% macro bar() %}{{ varargs }}{{ kwargs }}{% endmacro %}{% macro baz() %}{{ caller() }}{% endmacro %}R7R8RN(R7R8(((( RR tmoduleRNt argumentsR tdefaultstnametcallert catch_kwargst catch_varargstbartbaz(RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_macro_apiscCs.|jjd}|jdks*tdS(Ns]{% macro foo(x) %}{{ x }}{% if x > 1 %}|{{ foo(x - 1) }}{% endif %}{% endmacro %}{{ foo(5) }}s 5|4|3|2|1(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_callself%s(RSRTRRRRR`RaRbRcRdReRhRrRs(((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyR^s         cCsRtj}|jtjt|jtjt|jtjt|S(N(tunittestt TestSuitetaddTestt makeSuiteRRUR^(tsuite((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRx,s  (t__doc__Rttjinja2.testsuiteRtjinja2RRRRRRRUR^Rx(((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt s " N