8889841có ,òQc@sœdZddlZddlmZddlmZmZmZmZeƒZ defd„ƒYZ defd„ƒYZ 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. iÿÿÿÿN(t JinjaTestCase(t EnvironmenttTemplateSyntaxErrortUndefinedErrort DictLoadertForLoopTestCasecBsÎeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs=tjdƒ}|jdttdƒƒƒdks9t‚dS(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ƒ}|jƒdks't‚dS(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ƒ}|jƒdks't‚dS(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 Cs‹tjdƒ}|jdddgƒjdƒ\}}}|jdƒ\}}}}} } } |jdƒ\} } }}}}}t|ƒdkr¥t| ƒdks«t‚t|ƒdkrÏt| ƒdksÕt‚t|ƒdkrùt|ƒdksÿt‚t|ƒdkr#t|ƒdks)t‚| dkrA|d ksGt‚| d kr_|dkset‚| |ko|d kns‡t‚dS( 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ƒ}|jdttdƒƒddƒ}|ddksIt‚dS( 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:t‚dS(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?t‚dS(Ncss xtdƒD] }|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|jƒdS(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 Cs£tjdƒ}|jdtdddtddƒtddƒgƒtdddtddƒtddƒgƒtdddtddƒgƒgƒdksŸt‚dS( 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 Cs¡tjdƒ}|j|jdtdddtddƒtddƒgƒtdddtddƒtddƒgƒtdddtddƒgƒgƒdƒdS( 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 Cs¡tjdƒ}|j|jdtdddtddƒtddƒgƒtdddtddƒtddƒgƒtdddtddƒgƒgƒdƒdS( 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ƒ}|jdddgƒdks3t‚dS(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ƒ}|jdtdddgƒƒdks<t‚dS(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|jƒtjdƒ}|jƒdksIt‚dS(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ƒ}|jƒdks't‚tjdƒ}|jƒdksNt‚dS(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_filterƒs  cCs|jttjdƒdS(Ns${% for loop in seq %}...{% endfor %}(R4RRR (R((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyttest_loop_unassignableŒscCs1tjdƒ}|jddƒdks-t‚dS(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ƒ}|jddƒdks-t‚tjdƒ}|jddƒdksZt‚dS(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_var•scCs7tjdƒ}|jtdgƒƒdks3t‚dS(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ƒ}|jƒdks't‚dS(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_loop£s cCs1tjdƒ}|jddƒdks-t‚dS(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_bug±s cCs+tjdƒ}|jƒdks't‚dS(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_unpacking¹s(t__name__t __module__RRRR*R-R.R3R6R:R<R=RARDRFRGRHRJRMRORPRQRR(((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRs,                tIfConditionTestCasecBs>eZd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs+tjdƒ}|jƒdks't‚dS(Ns{% if true %}...{% endif %}s...(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRÁscCs+tjdƒ}|jƒdks't‚dS(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_elifÅs cCs+tjdƒ}|jƒdks't‚dS(Ns){% if false %}XXX{% else %}...{% endif %}s...(RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRÊscCs+tjdƒ}|jƒdks't‚dS(Ns$[{% if true %}{% else %}{% endif %}]s[](RR R R (RR((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyt test_emptyÎsc CsCtjdƒ}|jdddtddddƒd ks?t‚dS( 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_completeÒscCsXtjdƒ}|jdtƒdks-t‚tjdƒ}|jƒdksTt‚dS(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_scope×s(RSRTRRVRRWR[R](((s>/usr/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyRU¿s      tMacrosTestCasecBsqeZedeƒZd„Zd„Zd„Zd„Zd„Z d„Z d„Z d„Z d „Z d „ZRS( t trim_blockscCs.|jjdƒ}|jƒdks*t‚dS(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.pyRás  cCs.|jjdƒ}|jƒdks*t‚dS(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_scopingçs  cCs.|jjdƒ}|jƒdks*t‚dS(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_argumentsïs  cCs.|jjdƒ}|jƒdks*t‚dS(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_varargsõs  cCs.|jjdƒ}|jƒdks*t‚dS(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_callûs  cCs.|jjdƒ}|jƒdks*t‚dS(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ƒ}|jƒdks*t‚dS(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ƒ}|jƒdksIt‚dS(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 s¥t‚|jj jdksÀt‚|jj jdksÛt‚|jj j sñt‚|jj j st‚|jj j st‚|jj js0t‚dS( 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ƒ}|jƒdks*t‚dS(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