
    dafoW                         d dl Z d dlZd dlmZ  G d de j                        Z G d d      Z G d d      Z G d	 d
e j                        Zedk(  r e j                          yy)    N)Templatec                   `    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y)
ModuleTestc                 H   | j                  t        j                  d       | j                  t        j                  d       | j                  t        j                  d       | j                  t        j
                  t        j                  t        j                  z          | j                  t        j                  d       | j                  t        j                  t        j                  dz          | j                  t        j                  d       | j                  t        j                  d       | j                  t        j                  t        j                  t        j                  z   t        j                  z   t        j                  z   t        j                  z          y )Nz 	
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789abcdefABCDEF01234567z !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)assertEqualstring
whitespaceascii_lowercaseascii_uppercaseascii_lettersdigits	hexdigits	octdigitspunctuation	printableselfs    +/root/Python-3.12.4/Lib/test/test_string.py
test_attrszModuleTest.test_attrs   s+   
 	**,=>//1MN//1MN--v/E/EH^H^/^_5))6==>+IJ)):6++-QR))6==6;Q;Q+QTZTjTj+jmsmm+  CI  CT  CT  ,T  	U    c                    | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  dd      d       | j                  t        j                  d	      d
       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  dd      d       y )Nzabc def ghizAbc Def Ghizabc	def
ghizabc	   def  
ghizABC DEF GHIzABC-DEF-GHI-zAbc-Def-GhizABC-def DEF-ghi GHIzAbc-def Def-ghi Ghiz   aBc  DeF   zAbc Defz		aBc	DeF		z		Abc	Def	)r   r   capwordsr   s    r   test_capwordszModuleTest.test_capwords   s    7G9=I)=>N7G<mL)>?AVW)9:IF8)D>Or   c                    t        j                         }| j                  |j                  d      d       | j                  |j                  dd      d       | j                  |j                  ddd      d       | j	                  t
        |j                         | j	                  t
        t         j                  j                         y )Nfoozfoo{0}barfoobarzfoo{1}{0}-{1}   z	foo6bar-6)r   	Formatterr   formatassertRaises	TypeErrorr   fmts     r   test_basic_formatterzModuleTest.test_basic_formatter"   s     E*E2He4h?OUA>L)SZZ0)V%5%5%<%<=r   c                 @   t        j                         }| j                  |j                  dd      d       | j	                  t
        |j                  d       | j                  |j                  dd      d       | j	                  t
        |j                  d       | j                  |j                  dd      d       | j	                  t
        |j                  d       | j                  t        d	      5  |j                  dd
       d d d        y # 1 sw Y   y xY w)Nz-{arg}-testargz-test-z-{self}-r   z-{format_string}-)format_stringr1   )r1   r0   )r   r&   r   r'   r(   KeyErrorassertRaisesRegexr)   r*   s     r   test_format_keyword_argumentsz(ModuleTest.test_format_keyword_arguments*   s     I6:HE(CJJ	:JV<hG(CJJ
;$7vN!	#(CJJ0CD##I? 	<JJYFJ;	< 	< 	<s   7DDc                 2   t        j                         }| j                  |j                  ddd      dj                  dd             | j                  |j                  dd dd      dj                  d dd             | j                  |j                  ddd      dj                  dd             | j                  |j                  dddd      dj                  ddd             | j                  |j                  d	d
dd      d	j                  d
dd             | j	                  t
              5  |j                  ddd       d d d        | j	                  t
              5  |j                  ddd       d d d        y # 1 sw Y   ;xY w# 1 sw Y   y xY w)Nzfoo{}{}r#   r%   zfoo{1}{num}{1})numz{:^{}}z	{:^{}} {}Xz{:^{pad}}{}r"   )padzfoo{1}{}zfoo{}{1}r   r&   r   r'   r(   
ValueErrorr*   s     r   test_auto_numberingzModuleTest.test_auto_numbering6   sw    Iua8"))%3	5$4dEqI)00u!0D	FHeQ7!2	4K3?$++E1c:	<M5%QG&--eU-B	D z* 	-JJz5!,	- z* 	-JJz5!,	- 	-	- 	-	- 	-s   3F$FF
Fc                 J   t        j                         }| j                  |j                  dd      d       | j                  |j                  dd      d       | j	                  t
        |j                  dd       | j                  |j                  dd      d	       | j                  |j                  dt         j                        d
       | j                  |j                  dt        d            d       | j                  |j                  dt        d            d       y )Nz	-{arg!r}-r.   r/   z-'test'-z{0!s}z{0!h}z{0!a}*   42z6'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'   z'\xff'   z'\u0100')r   r&   r   r'   r(   r:   r   chrr*   s     r   test_conversion_specifiersz%ModuleTest.test_conversion_specifiersI   s     KV<jIGV4f=*cjj'6BGR0$7Gf.B.BCD	FGc#h7CGc#h7Er   c                 
   t        j                         } G d d      } |       }| j                  |j                  d|      d       | j	                  t
              5  |j                  dd       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy),ModuleTest.test_name_lookup.<locals>.AnyAttrc                     |S N )r   attrs     r   __getattr__z8ModuleTest.test_name_lookup.<locals>.AnyAttr.__getattr__X   s    r   N)__name__
__module____qualname__rJ   rH   r   r   AnyAttrrE   W   s    r   rN   z{0.lumber}{0.jack}
lumberjack )r   r&   r   r'   r(   AttributeError)r   r+   rN   xs       r   test_name_lookupzModuleTest.test_name_lookupU   sq     	 	 I$8!<lK~. 	1JJ+R0	1 	1 	1s   A99Bc                 h   t        j                         }g d}| j                  |j                  d|      d       | j	                  t
              5  |j                  dg        d d d        | j	                  t              5  |j                  di        d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)N)eggsandspamz{0[2]}{0[0]}spameggs)r   r&   r   r'   r(   
IndexErrorr2   )r   r+   lookups      r   test_index_lookupzModuleTest.test_index_lookup_   s     (NF;ZHz* 	+JJ~r*	+x( 	+JJ~r*	+ 	+	+ 	+	+ 	+s   B B(B%(B1c                      G d dt         j                        } |ddi      }| j                  |j                  d      d       y )Nc                       e Zd Zi fdZd Zy)>ModuleTest.test_override_get_value.<locals>.NamespaceFormatterc                 P    t         j                  j                  |        || _        y rG   )r   r&   __init__	namespace)r   ra   s     r   r`   zGModuleTest.test_override_get_value.<locals>.NamespaceFormatter.__init__j   s      ))$/!*r   c                     t        |t              r	 ||   S t        j
                  j                  |||       y # t        $ r | j                  |   cY S w xY wrG   )
