ó
,ņQc           @   s¢   d  Z  d d l Z d d l m Z d d l m Z m Z m Z m Z m	 Z	 m
 Z
 d d l m Z e   Z d e f d     YZ d e f d	     YZ d
   Z d S(   sĮ   
    jinja2.testsuite.regression
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Tests corner cases and bugs.

    :copyright: (c) 2010 by the Jinja Team.
    :license: BSD, see LICENSE for more details.
i’’’’N(   t   JinjaTestCase(   t   Templatet   Environmentt
   DictLoadert   TemplateSyntaxErrort   TemplateNotFoundt   PrefixLoader(   t	   text_typet   CornerTestCasec           B   s   e  Z d    Z d   Z RS(   c         C   s1   t  j d  } t  j d  } t  j d  } d  S(   Nsv   
        {%- for item in (1, 2, 3, 4) -%}
            [{{ item }}]
        {%- endfor %}
        {{- item -}}
        s   
        {%- for item in (1, 2, 3, 4) -%}
            [{{ item }}]
        {%- endfor %}
        {%- set item = 42 %}
        {{- item -}}
        s   
        {%- set item = 42 %}
        {%- for item in (1, 2, 3, 4) -%}
            [{{ item }}]
        {%- endfor %}
        {{- item -}}
        (   t   envt   from_string(   t   selft   t(    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_assigned_scoping   s    			c         C   s1   t  j d  } t  j d  } t  j d  } d  S(   NsŽ   
        {%- set wrapper = "<FOO>" %}
        {%- for item in (1, 2, 3, 4) %}
            {%- macro wrapper() %}[{{ item }}]{% endmacro %}
            {{- wrapper() }}
        {%- endfor %}
        {{- wrapper -}}
        sŽ   
        {%- for item in (1, 2, 3, 4) %}
            {%- macro wrapper() %}[{{ item }}]{% endmacro %}
            {{- wrapper() }}
        {%- endfor %}
        {%- set wrapper = "<FOO>" %}
        {{- wrapper -}}
        s¹   
        {%- for item in (1, 2, 3, 4) %}
            {%- macro wrapper() %}[{{ item }}]{% endmacro %}
            {{- wrapper() }}
        {%- endfor %}
        {{- wrapper -}}
        (   R	   R
   (   R   R   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_closure_scoping3   s    			(   t   __name__t
   __module__R   R   (    (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyR      s   	t   BugTestCasec           B   s   e  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 RS(   c         C   s   t    } d   | j d <d  S(   Nc         S   s   |  | S(   N(    (   t   valuet   some(    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   <lambda>V   s    t   testing(   R   t   filters(   R   R	   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_keyword_foldingT   s    	c         C   s/   t  d t i d d 6  } | j d  } d  S(   Nt   loaders#   (({% block title %}{% endblock %}))s   parent.htmls   {% if expr %}{% extends "parent.html" %}{% endif %}[[{% block title %}title{% endblock %}]]{% for item in [1, 2, 3] %}({{ item }}){% endfor %}(   R   R   R
   (   R   R	   R   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_extends_output_bugsZ   s    c         C   s   t  j d  } d  S(   Ns*   {{ "http://www.example.org/<foo"|urlize }}(   R	   R
   (   R   t   tmpl(    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_urlize_filter_escapinge   s    c         C   s   t  j d  } d  S(   Ns7  

        {% macro test() %}
            {{ caller() }}
        {% endmacro %}

        {% for num1 in range(5) %}
            {% call test() %}
                {% for num2 in range(10) %}
                    {{ loop.index }}
                {% endfor %}
            {% endcall %}
        {% endfor %}

        (   R	   R
   (   R   R   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_loop_call_loopi   s    	c         C   s)   t  d d  } |  j t | j d  d  S(   Nt   line_statement_prefixt   %s+   % for item in seq {# missing #}
...% endfor(   R   t   assert_raisesR   R
   (   R   R	   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_weird_inline_comment|   s    c         C   s   t  j d  } d  S(   NsO   {% for i in (1, 2) %}{{ i }}{% endfor %}{% macro i() %}3{% endmacro %}{{ i() }}(   R	   R
   (   R   R   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_old_macro_loop_scoping_bug   s    c         C   s   t  j d  } d  S(   Ns,   {% if b %}{% set a = 42 %}{% endif %}{{ a }}(   R	   R
   (   R   R   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt$   test_partial_conditional_assignments   s    c         C   s"   t  d d  } | j d  } d  S(   NR   t   #sų   # for j in [1, 2]:
#   set x = 1
#   for i in [1, 2]:
#     print x
#     if i % 2 == 0:
#       set x = x + 1
#     endif
#   endfor
# endfor
# if a
#   print 'A'
# elif b
#   print 'B'
# elif c == d
#   print 'C'
# else
#   print 'D'
# endif
    (   R   R
   (   R   R	   R   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_stacked_locals_scoping_bug   s    	c         C   s+   t  d  } | j d d g  j   } d  S(   Ns×   
            {% set x = 1 %}
            {% for item in foo %}
                {% if item == 1 %}
                    {% set x = 2 %}
                {% endif %}
            {% endfor %}
            {{ x }}
        t   fooi   (   R   t   rendert   strip(   R   R   t   rv(    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt(   test_stacked_locals_scoping_bug_twoframe£   s    	c         C   s   t  d  } d  S(   NsŌ  {% macro dump_users(users) -%}
        <ul>
          {%- for user in users -%}
            <li><p>{{ user.username|e }}</p>{{ caller(user) }}</li>
          {%- endfor -%}
          </ul>
        {%- endmacro -%}

        {% call(user) dump_users(list_of_user) -%}
          <dl>
            <dl>Realname</dl>
            <dd>{{ user.realname|e }}</dd>
            <dl>Description</dl>
            <dd>{{ user.description }}</dd>
          </dl>
        {% endcall %}(   R   (   R   R   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_call_with_args°   s    	c         C   s=   |  j  t t d  |  j  t t d  |  j  t t d  d  S(   Ns   {% if %}....{% endif %}s'   {% if foo %}...{% elif %}...{% endif %}s   {% for x in %}..{% endfor %}(   R   R   R   (   R   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_empty_if_condition_failsŠ   s    c         C   s   t  d  } t  d  } d  S(   Ns3  
        {% for p in foo recursive%}
            {{p.bar}}
            {% for f in p.fields recursive%}
                {{f.baz}}
                {{p.bar}}
                {% if f.rec %}
                    {{ loop(f.sub) }}
                {% endif %}
            {% endfor %}
        {% endfor %}
        s)  
        {% for p in foo%}
            {{p.bar}}
            {% for f in p.fields recursive%}
                {{f.baz}}
                {{p.bar}}
                {% if f.rec %}
                    {{ loop(f.sub) }}
                {% endif %}
            {% endfor %}
        {% endfor %}
        (   R   (   R   t   tpl1t   tpl2(    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_recursive_loop_bugÕ   s    	c         C   s2   t  d  } |  j | j d g   j   d  d  S(   Ns³   
            {% for x in y %}
                {{ loop.index0 }}
            {% else %}
                {% for i in range(3) %}{{ i }}{% endfor %}
            {% endfor %}
        t   yt   012(   R   t   assertEqualR&   R'   (   R   R   (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_else_loop_bugš   s    	c         C   sM   t  d t i t i   d 6  } y | j d  Wn t k
 rH } n Xd  S(   NR   R%   s   foo/bar.html(   R   R   R   t   get_templateR   (   R   R	   t   e(    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_correct_prefix_loader_nameś   s    c            sm   d d l  m   d t f   f d     Y} t d  } | j d |   d d  } d } |  j | |  d  S(	   Ni’’’’(   t   contextfunctiont   CallableClassc              s   e  Z   d     Z RS(   c         S   s   | j  d  S(   Nt   hello(   t   resolve(   R   t   ctx(    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   __call__  s    (   R   R   R;   (    (   R6   (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyR7     s   s   {{ callableclass() }}t   callableclassR8   t   TEST(   t   jinja2.utilsR6   t   objectR   R&   t   assert_equal(   R   R7   t   tplt   outputt   expected(    (   R6   s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt%   test_contextfunction_callable_classes  s    (   R   R   R   R   R   R   R    R!   R"   R$   R)   R*   R+   R.   R2   R5   RD   (    (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyR   R   s   										 			
	c          C   s<   t  j   }  |  j t  j t   |  j t  j t   |  S(   N(   t   unittestt	   TestSuitet   addTestt	   makeSuiteR   R   (   t   suite(    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyRI     s    (   t   __doc__RE   t   jinja2.testsuiteR    t   jinja2R   R   R   R   R   R   t   jinja2._compatR   R	   R   R   RI   (    (    (    s?   /usr/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   <module>
   s   .	<Į