
    R?gH                     .   S SK r S SKrS SKrS SKJrJrJr  S SKJrJ	r	J
r
Jr  S SKJr  S SKr " S S\R                  5      r " S S\R                  5      r " S	 S
\R                  5      r " S S\R                  5      r " S S\R                  5      rg)    N)utf8
native_str
to_unicode)Template
DictLoader
ParseErrorLoader)
ObjectDictc                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS r\R4                  " S5      S 5       rS rSrg)TemplateTest   c                 X    [        S5      nU R                  UR                  SS9S5        g NzHello {{ name }}!Benname
   Hello Ben!r   assertEqualgenerateselftemplates     </usr/lib/python3/dist-packages/tornado/test/template_test.pytest_simpleTemplateTest.test_simple   s+    /0***6F    c                 j    [        S5      nU R                  UR                  [        S5      S9S5        g r   r   r   r   r   r   s     r   
test_bytesTemplateTest.test_bytes   s/    /0**U*<mLr   c                 Z    [        S5      nU R                  UR                  5       S5        g )Nz2 + 2 = {{ 2 + 2 }}s	   2 + 2 = 4r   r   s     r   test_expressionsTemplateTest.test_expressions   s&    12**,l;r   c                 j    [        S5      nU R                  UR                  [        S5      S9S5        g )Nz Hello{# TODO i18n #} {{ name }}!r   r   r   r   r   s     r   test_commentTemplateTest.test_comment   s/    >?**U*<mLr   c                 ~    [        SSS.5      nU R                  UR                  S5      R                  5       S5        g )Nz%{% include "header.html" %}
body textzheader text)
index.htmlzheader.htmlr)   s   header text
body textr   r   loadr   r   loaders     r   test_includeTemplateTest.test_include   s?    F,
 	KK%..02K	
r   c                 ~    [        SSS.5      nU R                  UR                  S5      R                  5       S5        g )Nzj<title>{% block title %}default title{% end %}</title>
<body>{% block body %}default body{% end %}</body>
zb{% extends "base.html" %}
{% block title %}page title{% end %}
{% block body %}page body{% end %}
)	base.html	page.htmlr2   s1   <title>page title</title>
<body>page body</body>
r*   r,   s     r   test_extendsTemplateTest.test_extends(   sC    

 	KK$--/B	
r   c                     [        SSSS.5      nU R                  UR                  S5      R                  5       S5        g )Nz{% include '2.html' %}z{% include '../b/3.html' %}ok)a/1.htmlza/2.htmlzb/3.htmlr7   s   okr*   r,   s     r   test_relative_loadTemplateTest.test_relative_load;   s>    49 
 	Z099;UCr   c                    U R                  [        S 5        U R                  [        S 5        U R                  [        S5      R	                  5       S5        U R                  [        S5      R	                  5       S5        U R                  [        S5      R	                  5       S5        U R                  [        S	5      R	                  5       S
5        g )Nc                      [        S5      $ )Nz{{r    r   r   <lambda>,TemplateTest.test_escaping.<locals>.<lambda>F       htnr   c                      [        S5      $ )Nz{%r<   r=   r   r   r>   r?   G   r@   r   z{{!s   {{z{%!s   {%z{#!s   {#z{{ 'expr' }} {{!jquery expr}}s   expr {{jquery expr}})assertRaisesr   r   r   r   r   s    r   test_escapingTemplateTest.test_escapingE   s    *&<=*&<=%113U;%113U;%113U;45>>@#	
r   c                 ~    [        [        S5      5      nU R                  UR                  5       [        S5      5        g )N   ér   r   r   r   r   s     r   test_unicode_template"TemplateTest.test_unicode_templateP   s-    DN+**,d8n=r   c                 ~    [        [        S5      5      nU R                  UR                  5       [        S5      5        g )Nu
   {{ "é" }}rG   rH   r   s     r   test_unicode_literal_expression,TemplateTest.test_unicode_literal_expressionT   s1    
 D!123**,d8n=r   c                     [        SS0SS 0S9nU R                  UR                  S5      R                  5       S5        g )N	test.htmlz{{ inc(5) }}incc                     U S-   $ )N   r=   xs    r   r>   4TemplateTest.test_custom_namespace.<locals>.<lambda>^   s    q1ur   	namespace   6r*   r,   s     r   test_custom_namespace"TemplateTest.test_custom_namespace\   s?    .)e_5M
 	[1::<dCr   c                 p    S n[        [        S5      5      nU R                  UR                  US9S5        g )Nc                 "    U R                  5       $ Nupperss    r   r_   &TemplateTest.test_apply.<locals>.upperc   s    779r   z{% apply upper %}foo{% end %}r^   s   FOOrH   r   r_   r   s      r   
test_applyTemplateTest.test_applyb   s7    	 D!@AB***7@r   c                     S n[        [        S5      5      nU R                  UR                  US9[        S5      5        g )Nc                 4    [        U 5      R                  5       $ r]   )r   r_   r`   s    r   r_   .TemplateTest.test_unicode_apply.<locals>.upperj   s    a=&&((r       {% apply upper %}foo é{% end %}r^      FOO ÉrH   rc   s      r   test_unicode_applyTemplateTest.test_unicode_applyi   s<    	) D!GHI***7l9KLr   c                     S n[        [        S5      5      nU R                  UR                  US9[        S5      5        g )Nc                 F    [        [        U 5      R                  5       5      $ r]   )r   r   r_   r`   s    r   r_   ,TemplateTest.test_bytes_apply.<locals>.upperq   s    
1++-..r   ri   r^   rj   rH   rc   s      r   test_bytes_applyTemplateTest.test_bytes_applyp   s<    	/ D!GHI***7l9KLr   c                     [        [        S5      5      nU R                  UR                  SS9S5        U R                  UR                  SS9S5        g )Nz&{% if x > 4 %}yes{% else %}no{% end %}   rS   s   yes   s   norH   r   s     r   test_ifTemplateTest.test_ifw   sN    D!IJK**Q*/8**Q*/7r   c                 l    [        [        S5      5      nU R                  UR                  5       S5        g )Nz {% if True %}{% else %}{% end %}r   rH   r   s     r   test_if_empty_bodyTemplateTest.test_if_empty_body|   s+    D!CDE**,c2r   c                     [        [        S5      5      nU R                  UR                  SS9S5        U R                  UR                  SS9S5        g )Nzb{% try %}
try{% set y = 1/x %}
{% except %}-except
{% else %}-else
{% finally %}-finally
{% end %}rR   rS   s   
try
-else
-finally
r   s   
try-except
-finally
rH   r   s     r   test_tryTemplateTest.test_try   sY    	
 	**Q*/1LM**Q*/1LMr   c                 l    [        [        S5      5      nU R                  UR                  5       S5        g )Nz{% comment blah blah %}foos   foorH   r   s     r   test_comment_directive#TemplateTest.test_comment_directive   s+    D!=>?**,f5r   c                     [        [        S5      5      nUR                  5       nSR                  UR	                  5       5      nU R                  US5        g )Nz{% for i in range(10) %}
    {% if i == 2 %}
        {% continue %}
    {% end %}
    {{ i }}
    {% if i == 6 %}
        {% break %}
    {% end %}
{% end %}r   s   013456)r   r   r   joinsplitr   )r   r   results      r   test_break_continue TemplateTest.test_break_continue   sM    	
 ""$&,,.)+r   c                 b     [        [        S5      5        [        S5      e! [         a     g f = f)Nz{% break %}Did not get expected exceptionr   r   	Exceptionr   rC   s    r   test_break_outside_loop$TemplateTest.test_break_outside_loop   s2    	T-()<== 		   ! 
..c                 b     [        [        S5      5        [        S5      e! [         a     g f = f)Nz={% for i in [] %}{% apply foo %}{% break %}{% end %}{% end %}r   r   rC   s    r   test_break_in_apply TemplateTest.test_break_in_apply   s8    	TU <== 		r   zno testable future importsc                 ~    U R                  SS5        [        S5      nU R                  UR                  5       S5        g )Ng      ?z{{ 1 / 2 }}0)r   r   r   r   s     r   test_no_inherit_future#TemplateTest.test_no_inherit_future   s7     	$M***,c2r   c                 |    [        SS05      nU R                  UR                  S5      R                  5       S5        g )Nu
   tést.htmlhellos   hellor*   r,   s     r   test_non_ascii_name TemplateTest.test_non_ascii_name   s5    -w78%56??A8Lr   r=   N)__name__
__module____qualname____firstlineno__r   r    r#   r&   r.   r3   r8   rD   rI   rL   rY   rd   rk   rp   ru   rx   r{   r~   r   r   r   unittestskipr   r   __static_attributes__r=   r   r   r   r      s    GM<M	

&D	
>>DAMM8
3N6,(	 ]]/0	3 1	3Mr   r   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)StackTraceTest   c                     [        SS05      n UR                  S5      R                  5         U R                  S5        g ! [         a*    U R                  S[        R                  " 5       ;   5         g f = f)NrO   zone
two{{1/0}}
three
        did not get expected exception# test.html:2r   r+   r   failZeroDivisionError
assertTrue	traceback
format_excr,   s     r   !test_error_line_number_expression0StackTraceTest.test_error_line_number_expression   l     
	GKK$--/II67  	GOOOy/C/C/EEF	G   0A   1A43A4c                     [        SS05      n UR                  S5      R                  5         U R                  S5        g ! [         a*    U R                  S[        R                  " 5       ;   5         g f = f)NrO   z'one
two{%if 1/0%}
three{%end%}
        r   r   r   r,   s     r    test_error_line_number_directive/StackTraceTest.test_error_line_number_directive   r   r   c                 >  ^ S mU4S jn[        SSS.S[        US90S9m TR                  S5      R                  5         U R	                  S	5        g ! [
         a@    [        R                  " 5       nU R                  S
U;   5        U R                  SU;   5         g f = f)Nc                 P   > Tc   eTR                  U 5      R                  " S0 UD6$ )Nr=   r+   r   )pathkwargsr-   s     r   load_generateCStackTraceTest.test_error_line_number_module.<locals>.load_generate   s,    %%%;;t$--777r   z!{% module Template('sub.html') %}{{1/0}}r1   sub.html_tt_modulesr<   rV   r1   r   # base.html:1z# sub.html:1)	r   r
   r+   r   r   r   r   r   r   )r   r   	exc_stackr-   s      @r   test_error_line_number_module,StackTraceTest.test_error_line_number_module   s    	8 =9U$j-&HI
	9KK$--/II67  	9!,,.IOOOy89OONi78	9s   0A ABBc                     [        SSS.5      n UR                  S5      R                  5         U R                  S5        g ! [         a*    U R                  S[        R                  " 5       ;   5         g f = f)Nz{% include 'sub.html' %}r   r   r1   r   z# sub.html:1 (via base.html:1)r   r,   s     r   test_error_line_number_include-StackTraceTest.test_error_line_number_include   sh    4)L
	XKK$--/II67  	XOO<	@T@T@VVW	X   0A 1A54A5c                     [        SSS.5      n UR                  S5      R                  5         U R                  S5        U R                  SW;   5        g ! [         a    [
        R                  " 5       n N6f = f)Nr   z{% extends 'base.html' %}r   r   r   r   )r   r+   r   r   r   r   r   r   )r   r-   r   s      r   )test_error_line_number_extends_base_error8StackTraceTest.test_error_line_number_extends_base_error  sn    #1LM
	/KK
#,,.II67 	945 ! 	/!,,.I	/s   0A A76A7c                     [        SSS.5      n UR                  S5      R                  5         U R                  S5        g ! [         a*    U R                  S[        R                  " 5       ;   5         g f = f)Nz{% block 'block' %}{% end %}zM
{% extends 'base.html' %}
{% block 'block' %}
{{1/0}}
{% end %}
            r   r   r   z# sub.html:4 (via base.html:1)r   r,   s     r   (test_error_line_number_extends_sub_error7StackTraceTest.test_error_line_number_extends_sub_error  sm    ;

	XKK
#,,.II67  	XOO<	@T@T@VVW	Xr   c                     [        SSSS.5      n UR                  S5      R                  5         U R                  S5        g ! [         a*    U R                  S[        R                  " 5       ;   5         g f = f)Nz{% include 'b.html' %}z{% include 'c.html' %}r   )a.htmlzb.htmlzc.htmlr   r   z## c.html:1 (via b.html:1, a.html:1)r   r,   s     r   test_multi_includes"StackTraceTest.test_multi_includes"  sm    22#
	KK!**,II67  	OO59M9M9OO	s   0A 1A65A6r=   N)r   r   r   r   r   r   r   r   r   r   r   r   r=   r   r   r   r      s)    GG9&X	6X$r   r   c                        \ rS rSrS rS rSrg)ParseErrorDetailTesti3  c                    [        SS05      nU R                  [        5       nUR                  S5        S S S 5        U R	                  S[        WR                  5      5        U R	                  SUR                  R                  5        U R	                  SUR                  R                  5        g ! , (       d  f       N= f)Nfoo.htmlz

{{z'Missing end expression }} at foo.html:3rt   )	r   rB   r   r+   r   str	exceptionfilenamelineno)r   r-   cms      r   test_details!ParseErrorDetailTest.test_details4  s    Z23z*bKK
# +BCDUVR\\%:%:;BLL//0	 +*s   B//
B=c                 L    U R                  S[        [        S5      5      5        g )Nzasdf at None:0asdf)r   r   r   rC   s    r   test_custom_parse_error,ParseErrorDetailTest.test_custom_parse_error<  s     	)3z&/A+BCr   r=   N)r   r   r   r   r   r   r   r=   r   r   r   r   3  s    1Dr   r   c                   V    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)AutoEscapeTestiB  c                 *    SSSSSSSSS	S
SS.U l         g )Nz'{% autoescape xhtml_escape %}{{ name }}z{% autoescape None %}{{ name }}z
{{ name }}zvescaped: {% include 'escaped.html' %}
unescaped: {% include 'unescaped.html' %}
default: {% include 'default.html' %}
zF{% autoescape xhtml_escape %}{% block name %}base: {{ name }}{% end %}z>{% autoescape None %}{% block name %}base: {{ name }}{% end %}zA{% autoescape xhtml_escape %}{% extends "unescaped_block.html" %}zn{% autoescape xhtml_escape %}{% extends "unescaped_block.html" %}{% block name %}extended: {{ name }}{% end %}z7{% autoescape None %}{% extends "escaped_block.html" %}zd{% autoescape None %}{% extends "escaped_block.html" %}{% block name %}extended: {{ name }}{% end %}zA{% autoescape xhtml_escape %}expr: {{ name }}
raw: {% raw name %})escaped.htmlunescaped.htmldefault.htmlinclude.htmlescaped_block.htmlunescaped_block.htmlescaped_extends_unescaped.html escaped_overrides_unescaped.htmlunescaped_extends_escaped.html unescaped_overrides_escaped.htmlraw_expression.html	templatesrC   s    r   setUpAutoEscapeTest.setUpC  s<    E?(
#-%-
/(11/&11$?#
r   c                    [        U R                  S S9nSnU R                  UR                  S5      R	                  US9S5        U R                  UR                  S5      R	                  US9S5        U R                  UR                  S5      R	                  US9S5        U R                  UR                  S	5      R	                  US9S
5        g )N
autoescapeBobby <table>sr   r      Bobby &lt;table&gt;sr      Bobby <table>sr   r   sP   escaped: Bobby &lt;table&gt;s
unescaped: Bobby <table>s
default: Bobby <table>s
r   r   r   r+   r   r   r-   r   s      r   test_default_offAutoEscapeTest.test_default_offi  s    DNNt<KK'00d0;=T	
 	KK()222=?P	
 	KK'00d0;=N	
 	KK'00d0;)	
r   c                    [        U R                  SS9nSnU R                  UR                  S5      R	                  US9S5        U R                  UR                  S5      R	                  US9S5        U R                  UR                  S	5      R	                  US9S5        U R                  UR                  S
5      R	                  US9S5        g )Nxhtml_escaper   r   r   r   r   r   r   r   r   sV   escaped: Bobby &lt;table&gt;s
unescaped: Bobby <table>s
default: Bobby &lt;table&gt;s
r   r   s      r   test_default_onAutoEscapeTest.test_default_on}  s    DNN~FKK'00d0;=T	
 	KK()222=?P	
 	KK'00d0;=T	
 	KK'00d0;/	
r   c                     [        U R                  5      nSnU R                  UR                  S5      R	                  US9S5        U R                  UR                  S5      R	                  US9S5        g )N<script>r   r      base: &lt;script&gt;r      base: <script>r   r   s      r   test_unextended_block$AutoEscapeTest.test_unextended_block  so    DNN+KK,-66D6A#	
 	KK./88d8CEV	
r   c                    ^ [        U R                  5      mU4S jnU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S	5        g )
Nc                 @   > TR                  U 5      R                  SS9$ )Nr   r   r   r   r-   s    r   render2AutoEscapeTest.test_extended_block.<locals>.render  s     ;;t$--:->>r   r   r  r   s   extended: &lt;script&gt;r   r   r   s   extended: <script>r   r   r   r   r  r-   s     @r   test_extended_block"AutoEscapeTest.test_extended_block  s    DNN+	? 	 @ACTU568S	
 	346M	
 	568M	
r   c                 l   ^ [        U R                  5      mU4S jnU R                  U" S5      S5        g )Nc                 @   > TR                  U 5      R                  SS9$ )Nz<>&"r   r   r  s    r   r  2AutoEscapeTest.test_raw_expression.<locals>.render  s     ;;t$--6-::r   r   s#   expr: &lt;&gt;&amp;&quot;
raw: <>&"r	  r
  s     @r   test_raw_expression"AutoEscapeTest.test_raw_expression  s2    DNN+	; 	()+V	
r   c                    ^ ^^ [        SS05      mU 4S jmUU4S jnT R                  U" SS5      S5        T R                  U" SS5      S5        T R                  U" SS	/5      S
5        g )Nzfoo.pyz){% autoescape py_escape %}s = {{ name }}
c                 j   > TR                  [        U 5      [        5        [        [	        U 5      5      $ r]   )r   typebytesreprr   )ra   r   s    r   	py_escape4AutoEscapeTest.test_custom_escape.<locals>.py_escape  s&    T!We,
1&&r   c                 B   > TR                  U 5      R                  TUS9$ )N)r  r   r   )r   r   r-   r  s     r   r  1AutoEscapeTest.test_custom_escape.<locals>.render  s"    ;;x(11ID1QQr   z<html>s   s = '<html>'
z';sys.exit()s   s = "';sys.exit()"
znot a strings   s = "['not a string']"
)r   r   )r   r  r-   r  s   ` @@r   test_custom_escape!AutoEscapeTest.test_custom_escape  sn    X'STU	'	R 	(35FG.9;VW8n-.0O	
r   c                     [        SS05      nU R                  UR                  S5      R                  [	        S5      S9S5        g )Nzfoo.txtzG{% for i in items
  %}{% if i > 0 %}, {% end %}{#
  #}{{i
  }}{% end
%}rs   )itemss   0, 1, 2, 3, 4)r   r   r+   r   ranger,   s     r   test_manual_minimize_whitespace.AutoEscapeTest.test_manual_minimize_whitespace  sL      	
 	KK	"++%(+;=M	
r   c                    [        SSSSSS.5      nU R                  UR                  S5      R                  5       S5        U R                  UR                  S	5      R                  5       S
5        U R                  UR                  S5      R                  5       S5        U R                  UR                  S5      R                  5       S5        U R                  UR                  S5      R                  5       S5        g )Nz   
	
 asdf	   z 


	 qwer     z	    zxcv

z  {% include baz.txt %} 
 z		{% include foo.html %}    )r   bar.jsbaz.txtr   include.txtr   s   
asdf r#  s   
qwer r$  s   	    zxcv

r   s    	    zxcv


r%  s   		
asdf     r*   r,   s     r   test_whitespace_by_filename*AutoEscapeTest.test_whitespace_by_filename  s    1/+ =?
 	Z099;ZHX.779:FY/88:<MN 	^4==?AUV]3<<>@RSr   c                 ~   SSS.n[        USS9nU R                  UR                  S5      R                  5       S5        U R                  UR                  S5      R                  5       S	5        [        US
S9nU R                  UR                  S5      R                  5       S5        U R                  UR                  S5      R                  5       S5        [        USS9nU R                  UR                  S5      R                  5       S5        U R                  UR                  S5      R                  5       S5        g )Nz		foo

z		bar

)r   bar.txtall)
whitespacer   s   		foo

r)  s   		bar

singles    foo
s    bar
onelines    foo s    bar r*   )r   r   r-   s      r   test_whitespace_by_loader(AutoEscapeTest.test_whitespace_by_loader  s    !.=I	I%8Z099;^LY/88:NKI(;Z099;YGY/88:IFI)<Z099;XFY/88:HEr   c                 |    [        SS05      nU R                  UR                  S5      R                  5       S5        g )Nr   zz{% whitespace oneline %}
    {% for i in range(3) %}
        {{ i }}
    {% end %}
{% whitespace all %}
    pre	formatted
s     0  1  2  
    pre	formatted
r*   r,   s     r   test_whitespace_directive(AutoEscapeTest.test_whitespace_directive  sA     	
 	KK
#,,.0T	
r   r   N)r   r   r   r   r   r   r   r  r  r  r  r   r&  r.  r1  r   r=   r   r   r   r   B  s<    $
L
(
(	

$

 
$T.F
r   r   c                        \ rS rSrS rS rSrg)TemplateLoaderTesti  c                     [        [        R                  R                  [        R                  R	                  [
        5      S5      5      U l        g )Nr   )r	   osr   r   dirname__file__r-   rC   s    r   r   TemplateLoaderTest.setUp  s*    RWW\\"''//(*C[QRr   c                     U R                   R                  S5      nUR                  5       nU R                  [	        U5      R                  5       S5        g )Nz	utf8.htmlu   Héllo)r-   r+   r   r   r   strip)r   tmplr   s      r   test_utf8_in_file$TemplateLoaderTest.test_utf8_in_file  s?    {{,F+113\Br   )r-   N)r   r   r   r   r   r=  r   r=   r   r   r4  r4    s    SCr   r4  )r6  r   r   tornado.escaper   r   r   tornado.templater   r   r   r	   tornado.utilr
   typingTestCaser   r   r   r   r4  r=   r   r   <module>rD     s    	   7 7 E E # zM8$$ zMzgX&& gTD8,, DL
X&& L
^C** Cr   