isinstancestrr2   ra   r   r&   	get_value)r   keyargskwdss       r   re   zHModuleTest.test_override_get_value.<locals>.NamespaceFormatter.get_valuen   sU    c3'3#Cy( $$..sD$? $ 3#~~c223s   9 AAN)rK   rL   rM   r`   re   rH   r   r   NamespaceFormatterr^   i   s    )+ +@r   ri   greetinghelloz{greeting}, world!zhello, world!r   r&   r   r'   )r   ri   r+   s      r   test_override_get_valuez"ModuleTest.test_override_get_valueh   sA    	@!1!1 	@ !*W!56$89?Kr   c                      G d dt         j                        } |       }| j                  |j                  dd       d       y )Nc                       e Zd Zd Zy)<ModuleTest.test_override_format_field.<locals>.CallFormatterc                 $    t         |       |      S rG   )r'   )r   valueformat_specs      r   format_fieldzIModuleTest.test_override_format_field.<locals>.CallFormatter.format_field~   s    eg{33r   N)rK   rL   rM   rt   rH   r   r   CallFormatterrp   }   s    4r   ru   z*{0}*c                       y)NresultrH   rH   r   r   <lambda>z7ModuleTest.test_override_format_field.<locals>.<lambda>   s    r   z*result*rl   )r   ru   r+   s      r   test_override_format_fieldz%ModuleTest.test_override_format_field|   s9    	4F,, 	4 oG->?Lr   c                      G d dt         j                        } |       }| j                  |j                  ddd      d       y )Nc                        e Zd Z fdZ xZS ):ModuleTest.test_override_convert_field.<locals>.XFormatterc                 0    |dk(  ry t         |   ||      S )NrR   )superconvert_field)r   rr   
conversion	__class__s      r   r   zHModuleTest.test_override_convert_field.<locals>.XFormatter.convert_field   s     $w,UJ??r   )rK   rL   rM   r   __classcell__)r   s   @r   
XFormatterr|      s    @ @r   r   z{0!r}:{0!x}r"   z
'foo':Nonerl   )r   r   r+   s      r   test_override_convert_fieldz&ModuleTest.test_override_convert_field   s<    	@)) 	@ lM5%@,Or   c                      G d dt         j                        } |       }| j                  |j                  dd      d       y )Nc                       e Zd Zd Zy)4ModuleTest.test_override_parse.<locals>.BarFormatterc              3      K   |j                  d      D ]3  }|d   dk(  r!|dd  j                  d      \  }}}d||d f ,|d d d f 5 y w)N|r   +   :rP   )split	partition)r   r1   field
field_name_rs   s         r   parsez:ModuleTest.test_override_parse.<locals>.BarFormatter.parse   sf     *005 6EQx35:12Y5H5H5M2
A{ *k4??#T4556s   A	AN)rK   rL   rM   r   rH   r   r   BarFormatterr      s    6r   r   z*|+0:^10s|*r"   z*   foo    *rl   )r   r   r+   s      r   test_override_parsezModuleTest.test_override_parse   s8    
	66++ 
	6 nM59>Jr   c           	      @    G d dt         j                        } |       }| j                  |j                  dd      d       | j                  |j                  ddd      d	       | j                  |j                  d
