
Rc           @   s  d  Z  d d l Z d d l Z d d l m Z d d l m Z m Z m Z m	 Z	 d d l
 m Z d d l m Z d d l m Z m Z d d l m Z m Z m Z m Z d	 Z e j d
  Z i d d 6d d 6d d 6d d 6d d 6Z i d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d  d! 6d" d# 6d$ d% 6Z i i d& d' 6d( d) 6d* d+ 6d, d- 6d. d/ 6d0 d1 6d2 d3 6d4 d5 6d6 6Z e d7    Z e d8    Z e d9 e e  d: d; g  Z e j j  i e d< 6e d= 6e d> 6 e d9 e e  d: d; g  Z! e! j" e e d? e# d@ e f dA     YZ$ dB e f dC     YZ% dD e f dE     YZ& dF e f dG     YZ' dH e f dI     YZ( dJ e f dK     YZ) dL e f dM     YZ* dN   Z+ d S(O   s   
    jinja2.testsuite.ext
    ~~~~~~~~~~~~~~~~~~~~

    Tests for the extensions.

    :copyright: (c) 2010 by the Jinja Team.
    :license: BSD, see LICENSE for more details.
iN(   t   JinjaTestCase(   t   Environmentt
   DictLoadert   contextfunctiont   nodes(   t   TemplateAssertionError(   t	   Extension(   t   Tokent   count_newlines(   t   nextt   BytesIOt
   itervaluest	   text_typei   s   _\((.*?)\)(?s)sS   <title>{{ page_title|default(_("missing")) }}</title>{% block body %}{% endblock %}s   master.htmls[   {% extends "master.html" %}{% block body %}{% trans %}watch out{% endtrans %}{% endblock %}s
   child.htmls_   {% trans user_count %}One user online{% pluralize %}{{ user_count }} users online{% endtrans %}s   plural.htmlsf   {% trans user_count=get_user_count() %}{{ user_count }}s{% pluralize %}{{ user_count }}p{% endtrans %}s   plural2.htmls/   {{ _("User: %(num)s")|format(num=user_count) }}s   stringformat.htmls(   {{ _("User: %(num)s", num=user_count) }}s9   {{ ngettext("%(num)s apple", "%(num)s apples", apples) }}s   ngettext.htmlsR   {% trans num=apples %}{{ num }} apple{% pluralize %}{{ num }} apples{% endtrans %}s   ngettext_long.htmls(   {% trans %}User: {{ num }}{% endtrans %}s   transvars1.htmls2   {% trans num=count %}User: {{ num }}{% endtrans %}s   transvars2.htmls4   {% trans count=num %}User: {{ count }}{% endtrans %}s   transvars3.htmls"   {% trans %}%(hello)s{% endtrans %}s   novars.htmls)   {% trans %}{{ foo }}%(foo)s{% endtrans %}s	   vars.htmls)   {% trans foo="42" %}%(foo)s{% endtrans %}s   explicitvars.htmlu   fehlendt   missingu   pass aufs	   watch outu   Ein Benutzer onlines   One user onlineu   %(user_count)s Benutzer onlines   %(user_count)s users onlineu   Benutzer: %(num)ss   User: %(num)su   Benutzer: %(count)ss   User: %(count)su   %(num)s Apfels   %(num)s appleu   %(num)s Äpfels   %(num)s applest   dec         C   s.   |  j  d d  } t j  | i   j  | |  S(   Nt   LANGUAGEt   en(   t   gett	   languages(   t   contextt   stringt   language(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   gettextI   s    c         C   sV   |  j  d d  } | d k r: t j  | i   j  | |  St j  | i   j  | |  S(   NR   R   i   (   R   R   (   R   t   st   pt   nR   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   ngettextO   s    t   loadert
   extensionss   jinja2.ext.i18nt   _R   R   t   newstylet   TestExtensionc           B   s/   e  Z e d  g  Z d Z d   Z d   Z RS(   t   testi*   c         C   sb   t  j |  j d t  j d  |  j d  t  j t d  t  j   g  g  j t	 | j
  j  S(   Nt   _dumpt	   sandboxedt   ext_attrs   .importable_object(   R   t   Outputt   call_methodt   EnvironmentAttributet   attrt   ImportedNamet   __name__t   ContextReferencet
   set_linenoR	   t   streamt   lineno(   t   selft   parser(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   parsek   s    c         C   s   d | | | | j  f S(   Ns   %s|%s|%s|%s(   t   blocks(   R.   R"   R#   t   imported_objectR   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR!   s   s
    (   R)   t
   __module__t   sett   tagsR#   R0   R!   (    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR   g   s   	t   PreprocessorExtensionc           B   s   e  Z d d   Z RS(   c         C   s   | j  d d  S(   Ns   [[TEST]]s   ({{ foo }})(   t   replace(   R.   t   sourcet   namet   filename(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt
   preprocess~   s    N(   R)   R3   t   NoneR;   (    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR6   |   s   t   StreamFilterExtensionc           B   s   e  Z d    Z d   Z RS(   c         c   sK   xD | D]< } | j  d k r> x$ |  j |  D] } | Vq, Wq | Vq Wd  S(   Nt   data(   t   typet   interpolate(   R.   R,   t   tokent   t(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   filter_stream   s
    c         c   s2  d } t  | j  } | j } x t j | j |  } | d  k rF Pn  | j | | j   !} | rv t | d |  Vn  | t | j  7} t | d d   Vt | d d  Vt | d d   Vt | d | j	 d   Vt | d	 d   Vt | d
 d   V| j
   } q! | | k  r.t | d | j |  Vn  d  S(   Ni    R>   t   variable_beginR9   R   t   lparenR   i   t   rparent   variable_end(   t   lent   valueR-   t   _gettext_ret   searchR<   t   startR   R   t   groupt   end(   R.   RA   t   posRN   R-   t   matchRI   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR@      s(    	(   R)   R3   RC   R@   (    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR=      s   	t   ExtensionsTestCasec           B   sb   e  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    } | j d  | j d  } d  S(   Ns   jinja2.ext.autoescapes6   {% autoescape true %}{{ "<test>" }}{% endautoescape %}(   R   t   add_extensiont   from_string(   R.   t   envRB   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_extend_late   s    	c         C   s4   t  d d g  } | j d  } | j d  } d  S(   NR   s   jinja2.ext.loopcontrolss   
            {%- for item in [1, 2, 3, 4] %}
                {%- if item % 2 == 0 %}{% continue %}{% endif -%}
                {{ item }}
            {%- endfor %}s   
            {%- for item in [1, 2, 3, 4] %}
                {%- if item > 2 %}{% break %}{% endif -%}
                {{ item }}
            {%- endfor %}(   R   RS   (   R.   RT   t   tmpl(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_loop_controls   s    		c         C   s%   t  d d g  } | j d  } d  S(   NR   s   jinja2.ext.dos   
            {%- set items = [] %}
            {%- for char in "foo" %}
                {%- do items.append(loop.index0 ~ char) %}
            {%- endfor %}{{ items|join(', ') }}(   R   RS   (   R.   RT   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_do   s    	c         C   s%   t  d d g  } | j d  } d  S(   NR   s   jinja2.ext.with_sy           {% with a=42, b=23 -%}
            {{ a }} = {{ b }}
        {% endwith -%}
            {{ a }} = {{ b }}        (   R   RS   (   R.   RT   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt	   test_with   s    	c         C   s%   t  d t g  } | j d  } d  S(   NR   s
   {% test %}(   R   R   RS   (   R.   RT   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_extension_nodes   s    c         C   s   d  S(   N(    (   R.   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_identifier   s    c         C   sS   t  d t g  } | j   } x. | | f D]  } x t | j  D] } qA Wq+ Wd  S(   NR   (   R   R   t   overlayR   R   (   R.   t   originalR\   RT   t   ext(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_rebinding   s
    c         C   s%   t  d t g  } | j d  } d  S(   NR   s
   {[[TEST]]}(   R   R6   RS   (   R.   RT   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_preprocessor_extension   s    c         C   sA   t  d t g  } d   | j d <| j d  } | j   } d  S(   NR   c         S   s
   |  j    S(   N(   t   upper(   t   x(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   <lambda>   s    R   s   Foo _(bar) Baz(   R   R=   t   globalsRS   t   render(   R.   RT   RV   t   out(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_streamfilter_extension   s
    c         C   sW   d t  f d     Y} d t  f d     Y} t d | | g  } t | j    } d  S(   Nt   T1c           B   s   e  Z d  Z RS(   i   (   R)   R3   t   priority(    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRh      s   t   T2c           B   s   e  Z d  Z RS(   i   (   R)   R3   Ri   (    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRj      s   R   (   R   R   t   listt   iter_extensions(   R.   Rh   Rj   RT   R^   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_extension_ordering   s
    (   R)   R3   RU   RW   RX   RY   RZ   R[   R_   R`   Rg   Rm   (    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRQ      s   										t   InternationalizationTestCasec           B   sG   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s   t  j d  } d  S(   Ns
   child.html(   t   i18n_envt   get_template(   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt
   test_trans   s    c         C   s   t  j d  } d  S(   Ns   plural.html(   Ro   Rp   (   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_trans_plural   s    c            s+   t  j d  }   f d     d   _ d  S(   Ns   plural2.htmlc              s     j  d 7_  d S(   Ni   (   t   called(    (   t   get_user_count(    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRt     s    i    (   Ro   Rp   Rs   (   R.   RV   (    (   Rt   s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt    test_trans_plural_with_functions  s    	c         C   s)   t  j d  } |  j t t  j d  d  S(   Ns_   {% trans foo=42, count=2 %}{{ count }} item{% pluralize count %}{{ count }} items{% endtrans %}s6   {% trans foo %}...{% pluralize bar %}...{% endtrans %}(   Ro   RS   t   assert_raisesR   (   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_complex_plural
  s    c         C   s   t  j d  } d  S(   Ns   stringformat.html(   Ro   Rp   (   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_trans_stringformatting  s    c         C   s)   d d l  m } t d j d   } d  S(   Ni(   t   babel_extracts   
        {{ gettext('Hello World') }}
        {% trans %}Hello World{% endtrans %}
        {% trans %}{{ users }} user{% pluralize %}{{ users }} users{% endtrans %}
        t   ascii(   t
   jinja2.extRy   R
   t   encode(   R.   Ry   R8   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_extract  s    c         C   s)   d d l  m } t d j d   } d  S(   Ni(   Ry   s   
        {# trans first #}
        {{ gettext('Hello World') }}
        {% trans %}Hello World{% endtrans %}{# trans second #}
        {#: third #}
        {% trans %}{{ users }} user{% pluralize %}{{ users }} users{% endtrans %}
        s   utf-8(   R{   Ry   R
   R|   (   R.   Ry   R8   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_comment_extract"  s    (	   R)   R3   Rq   Rr   Ru   Rw   Rx   R}   R~   (    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRn      s   							t$   NewstyleInternationalizationTestCasec           B   sb   e  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  j d  } d  S(   Ns
   child.html(   t   newstyle_i18n_envRp   (   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRq   4  s    c         C   s   t  j d  } d  S(   Ns   plural.html(   R   Rp   (   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRr   8  s    c         C   s)   t  j d  } |  j t t j d  d  S(   Ns_   {% trans foo=42, count=2 %}{{ count }} item{% pluralize count %}{{ count }} items{% endtrans %}s6   {% trans foo %}...{% pluralize bar %}...{% endtrans %}(   R   RS   Rv   R   Ro   (   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRw   =  s    c         C   s   t  j d  } d  S(   Ns   stringformat.html(   R   Rp   (   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRx   D  s    c         C   s   t  j d  } d  S(   Ns   ngettext.html(   R   Rp   (   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_newstyle_pluralH  s    c         C   sD   t  d d d g  } | j d   d   d t | j d  } d  S(   NR   s   jinja2.ext.autoescapes   jinja2.ext.i18nc         S   s   d S(   Nu   <strong>Wert: %(name)s</strong>(    (   Rb   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRc   P  s    c         S   s   |  S(   N(    (   R   R   R   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyRc   Q  s    R   sI   {% autoescape ae %}{{ gettext("foo", name="<test>") }}{% endautoescape %}(   R   t   install_gettext_callablest   TrueRS   (   R.   RT   RB   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_autoescape_supportM  s    	c         C   s   t  j d  } d  S(   Ns   ngettext_long.html(   R   Rp   (   R.   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_num_used_twiceW  s    c         C   s   t  j d d t } d  S(   Nso   
            {% trans num=3 %}{{ num }} apple{% pluralize
            %}{{ num }} apples{% endtrans %}
        t   raw(   R   t   compileR   (   R.   R8   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_num_called_num[  s    c         C   s1   t  j d  } t  j d  } t  j d  } d  S(   Ns   transvars1.htmls   transvars2.htmls   transvars3.html(   R   Rp   (   R.   t   t1t   t2t   t3(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_trans_varsg  s    c         C   s1   t  j d  } t  j d  } t  j d  } d  S(   Ns   novars.htmls	   vars.htmls   explicitvars.html(   R   Rp   (   R.   RB   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_novars_vars_escapingo  s    (   R)   R3   Rq   Rr   Rw   Rx   R   R   R   R   R   R   (    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR   2  s   						
			t   AutoEscapeTestCasec           B   s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C   sR   t  d d g d t  } | j d  } t  d d g d t  } | j d  } d  S(   NR   s   jinja2.ext.autoescapet
   autoescapes   
            {{ "<HelloWorld>" }}
            {% autoescape false %}
                {{ "<HelloWorld>" }}
            {% endautoescape %}
            {{ "<HelloWorld>" }}
        s   
            {{ "<HelloWorld>" }}
            {% autoescape true %}
                {{ "<HelloWorld>" }}
            {% endautoescape %}
            {{ "<HelloWorld>" }}
        (   R   R   RS   t   False(   R.   RT   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_scoped_settingz  s    				c         C   s:   t  d d g d t  } | j d  } | j d  } d  S(   NR   s   jinja2.ext.autoescapeR   s&   {{ {"foo": "<test>"}|xmlattr|escape }}sO   {% autoescape false %}{{ {"foo": "<test>"}|xmlattr|escape }}{% endautoescape %}(   R   R   RS   (   R.   RT   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_nonvolatile  s
    	c         C   s+   t  d d g d t  } | j d  } d  S(   NR   s   jinja2.ext.autoescapeR   sM   {% autoescape foo %}{{ {"foo": "<test>"}|xmlattr|escape }}{% endautoescape %}(   R   R   RS   (   R.   RT   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_volatile  s    	c         C   s%   t  d d g  } | j d  } d  S(   NR   s   jinja2.ext.autoescapesT   {% autoescape true %}{% set x = "<x>" %}{{ x }}{% endautoescape %}{{ x }}{{ "<y>" }}(   R   RS   (   R.   RT   RV   (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_scoping  s    c         C   s   t  d d g  } d } | j |  } t  d d g  } | j | d t } t  d d g d t  } | j | d t } d  S(   NR   s   jinja2.ext.autoescapes   
        {% autoescape val %}
            {% macro foo(x) %}
                [{{ x }}]
            {% endmacro %}
            {{ foo().__class__.__name__ }}
        {% endautoescape %}
        {{ '<testing>' }}
        R   R   (   R   RS   R   R   (   R.   RT   t
   tmplsourceRV   t   pysource(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   test_volatile_scoping  s    		(   R)   R3   R   R   R   R   R   (    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR   x  s
   					c          C   sh   t  j   }  |  j t  j t   |  j t  j t   |  j t  j t   |  j t  j t   |  S(   N(   t   unittestt	   TestSuitet   addTestt	   makeSuiteRQ   Rn   R   R   (   t   suite(    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyR     s    (,   t   __doc__t   reR   t   jinja2.testsuiteR    t   jinja2R   R   R   R   t   jinja2.exceptionsR   R{   R   t   jinja2.lexerR   R   t   jinja2._compatR	   R
   R   R   t   importable_objectR   RJ   t   i18n_templatest   newstyle_i18n_templatesR   R   R   Ro   Rd   t   updateR   R   R   R   R6   R=   RQ   Rn   R   R   R   (    (    (    s8   /usr/lib/python2.7/site-packages/jinja2/testsuite/ext.pyt   <module>
   sx   ""

!S<FM