ó
 `¾Tc           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l	 m
 Z
 m Z m Z 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 e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d S(   s¾   
    jinja2.testsuite.api
    ~~~~~~~~~~~~~~~~~~~~

    Tests the public API and related stuff.

    :copyright: (c) 2010 by the Jinja Team.
    :license: BSD, see LICENSE for more details.
iÿÿÿÿN(   t   JinjaTestCase(   t   next(	   t   Environmentt	   Undefinedt   DebugUndefinedt   StrictUndefinedt   UndefinedErrort   metat   is_undefinedt   Templatet
   DictLoader(   t   Cyclert   ExtendedAPITestCasec           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sÍ   d d l  m } x¶ t ƒ  | ƒ  f D]¢ } | j d ƒ } | j d i d d 6ƒ d k s] t ‚ | j d ƒ } | j d i d d 6ƒ d k s‘ t ‚ | j d	 ƒ } | j d i d d 6ƒ d
 k s# t ‚ q# Wd  S(   Niÿÿÿÿ(   t   SandboxedEnvironments   {{ foo.items()|list }}t   fooi*   t   itemss   [('items', 42)]s   {{ foo|attr("items")()|list }}s   {{ foo["items"] }}t   42(   t   jinja2.sandboxR   R   t   from_stringt   rendert   AssertionError(   t   selfR   t   envt   tmpl(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_item_and_attribute   s    %%c         C   sp   d „  } t  d | ƒ } | j d ƒ } | j d d
 ƒ d k sE t ‚ | j d ƒ } | j ƒ  d	 k sl t ‚ d  S(   Nc         S   s   |  d  k r d }  n  |  S(   Nu    (   t   None(   t   value(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   finalize_none_empty*   s    	t   finalizes,   {% for item in seq %}|{{ item }}{% endfor %}t   seqi   R   s   ||1|foos   <{{ none }}>s   <>(   Ni   s   foo(   R   R   R   R   R   (   R   R   R   R   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_finalizer)   s    	c         C   s–   d } t  | Œ  } x? | | D]3 } | j | k s8 t ‚ t | ƒ | k s t ‚ q Wt | ƒ | j d k ss t ‚ | j ƒ  | j d k s’ t ‚ d  S(   Ni   i   i   (   i   i   i   (   R   t   currentR   R   t   reset(   R   R   t   ct   item(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_cycler4   s    

c         C   s—   t  j d ƒ } | ƒ  d  k s$ t ‚ | d d ƒ d k s? t ‚ t  j d d t ƒ} t | ƒ  ƒ si t ‚ t  j d ƒ } | d d ƒ d k s“ t ‚ d  S(   NR   i*   t   undefined_to_nones   42 + fooiT   (   R   t   compile_expressionR   R   t   FalseR   (   R   t   exprt   expr2(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_expressions?   s    c         C   s‚   t  d ƒ } t j | ƒ | k s' t ‚ t j | g ƒ | k sE t ‚ t j | g ƒ | k sc t ‚ t j | ƒ | k s~ t ‚ d  S(   Nt   Content(   R	   R   t   get_templateR   t   select_templatet   get_or_select_template(   R   t   t(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_template_passthroughI   s
    c         C   s½   d „  } t  d | d t i d d 6d d 6ƒ ƒ } | j d ƒ } | j d d ƒ d k s_ t ‚ | j d ƒ } | j d d ƒ d	 k sŒ t ‚ | j d ƒ } | j d d ƒ d k s¹ t ‚ d  S(
   Nc         S   s)   |  d  k s d |  k r t S|  j d ƒ S(   Nt   .s   .html(   R   R&   t   endswith(   t   name(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   select_autoescapeQ   s    t
   autoescapet   loaders	   {{ foo }}s   test.txts	   test.htmlR   s   <foo>s   &lt;foo&gt;(   R   R
   R+   R   R   R   (   R   R3   R   R.   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_autoescape_autoselectP   s    	(   t   __name__t
   __module__R   R   R#   R)   R/   R6   (    (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyR      s   				
	t   MetaTestCasec           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s|   t  j d ƒ } t j | ƒ } | t d g ƒ k s9 t ‚ t  j d ƒ } t j | ƒ } | t d d d g ƒ k sx t ‚ d  S(   Ns!   {% set foo = 42 %}{{ bar + foo }}t   barsƒ   {% set foo = 42 %}{{ bar + foo }}{% macro meh(x) %}{{ x }}{% endmacro %}{% for item in seq %}{{ muh(item) + meh(seq) }}{% endfor %}R   t   muh(   R   t   parseR   t   find_undeclared_variablest   setR   (   R   t   astt   x(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_find_undeclared_variablesd   s    c         C   s¬   t  j d ƒ } t j | ƒ } t | ƒ d k s6 t ‚ t | ƒ d  k sN t ‚ t | ƒ g  k sf t ‚ t  j d ƒ } t j | ƒ } t | ƒ d d d d g k s¨ t ‚ d  S(   Ns/   {% extends "layout.html" %}{% include helper %}s   layout.htmlsx   {% extends "layout.html" %}{% from "test.html" import a, b as c %}{% import "meh.html" as meh %}{% include "muh.html" %}s	   test.htmls   meh.htmls   muh.html(   R   R<   R   t   find_referenced_templatesR   R   R   t   list(   R   R?   t   i(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt    test_find_refererenced_templateso   s    c         C   sú   t  j d ƒ } t j | ƒ } t | ƒ d d g k s< t ‚ t  j d ƒ } t j | ƒ } t | ƒ d d g k sx t ‚ t  j d ƒ } t j | ƒ } t | ƒ d d d  g k s· t ‚ t  j d ƒ } t j | ƒ } t | ƒ d d d  g k sö t ‚ d  S(   Ns&   {% include ["foo.html", "bar.html"] %}s   foo.htmls   bar.htmls&   {% include ("foo.html", "bar.html") %}s+   {% include ["foo.html", "bar.html", foo] %}s+   {% include ("foo.html", "bar.html", foo) %}(   R   R<   R   RB   RC   R   R   (   R   R?   RD   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_find_included_templates}   s    !(   R7   R8   RA   RE   RF   (    (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyR9   b   s   		t   StreamingTestCasec           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   sµ   t  j d ƒ } | j d t t d ƒ ƒ ƒ } |  j t | ƒ d ƒ |  j t | ƒ d ƒ |  j t | ƒ d ƒ |  j t | ƒ d ƒ |  j t | ƒ d ƒ |  j t | ƒ d	 ƒ d  S(
   NsQ   <ul>{% for item in seq %}<li>{{ loop.index }} - {{ item }}</li>{%- endfor %}</ul>R   i   s   <ul>s   <li>1 - 0</li>s   <li>2 - 1</li>s   <li>3 - 2</li>s   <li>4 - 3</li>s   </ul>(   R   R   t   streamRC   t   ranget   assert_equalR   (   R   R   RH   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_basic_streaming‘   s    c         C   sm   t  j d ƒ } | j d t t d ƒ ƒ ƒ } | j d d ƒ |  j t | ƒ d ƒ |  j t | ƒ d ƒ d  S(   NsQ   <ul>{% for item in seq %}<li>{{ loop.index }} - {{ item }}</li>{%- endfor %}</ul>R   i   t   sizei   u    <ul><li>1 - 0</li><li>2 - 1</li>u!   <li>3 - 2</li><li>4 - 3</li></ul>(   R   R   RH   RC   RI   t   enable_bufferingRJ   R   (   R   R   RH   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_buffered_streamingœ   s
    c         C   se   t  j d ƒ } | j ƒ  } | j s+ t ‚ | j d ƒ | j sG t ‚ | j ƒ  | j sa t ‚ d  S(   Nt    i   (   R   R   RH   t   bufferedR   RM   t   disable_buffering(   R   R   RH   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_streaming_behavior¤   s    
c         C   sœ   t  j ƒ  } z{ t j d ƒ } | j ƒ  } | j t j j | d ƒ d ƒ t	 t j j | d ƒ d ƒ  } |  j
 | j ƒ  d ƒ Wd  QXWd  t j | ƒ Xd  S(   Nu   âœ“s   dump.txts   utf-8t   rbs   âœ“(   t   tempfilet   mkdtempR   R   RH   t   dumpt   ost   patht   joint   opent   assertEqualt   readt   shutilt   rmtree(   R   t   tmpR   RH   t   f(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_dump_stream­   s    ! (   R7   R8   RK   RN   RR   Ra   (    (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyRG      s   				t   UndefinedTestCasec           B   sP   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   s\   d „  } t  d ƒ } | j d | ƒ d k s3 t ‚ t  d ƒ } |  j t | j d | ƒd  S(   Nc           S   s   t  ƒ  ‚ d  S(   N(   t   StopIteration(    (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test¼   s    s   A{{ test() }}BRd   t   ABs   A{{ test().missingattribute }}B(   R	   R   R   t   assert_raisesR   (   R   Rd   R.   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_stopiteration_is_undefined»   s
    	c         C   s;   y t  d ƒ j Wn t k
 r$ n Xt s7 t d ƒ ‚ d  S(   Nt   Foos   Expected actual attribute error(   R   t   __dict__t   AttributeErrorR&   R   (   R   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt%   test_undefined_and_special_attributesÃ   s
    c         C   sÐ   t  d t ƒ } |  j | j d ƒ j ƒ  d ƒ |  j t | j d ƒ j ƒ |  j | j d ƒ j ƒ  d ƒ |  j | j d ƒ j ƒ  d ƒ |  j | j d	 ƒ j d
 d ƒ d ƒ |  j | j d ƒ j ƒ  d ƒ d  S(   Nt	   undefineds   {{ missing }}u    s   {{ missing.attribute }}s   {{ missing|list }}s   []s   {{ missing is not defined }}t   Trues   {{ foo.missing }}R   i*   RO   s   {{ not missing }}(   R   R   RJ   R   R   Rf   R   (   R   R   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_default_undefinedË   s    	%c         C   sÐ   t  d t ƒ } |  j | j d ƒ j ƒ  d ƒ |  j t | j d ƒ j ƒ |  j | j d ƒ j ƒ  d ƒ |  j | j d ƒ j ƒ  d ƒ |  j | j d ƒ j d	 d
 ƒ d ƒ |  j | j d ƒ j ƒ  d ƒ d  S(   NRl   s   {{ missing }}s   {{ missing.attribute }}s   {{ missing|list }}s   []s   {{ missing is not defined }}Rm   s   {{ foo.missing }}R   i*   u,   {{ no such element: int object['missing'] }}s   {{ not missing }}(   R   R   RJ   R   R   Rf   R   (   R   R   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_debug_undefinedÕ   s    	c         C   sã   t  d t ƒ } |  j t | j d ƒ j ƒ |  j t | j d ƒ j ƒ |  j t | j d ƒ j ƒ |  j | j d ƒ j ƒ  d ƒ |  j t | j d ƒ j d d	 ƒ|  j t | j d
 ƒ j ƒ |  j | j d ƒ j ƒ  d ƒ d  S(   NRl   s   {{ missing }}s   {{ missing.attribute }}s   {{ missing|list }}s   {{ missing is not defined }}Rm   s   {{ foo.missing }}R   i*   s   {{ not missing }}s&   {{ missing|default("default", true) }}t   default(   R   R   Rf   R   R   R   RJ   (   R   R   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_strict_undefinedà   s    "c         C   s)   t  d ƒ } |  j t | j d d ƒd  S(   Ns   {{ var[42].foo }}t   vari    (   R	   Rf   R   R   (   R   R.   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_indexing_gives_undefinedê   s    c         C   s[   y t  ƒ  j d  d ƒ ƒ  Wn( t k
 rD } | j d k sW t ‚ n Xt sW t d ƒ ‚ d  S(   Nt   splits   'None' has no attribute 'split's   expected exception(   R   t   getattrR   R   t   messageR   R&   (   R   t   e(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_none_gives_proper_errorî   s
    c         C   s[   y t  d d d d ƒ ƒ  Wn( t k
 rD } | j d k sW t ‚ n Xt sW t d ƒ ‚ d  S(   Nt   obji*   R2   t   uppers%   'int object' has no attribute 'upper's   expected exception(   R   R   Rv   R   R&   (   R   Rw   (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   test_object_reprö   s
    (
   R7   R8   Rg   Rk   Rn   Ro   Rq   Rs   Rx   R{   (    (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyRb   ¹   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	   makeSuiteR   R9   RG   Rb   (   t   suite(    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyR€   ÿ   s    (   t   __doc__R|   RW   RT   R]   t   jinja2.testsuiteR    t   jinja2._compatR   t   jinja2R   R   R   R   R   R   R   R	   R
   t   jinja2.utilsR   R   R   R9   RG   Rb   R€   (    (    (    sZ   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/jinja2/testsuite/api.pyt   <module>
   s   @	G-*F