ddd      d       | j	                  t
        |j                  d
dddd       | j	                  t
        |j                  ddd       | j	                  t
        |j                  dddd       | j	                  t
        |j                  dddd       y )Nc                       e Zd Zd Zy)@ModuleTest.test_check_unused_args.<locals>.CheckAllUsedFormatterc                     t        |j                               }|j                  t        dt	        |                   |D ]  }|j                  |        |rt        d      y )Nr   zunused arguments)setkeysupdaterangelenremover:   )r   	used_argsrg   kwargsunused_argsr0   s         r   check_unused_argszRModuleTest.test_check_unused_args.<locals>.CheckAllUsedFormatter.check_unused_args   s^    !&++-0""5CI#67$ ,C&&s+, $%788 r   N)rK   rL   rM   r   rH   r   r   CheckAllUsedFormatterr      s    	9r   r   z{0}
   10z{0}{i}d   i10100z	{0}{i}{1}   1010020r   )r   j{i}r9   )r   r   r+   s      r   test_check_unused_argsz!ModuleTest.test_check_unused_args   s    
	9F$4$4 
	9 $%E2.5HbC8'BKR3?K*cjj+r2PQR*cjj%R@*cjj%R3G*cjj%R3Gr   c                     t        j                         }d}t        d      }| j                  t              5 }|j                  d||t               d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)NrH   r   r   r   	recursion)
