ó
 `¾Tc           @   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   s   t  j d ƒ } | j d d ƒ d k s- t ‚ t  j d ƒ } | j ƒ  d k sT t ‚ t  j d ƒ } | j ƒ  d k s{ t ‚ d  S(   Nsv   
        {%- for item in (1, 2, 3, 4) -%}
            [{{ item }}]
        {%- endfor %}
        {{- item -}}
        t   itemi*   s   [1][2][3][4]42s“   
        {%- 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_stringt   rendert   AssertionError(   t   selft   t(    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_assigned_scoping   s    			c         C   s   t  j d ƒ } | j ƒ  d k s' t ‚ t  j d ƒ } | j ƒ  d k sN t ‚ t  j d ƒ } | j d d ƒ d k s{ t ‚ d  S(   NsÞ   
        {%- set wrapper = "<FOO>" %}
        {%- for item in (1, 2, 3, 4) %}
            {%- macro wrapper() %}[{{ item }}]{% endmacro %}
            {{- wrapper() }}
        {%- endfor %}
        {{- wrapper -}}
        s   [1][2][3][4]<FOO>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 -}}
        t   wrapperi   s   [1][2][3][4]23(   R
   R   R   R   (   R   R   (    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_closure_scoping3   s    			(   t   __name__t
   __module__R   R   (    (    (    sa   /var/www/send.findwatt.com/datamanager/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 <| j d ƒ j ƒ  d k s: t ‚ d  S(   Nc         S   s   |  | S(   N(    (   t   valuet   some(    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   <lambda>V   s    t   testings"   {{ 'test'|testing(some='stuff') }}t	   teststuff(   R   t   filtersR   R   R   (   R   R
   (    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_keyword_foldingT   s    	c         C   sk   t  d t i d d 6ƒ ƒ } | j d ƒ } | j d t ƒ d k sI t ‚ | j d t ƒ d k sg t ‚ 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 %}t   exprs   [[title]](1)(2)(3)s	   ((title))(   R   R   R   R   t   FalseR   t   True(   R   R
   R   (    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_extends_output_bugsZ   s
    c         C   s+   t  j d ƒ } | j ƒ  d k s' t ‚ d  S(   Ns*   {{ "http://www.example.org/<foo"|urlize }}sK   <a href="http://www.example.org/&lt;foo">http://www.example.org/&lt;foo</a>(   R
   R   R   R   (   R   t   tmpl(    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_urlize_filter_escapinge   s    c         C   sW   t  j d ƒ } | j ƒ  j ƒ  g  t d d ƒ D] } t | ƒ ^ q. d k sS t ‚ d  S(   Ns7  

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

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

        i   i   i   (   R
   R   R   t   splitt   rangeR   R   (   R   R"   t   x(    (    sa   /var/www/send.findwatt.com/datamanager/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
   (    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_weird_inline_comment|   s    c         C   s+   t  j d ƒ } | j ƒ  d k s' t ‚ d  S(   NsO   {% for i in (1, 2) %}{{ i }}{% endfor %}{% macro i() %}3{% endmacro %}{{ i() }}t   123(   R
   R   R   R   (   R   R"   (    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_old_macro_loop_scoping_bug   s    c         C   sO   t  j d ƒ } | j d d ƒ d k s- t ‚ | j d t ƒ d k sK t ‚ d  S(   Ns,   {% if b %}{% set a = 42 %}{% endif %}{{ a }}t   ai   t   23t   bt   42(   R
   R   R   R   R    (   R   R"   (    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt$   test_partial_conditional_assignments†   s    c      	   C   sR   t  d d ƒ } | j d ƒ } | j d d d t d d d	 d
 ƒ d k sN t ‚ 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.   i    R0   t   ci*   t   dg      E@t   1111C(   R   R   R   R   R   (   R   R
   R   (    (    sa   /var/www/send.findwatt.com/datamanager/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 k s9 t ‚ d  S(   Ns×   
            {% set x = 1 %}
            {% for item in foo %}
                {% if item == 1 %}
                    {% set x = 2 %}
                {% endif %}
            {% endfor %}
            {{ x }}
        t   fooi   u   1(   R   R   t   stripR   (   R   R   t   rv(    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt(   test_stacked_locals_scoping_bug_twoframe£   s    	c         C   sz   t  d ƒ } g  | j d i d d 6d d 6d d 6g ƒ j ƒ  D] } | j ƒ  ^ q= d	 d
 d d d d d g k sv t ‚ 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 %}t   list_of_usert   apot   usernames   something elset   realnamet   testt   descriptionu   <ul><li><p>apo</p><dl>u   <dl>Realname</dl>u   <dd>something else</dd>u   <dl>Description</dl>u   <dd>test</dd>u   </dl>u
   </li></ul>(   R   R   t
   splitlinesR9   R   (   R   R   R&   (    (    sa   /var/www/send.findwatt.com/datamanager/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   (    (    sa   /var/www/send.findwatt.com/datamanager/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(    (    sa   /var/www/send.findwatt.com/datamanager/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   R9   (   R   R   (    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   test_else_loop_bugð   s    	c         C   st   t  d t i t i  ƒ d 6ƒ ƒ } y | j d ƒ Wn( t k
 r] } | j d k sp t ‚ n Xt sp t d ƒ ‚ d  S(   NR   R8   s   foo/bar.htmls   expected error here(   R   R   R   t   get_templateR   t   nameR   R   (   R   R
   t   e(    (    sa   /var/www/send.findwatt.com/datamanager/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(    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   __call__  s    (   R   R   RU   (    (   RP   (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyRQ     s   s   {{ callableclass() }}t   callableclassRR   t   TEST(   t   jinja2.utilsRP   t   objectR   R   t   assert_equal(   R   RQ   t   tplt   outputt   expected(    (   RP   sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt%   test_contextfunction_callable_classes  s    (   R   R   R   R!   R#   R'   R+   R-   R2   R7   R;   RC   RD   RG   RK   RO   R^   (    (    (    sa   /var/www/send.findwatt.com/datamanager/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(    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyRc     s    (   t   __doc__R_   t   jinja2.testsuiteR    t   jinja2R   R   R   R   R   R   t   jinja2._compatR   R
   R   R   Rc   (    (    (    sa   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/regression.pyt   <module>
   s   .	<Á