³ò
£-ãFc           @   sž  d  Z  d d k l Z l Z d d k l 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 Z d Z d Z d Z d Z d Z d d d d d d d d d d  d! g 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/ „  Z' d0 „  Z( d1 „  Z) d2 „  Z* d3 „  Z+ d4 „  Z, d5 „  Z- d6 „  Z. d7 „  Z/ d8 „  Z0 d9 „  Z1 d: S(;   s£   
    unit test for expression syntax
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    :copyright: 2007 by Armin Ronacher.
    :license: BSD, see LICENSE for more details.
iÿÿÿÿ(   t   Environmentt
   DictLoader(   t   TemplateSyntaxErrors2   {{ foo('a', c='d', e='f', *['b'], **{'g': 'h'}) }}s(   {{ [1, 2, 3][:] }}|{{ [1, 2, 3][::-1] }}s   {{ foo.bar }}|{{ foo['bar'] }}s   {{ foo[0] }}|{{ foo[-1] }}s-   {{ {'items': 'foo'}.items }}|{{ {}.items() }}s    {{ () }}|{{ (1,) }}|{{ (1, 2) }}s$   {{ (1 + 1 * 2) - 3 / 2 }}|{{ 2**3 }}s$   {{ 3 // 2 }}|{{ 3 / 2 }}|{{ 3 % 2 }}s   {{ +3 }}|{{ -3 }}s   {{ [1, 2] ~ 'foo' }}s>   {{ 1 > 0 }}|{{ 1 >= 1 }}|{{ 2 < 3 }}|{{ 2 == 2 }}|{{ 1 <= 1 }}s-   {{ 1 in [1, 2, 3] }}|{{ 1 not in [1, 2, 3] }}s-   {{ [] }}|{{ {} }}|{{ () }}|{{ '' }}|{{ @() }}s8   {{ true and false }}|{{ false or true }}|{{ not false }}s8   {{ (true and false) or (false and true) and not false }}s   {{ 0 if true else 1 }}s   {{ [1, 2, 3].0 }}s   {{ "foo"|upper + "bar"|upper }}s#   {{ @/\S+/.findall('foo bar baz') }}s   {{ () }}s   {{ (1, 2) }}s   {{ (1, 2,) }}s   {{ 1, }}s
   {{ 1, 2 }}s(   {% for foo, bar in seq %}...{% endfor %}s&   {% for x in foo, bar %}...{% endfor %}s"   {% for x in foo, %}...{% endfor %}s,   {% for x in foo, recursive %}...{% endfor %}s0   {% for x in foo, bar recursive %}...{% endfor %}s-   {% for x, in foo, recursive %}...{% endfor %}s8   {{ (1, 2,) }}|{{ [1, 2,] }}|{{ {1: 2,} }}|{{ @(1, 2,) }}c          C   sV   d d k  l }  |  ƒ  } d „  | i d <| i t ƒ } | i ƒ  d j p t ‚ d  S(   Niÿÿÿÿ(   R    c         S   s   |  | | | | S(    (    (   t   at   bt   ct   et   g(    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   <lambda>3   s    t   foot   abdfh(   t   jinjaR    t   globalst   from_stringt   CALLt   rendert   AssertionError(   R    t   envt   tmpl(    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt	   test_call0   s
    	c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   [1, 2, 3]|[3, 2, 1](   R   t   SLICINGR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_slicing8   s    c         C   s<   |  i  t ƒ } | i d h  d d <ƒ d j p t ‚ d  S(   NR	   i*   t   bars   42|42(   R   t   ATTRR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt	   test_attr=   s    c         C   s<   |  i  t ƒ } | i d d d d g ƒ d j p t ‚ d  S(   NR	   i    i   i   s   0|2(   R   t	   SUBSCRIPTR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_subscriptB   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   foo|[](   R   t   KEYATTRR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_keyattrG   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   ()|(1,)|(1, 2)(   R   t   TUPLER   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt
   test_tupleL   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   1.5|8(   R   t   MATHR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt	   test_mathQ   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   1|1.5|1(   R   t   DIVR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_divV   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   3|-3(   R   t   UNARYR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt
   test_unary[   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns	   [1, 2]foo(   R   t   CONCATR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_concat`   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   True|True|True|True|True(   R   t   COMPARER   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_comparee   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns
   True|False(   R   t   INOPR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt	   test_inopj   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   []|{}|()||set([])(   R   t   LITERALSR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_literalso   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   False|True|True(   R   t   BOOLR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt	   test_boolt   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Nt   False(   R   t   GROUPINGR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_groupingy   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Nt   1(   R   t
   DJANGOATTRR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_django_attr~   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Nt   0(   R   t   CONDEXPRR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_conditional_expressionƒ   s    c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Nt   FOOBAR(   R   t   FILTERPRIORITYR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_filter_priorityˆ   s    c         C   s×   t  d f t  d f t  d f t  d f t  d f t d f t d f t d f t d	 f t d
 f g
 } xp | D]h \ } } | oD y |  i d | ƒ GHWn t j
 o
 qg n Xt p
 t d ‚ qg |  i d | ƒ qg Wd  S(   Ns	   *foo, bars
   *foo, *bars   *foo, bar=42s   **foo, *bars
   **foo, bars   foo, bars   foo, bar=42s   foo, bar=23, *argss   a, b=c, *d, **es   *foo, **bars   {{ foo(%s) }}s   expected syntax errors   foo(%s)(   t   TrueR/   R   R   R   (   R   t   testst   should_failt   sig(    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_function_calls   s&    									 c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns   ['foo', 'bar', 'baz'](   R   t   REGEXR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt
   test_regex¥   s    c         C   s,   x% t  D] } |  i | ƒ p t ‚ q Wd  S(   N(   t   TUPLETEMPLATESR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_tuple_exprª   s     c         C   s-   |  i  t ƒ } | i ƒ  d j p t ‚ d  S(   Ns    (1, 2)|[1, 2]|{1: 2}|set([1, 2])(   R   t   TRAILINGCOMMAR   R   (   R   R   (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_trailing_comma¯   s    c          C   s¬   t  d t h  d d <ƒ ƒ }  d d d d d g } xr | D]j \ } } y |  i | d ƒ } Wn* t j
 o | d  j p
 t d ‚ q: X| | i ƒ  j p t ‚ q: Wd  S(   Nt   loaders!   [{% block empty %}{% endblock %}]t   emptys   {% extends "empty" %}s   [!]s     {% extends "empty" %}s     !
s     !
!s    {# foo #}  {% extends "empty" %}s+   {% set foo = "blub" %}{% extends "empty" %}s    {% block empty %}!{% endblock %}s   got syntax error(   s   {% extends "empty" %}s   [!](   s     {% extends "empty" %}s   [!](   s     !
s     !
!(   s    {# foo #}  {% extends "empty" %}s   [!](   s+   {% set foo = "blub" %}{% extends "empty" %}N(   R    R   t   NoneR   R   R   R   (   R   R<   R   t   expected_output(    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pyt   test_extends_position´   s    	 N(2   t   __doc__R   R    R   t   jinja.exceptionsR   R   R   R   R   R   R   R   R!   R#   R%   R'   R)   R+   R-   R0   R6   R3   R9   R@   RB   RD   R   R   R   R   R   R   R    R"   R$   R&   R(   R*   R,   R.   R1   R4   R7   R:   R?   RA   RC   RE   RJ   (    (    (    s7   /Users/mitsuhiko/Development/jinja/tests/test_syntax.pys   <module>   sp   																							