r   r&   dictr(   r:   _vformatr   assertInrd   	exception)r   r+   rg   r   errs        r   test_vformat_recursion_limitz'ModuleTest.test_vformat_recursion_limit   sp     z* 	9cLLfceR8	9k3s}}#56	9 	9s   BBN)rK   rL   rM   r   r    r,   r4   r;   rB   rS   r[   rm   ry   r   r   r   r   rH   r   r   r   r      sP    U	P>
<-&
F1+L(MPK H,7r   r   c                       e Zd Zy)BagN)rK   rL   rM   rH   r   r   r   r      s    r   r   c                       e Zd Zd Zy)Mappingc                     | }|j                  d      D ]  }	 t        ||      } |S # t        $ r t        |      w xY w)N.)r   getattrrQ   r2   )r   nameobjparts       r   __getitem__zMapping.__getitem__   sQ    JJsO 	%D%c4(	%
 
 " %tn$%s   (=N)rK   rL   rM   r   rH   r   r   r   r      s    r   r   c                       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d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestTemplatec                    t        d      }| j                  |j                  t        dd            d       | j	                  t
        |j                  t        d             | j	                  t        t         j                         y )Nz,$who likes to eat a bag of $what worth $$100timhamwhowhat(tim likes to eat a bag of ham worth $100r   )r   r   
substituter   r(   r2   r)   )r   ss     r   test_regular_templatesz#TestTemplate.test_regular_templates   sa    CDdu5&ABC	E(ALL$5/B)X%8%89r   c                     t        d      }t        ddd      }| j                  |j                  |      d       | j	                  t
        |j                  t        dd             y )N$who likes ${what} for ${meal}r   r   dinnerr   r   mealtim likes ham for dinnerr   )r   r   r   r   r(   r2   r   r   ds      r   "test_regular_templates_with_bracesz/TestTemplate.test_regular_templates_with_braces   sT    56UX6a*DE(ALL5u5	7r   c                 x    t        d      }t        ddd      }| j                  |j                  |      d       y )Nz$WHO likes ${WHAT} for ${MEAL}r   r   r   )WHOWHATMEALr   r   r   r   r   r   s      r   &test_regular_templates_with_upper_casez3TestTemplate.test_regular_templates_with_upper_case   s4    56UX6a*DEr   c                 x    t        d      }t        ddd      }| j                  |j                  |      d       y )Nz%$_wh0_ likes ${_w_h_a_t_} for ${mea1}r   r   r   )_wh0_	_w_h_a_t_mea1r   r   r   s      r   'test_regular_templates_with_non_lettersz4TestTemplate.test_regular_templates_with_non_letters   s4    <=uH=a*DEr   c                     | j                   }t        d      } ||j                  t        dd            d       t        d      } ||j                  t        dd            d       y )Nz-$who likes to eat a bag of $$what worth $$100r   r   r   z*tim likes to eat a bag of $what worth $100z$who likes $$ztim likes $r   r   r   r   r   eqr   s      r   test_escapeszTestTemplate.test_escapes   sY    DE
1<<U347	9_%
1<<U34mDr   c                     | j                   }t        d      }t        d      } ||j                  |      d        ||j	                  |      d       y )Nz%(foo)s $foo ${foo}bazr"   z%(foo)s baz bazr   r   r   r   safe_substituter   r   r   r   s       r   test_percentszTestTemplate.test_percents   sJ    *+UO
1<<?-.
1Q!23r   c                     | j                   }t        d      }t        d      } ||j                  |      d        ||j	                  |      d       t        d      } ||j                  |      d       y )Nz&tim has eaten $count bags of ham today   )countz!tim has eaten 7 bags of ham todayz(tim has eaten ${count} bags of ham todayr   r   s       r   test_stringificationz!TestTemplate.test_stringification   sh    =>qM
1<<??@
1Q!DE?@
1<<??@r   c                     | j                   }t        d      }t        dd      } ||j                  |      d        ||j	                  |      d       y )Nz$who ate ${meal})r   fred)r   kung pao)r   r   z'('tim', 'fred') ate ('ham', 'kung pao')r   r   s       r   test_tupleargszTestTemplate.test_tupleargs   sN    '(_+>?
1<<?EF
1Q!JKr   c           	         | j                   }t        d      } ||j                  t        d            d        ||j                  t        d            d        ||j                  t        dd	            d
        ||j                  t        dd            d        ||j                  t        ddd            d       y )Nr   r   r   ztim likes ${what} for ${meal}r   r   z$who likes ham for ${meal}r   )r   r   z$who likes ham for dinnerr   ztim likes ham for ${meal}r   r   )r   r   r   r   r   s      r   test_SafeTemplatezTestTemplate.test_SafeTemplate  s    56
1Te_-/NO
1Tu-.0LM
1Tu8<=&	(
1Te%89&	(
1Te%hGH%	'r   c                    | j                   }t        d      } |t        |j                  t	        d             t        d      } |t        |j                  t	        d             t        d      } |t        |j                  t	        d             t        d      } |t        |j                  t	        d             t        d      } |t        |j                  t	        d             y )Nz$who likes $r   r   z$who likes ${what)z$who likes $100u   $who likes $ıu   $who likes $İ)r(   r   r:   r   r   )r   raisesr   s      r   test_invalid_placeholdersz&TestTemplate.test_invalid_placeholders  s    ""^$z1<<%9)*z1<<%9&'z1<<%9 )*z1<<%9)*z1<<%9r   c                 0    G d dt               }t               }t               |_        t               |j                  _        d|j                  j                  _        d|j                  _         |d      }| j                  |j                  |      d       y )Nc                       e Zd ZdZy)9TestTemplate.test_idpattern_override.<locals>.PathPatternz[_a-z][._a-z0-9]*N)rK   rL   rM   	idpatternrH   r   r   PathPatternr   #  s    ,Ir   r  r   r   z,$bag.foo.who likes to eat a bag of $bag.whattim likes to eat a bag of ham)	r   r   r   bagr"   r   r   r   r   )r   r  mr   s       r   test_idpattern_overridez$TestTemplate.test_idpattern_override"  si    	-( 	-IE			
FGa*IJr   c                      G d dt               } |d      }t        dddd      }| j                  t        |j                  |       | j                  |j                  |      d	       y )
Nc                       e Zd ZdZy)3TestTemplate.test_flags_override.<locals>.MyPatternr   N)rK   rL   rM   flagsrH   r   r   	MyPatternr	  .  s    Er   r  z$wHO likes ${WHAT} for ${meal}r   r   r   r   )wHOr   r   wzfredHO likes ${WHAT} for dinner)r   r   r(   r:   r   r   r   )r   r  r   r   s       r   test_flags_overridez TestTemplate.test_flags_override-  s[    	 	67UX@*allA6**1-/PQr   c                      G d dt               }t        dd      } |d      }| j                  |j                  |      d       y )Nc                       e Zd ZdZdZdZy)FTestTemplate.test_idpattern_override_inside_outside.<locals>.MyPattern[a-z]+[A-Z]+r   NrK   rL   rM   r  braceidpatternr
  rH   r   r   r  r  8      !I&NEr   r  r"   BARr"   r  z$foo ${BAR}zfoo BARr   r   r  r  r   s       r   &test_idpattern_override_inside_outsidez3TestTemplate.test_idpattern_override_inside_outside5  s>    	 	 U&m$a)4r   c                      G d dt               }t        dd      } |d      }| j                  t        |j                  |        |d      }| j                  t        |j                  |       y )Nc                       e Zd ZdZdZdZy)WTestTemplate.test_idpattern_override_inside_outside_invalid_unbraced.<locals>.MyPatternr  r  r   Nr  rH   r   r   r  r  C  r  r   r  r"   r  r  z$FOOz${bar})r   r   r(   r:   r   r  s       r   7test_idpattern_override_inside_outside_invalid_unbracedzDTestTemplate.test_idpattern_override_inside_outside_invalid_unbraced@  s\    	 	 U&f*allA6h*allA6r   c                     G d dt               }t               }t               |_        t               |j                  _        d|j                  j                  _        d|j                  _         |d      }| j                  |j                  |      d        G d dt               } |d      }| j                  t        |j                  i        | j                  t        |j                  i        y )	Nc                       e Zd ZdZy)5TestTemplate.test_pattern_override.<locals>.MyPatternz
            (?P<escaped>@{2})                   |
            @(?P<named>[_a-z][._a-z0-9]*)       |
            @{(?P<braced>[_a-z][._a-z0-9]*)}    |
            (?P<invalid>@)
            NrK   rL   rM   patternrH   r   r   r  r!  N  s	    Gr   r  r   r   ,@bag.foo.who likes to eat a bag of @bag.whatr  c                       e Zd ZdZy)6TestTemplate.test_pattern_override.<locals>.BadPatterna  
            (?P<badname>.*)                     |
            (?P<escaped>@{2})                   |
            @(?P<named>[_a-z][._a-z0-9]*)       |
            @{(?P<braced>[_a-z][._a-z0-9]*)}    |
            (?P<invalid>@)                      |
            Nr"  rH   r   r   
BadPatternr&  ]  	    Gr   r'  )r   r   r   r  r"   r   r   r   r   r(   r:   r   )r   r  r  r   r'  s        r   test_pattern_overridez"TestTemplate.test_pattern_overrideM  s    	 	 IE			
DEa*IJ	 	 EF*allB7*a&7&7<r   c                      G d dt               }d} ||      }| j                  t        |j                  i        |j                  ddi      }| j	                  |d       y )Nc                       e Zd ZdZy)5TestTemplate.test_braced_override.<locals>.MyTemplate
            \$(?:
              (?P<escaped>$)                     |
              (?P<named>[_a-z][_a-z0-9]*)        |
              @@(?P<braced>[_a-z][_a-z0-9]*)@@   |
              (?P<invalid>)                      |
           )
           Nr"  rH   r   r   
MyTemplater,  j  	    Gr   r.  PyCon in $@@location@@location	ClevelandPyCon in Cleveland)r   r(   r2   r   r   r   r.  tmpltvals        r   test_braced_overridez!TestTemplate.test_braced_overridei  sY    	 	 (t(ALL"5llJ4523r   c                      G d dt               }d} ||      }| j                  |j                         |       |j                  ddi      }| j                  |d       y )Nc                       e Zd ZdZy):TestTemplate.test_braced_override_safe.<locals>.MyTemplater-  Nr"  rH   r   r   r.  r;  {  r/  r   r.  r0  r1  r2  r3  )r   r   r   r4  s        r   test_braced_override_safez&TestTemplate.test_braced_override_safez  s^    	 	 (t**,d3[ 9:23r   c                      G d dt               } |d      }| j                  t              5 }|j                  i        d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nc                       e Zd ZdZy);TestTemplate.test_invalid_with_no_lines.<locals>.MyTemplatez
              (?P<invalid>) |
              unreachable(
                (?P<named>)   |
                (?P<braced>)  |
                (?P<escaped>)
              )
            Nr"  rH   r   r   r.  r?    s	    Gr   r.  rP   zline 1, col 1)r   r(   r:   r   r   rd   r   )r   r.  r   r   s       r   test_invalid_with_no_linesz'TestTemplate.test_invalid_with_no_lines  sa    	 	 rNz* 	cLL	os3=='9:	 	s   A--A6c                 v    t        d      }t        dd      }| j                  |j                  |      d       y )N$who likes $whatu   tÿmu   fþedr   u   tÿm likes fþedr   r   s      r   test_unicode_valuesz TestTemplate.test_unicode_values  s2    '(XK0a*DEr   c                    | j                   }t        d      } ||j                  dd      d        ||j                  t        d      d      d        ||j                  t        dd	      dd      d       t        d
      } ||j                  t        d      d      d        ||j                  t        d      d      d       t        d      } ||j                  d      d       y NrB  r   r   r   ztim likes hamr   r   r   r   zthe mapping is $mappingnoner   bozo)mappingzthe mapping is bozoonetwozthe mapping is twozthe self is $selfr   zthe self is bozor   r   s      r   test_keyword_argumentsz#TestTemplate.test_keyword_arguments  s    '(
1<<E<.@
1<<e<4oF
1<<j9!  /	 ./
1<<(&<9 	"
1<<U+U<;	! ()
1<<V<$&89r   c                 |   | j                   }| j                  }t        d      } ||j                  dd      d        ||j                  t	        d      d      d        ||j                  t	        dd	      dd      d       t        d
      } ||j                  t	        d      d      d        ||j                  t	        d      d      d       t	        d      } |t
        |j                  |i         |t
        |j                  |i        t        d      } ||j                  d      d       y rE  )r   r(   r   r   r   r)   r   )r   r   r   r   r   s        r   test_keyword_arguments_safez(TestTemplate.test_keyword_arguments_safe  s+   ""'(
1U3_E
1Te_59?K
1Tf:>!  /	 ./
1Tf-v> 	"
1T%0%@	!y!,,2.y!++Q3()
1&)+=>r   c                 0   | j                   }| j                  } G d dt              } |d      } ||j                  dd      d        |t        |j                          ||j                  dd      d        ||j                         d        |d      } |t        |j                  t        dd              ||j                         d        G d	 d
t              } |d      }| j                  |j                  t        dd            d       y )Nc                       e Zd ZdZy)?TestTemplate.test_delimiter_override.<locals>.AmpersandTemplate&NrK   rL   rM   	delimiterrH   r   r   AmpersandTemplaterP        Ir   rT  zthis &gift is for &{who} &&budyou)giftr   zthis bud is for you &zthis &gift is for &{who} &c                       e Zd ZdZy)7TestTemplate.test_delimiter_override.<locals>.PieDelims@NrR  rH   r   r   	PieDelimsrZ    rU  r   r\  z-@who likes to eat a bag of @{what} worth $100r   r   r   r   )r   r(   r   r   r2   r   r:   r   )r   r   r   rT  r   r\  s         r   test_delimiter_overridez$TestTemplate.test_delimiter_override  s    ""	 	;<
1<<U<.0GHx&
1%U35LM
1 <=:;z1<<5e)DE
1 <=	 	EFdu5&ABC	Er   c                 2   | j                   }t        d      }| j                  |j                                t        d      }| j	                  |j                                 G d dt              } |d      }| j                  t        |j                         y )N.$who likes to eat a bag of ${what} worth $$100-$who likes to eat a bag of ${what} worth $100c                       e Zd ZdZy).TestTemplate.test_is_valid.<locals>.BadPattern  
            (?P<badname>.*)                  |
            (?P<escaped>@{2})                   |
            @(?P<named>[_a-z][._a-z0-9]*)       |
            @{(?P<braced>[_a-z][._a-z0-9]*)}    |
            (?P<invalid>@)                      |
            Nr"  rH   r   r   r'  rb    r(  r   r'  r$  )r   r   
assertTrueis_validassertFalser(   r:   )r   r   r   r'  s       r   test_is_validzTestTemplate.test_is_valid  sv    EF

%DE&	 	 EF*ajj1r   c                    | j                   }| j                  }t        d      }|j                         } ||ddg       t        d      }|j                         } ||ddg       t        d      }|j                         } ||ddg        G d dt              } |d      }| j                  t        |j                         y )	Nr_  r   r   z^$who likes to eat a bag of ${what} worth $$100; ${who} likes to eat a bag of $what worth $$100r`  c                       e Zd ZdZy)5TestTemplate.test_get_identifiers.<locals>.BadPatternrc  Nr"  rH   r   r   r'  rj    r(  r   r'  r$  )r   r(   r   get_identifiersr:   )r   r   r   r   idsr'  s         r   test_get_identifiersz!TestTemplate.test_get_identifiers  s    ""EF!
3  uv!
3  DE!
3 	 	 EF*a&7&78r   N)rK   rL   rM   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r)  r8  r<  r@  rC  rK  rM  r]  rg  rm  rH   r   r   r   r      s    :7F
F
E4AL
':	KR	57=84"4";(F
:"?*E(2*9r   r   __main__)
unittestr   r   TestCaser   r   r   r   rK   mainrH   r   r   <module>rr     sf      v7"" v7v	 	 @98$$ @9F
 zHMMO r   