a
    ze0O                     @   sp   d dl Z d dlZd dlmZ G dd de jZG dd dZG dd dZG d	d
 d
e jZedkrle 	  dS )    N)Templatec                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )
ModuleTestc                 C   s   |  tjd |  tjd |  tjd |  tjtjtj  |  tjd |  tjtjd  |  tjd |  tj	d |  tj
tjtj tj tj	 tj  d S )Nz 	
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789ZabcdefABCDEF01234567z !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)assertEqualstring
whitespaceascii_lowercaseascii_uppercaseascii_lettersdigits	hexdigits	octdigitspunctuation	printableself r   &/usr/lib/python3.9/test/test_string.py
test_attrs   s    zModuleTest.test_attrsc                 C   s   |  tdd |  tdd |  tdd |  tdd |  tddd |  td	d
 |  tdd |  tdd |  tddd d S )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   r   r   r   test_capwords   s    zModuleTest.test_capwordsc                 C   sf   t  }| |dd | |ddd | |dddd | t|j | tt jj d S )Nfoozfoo{0}barZfoobarzfoo{1}{0}-{1}   z	foo6bar-6)r	   	Formatterr   formatassertRaises	TypeErrorr   fmtr   r   r   test_basic_formatter"   s    zModuleTest.test_basic_formatterc                 C   s   t  }| |jdddd | t|jd | |jdddd | t|jd | |jdddd | t|jd | td	 |jddd
 W d    n1 s0    Y  d S )Nz-{arg}-testargz-test-z-{self}-r   z-{format_string}-)format_stringr)   )r)   r(   )r	   r   r   r    r!   KeyErrorZassertRaisesRegexr"   r#   r   r   r   test_format_keyword_arguments*   s    z(ModuleTest.test_format_keyword_argumentsc                 C   s(  t  }| |dddddd | |jdd ddddjd ddd | |dddddd | |dddddddd | |jd	d
dddd	jd
ddd | t |ddd W d    n1 s0    Y  | t |ddd W d    n1 s0    Y  d S )Nzfoo{}{}r   r   zfoo{1}{num}{1})numz{:^{}}z	{:^{}} {}Xz{:^{pad}}{}r   )Zpadzfoo{1}{}zfoo{}{1}r	   r   r   r    r!   
ValueErrorr#   r   r   r   test_auto_numbering6   s(    

,zModuleTest.test_auto_numberingc                 C   s   t  }| |jdddd | |ddd | t|jdd | |ddd	 | |dt jd
 | |dtdd | |dtdd d S )Nz	-{arg!r}-r&   r'   z-'test'-z{0!s}z{0!h}z{0!a}*   Z42z6'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'   z'\xff'   z'\u0100')r	   r   r   r    r!   r/   r   chrr#   r   r   r   test_conversion_specifiersI   s    z%ModuleTest.test_conversion_specifiersc                 C   sj   t  }G dd d}| }| |d|d | t |dd W d    n1 s\0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )z,ModuleTest.test_name_lookup.<locals>.AnyAttrc                 S   s   |S Nr   )r   attrr   r   r   __getattr__X   s    z8ModuleTest.test_name_lookup.<locals>.AnyAttr.__getattr__N)__name__
__module____qualname__r8   r   r   r   r   AnyAttrW   s   r<   z{0.lumber}{0.jack}Z
lumberjack )r	   r   r   r    r!   AttributeError)r   r$   r<   xr   r   r   test_name_lookupU   s    zModuleTest.test_name_lookupc                 C   s   t  }g d}| |d|d | t |dg  W d    n1 sP0    Y  | t |di  W d    n1 s0    Y  d S )N)ZeggsandZspamz{0[2]}{0[0]}Zspameggs)r	   r   r   r    r!   
IndexErrorr*   )r   r$   lookupr   r   r   test_index_lookup_   s    *zModuleTest.test_index_lookupc                 C   s4   G dd dt j}|ddi}| |dd d S )Nc                   @   s    e Zd Zi fddZdd ZdS )z>ModuleTest.test_override_get_value.<locals>.NamespaceFormatterc                 S   s   t j|  || _d S r6   )r	   r   __init__	namespace)r   rF   r   r   r   rE   j   s    zGModuleTest.test_override_get_value.<locals>.NamespaceFormatter.__init__c                 S   sH   t |tr4z
|| W S  ty0   | j|  Y S 0 ntj||| d S r6   )
isinstancestrr*   rF   r	   r   	get_value)r   keyargskwdsr   r   r   rI   n   s    

zHModuleTest.test_override_get_value.<locals>.NamespaceFormatter.get_valueN)r9   r:   r;   rE   rI   r   r   r   r   NamespaceFormatteri   s   rM   ZgreetingZhelloz{greeting}, world!zhello, world!r	   r   r   r    )r   rM   r$   r   r   r   test_override_get_valueh   s    z"ModuleTest.test_override_get_valuec                 C   s4   G dd dt j}| }| |ddd d d S )Nc                   @   s   e Zd Zdd ZdS )z<ModuleTest.test_override_format_field.<locals>.CallFormatterc                 S   s   t | |S r6   )r    )r   valueformat_specr   r   r   format_field~   s    zIModuleTest.test_override_format_field.<locals>.CallFormatter.format_fieldN)r9   r:   r;   rR   r   r   r   r   CallFormatter}   s   rS   z*{0}*c                   S   s   dS )Nresultr   r   r   r   r   <lambda>       z7ModuleTest.test_override_format_field.<locals>.<lambda>z*result*rN   )r   rS   r$   r   r   r   test_override_format_field|   s    z%ModuleTest.test_override_format_fieldc                 C   s2   G dd dt j}| }| |dddd d S )Nc                       s   e Zd Z fddZ  ZS )z:ModuleTest.test_override_convert_field.<locals>.XFormatterc                    s   |dkrd S t  ||S )Nr?   )superconvert_field)r   rP   
conversion	__class__r   r   rY      s    zHModuleTest.test_override_convert_field.<locals>.XFormatter.convert_field)r9   r:   r;   rY   __classcell__r   r   r[   r   
XFormatter   s   r^   z{0!r}:{0!x}r   z
'foo':NonerN   )r   r^   r$   r   r   r   test_override_convert_field   s    z&ModuleTest.test_override_convert_fieldc                 C   s0   G dd dt j}| }| |ddd d S )Nc                   @   s   e Zd Zdd ZdS )z4ModuleTest.test_override_parse.<locals>.BarFormatterc                 s   sV   | dD ]F}|d dkrB|dd  d\}}}d||d fV  q
|d d d fV  q
d S )N|r   +   :r=   )split	partition)r   r)   Zfield
field_name_rQ   r   r   r   parse   s
    z:ModuleTest.test_override_parse.<locals>.BarFormatter.parseN)r9   r:   r;   rh   r   r   r   r   BarFormatter   s   ri   z*|+0:^10s|*r   z*   foo    *rN   )r   ri   r$   r   r   r   test_override_parse   s    zModuleTest.test_override_parsec              	   C   s   G dd dt j}| }| |ddd | |jddddd	 | |jd
ddddd | jt|jd
ddddd | t|jddd | jt|jddddd | jt|jddddd d S )Nc                   @   s   e Zd Zdd ZdS )z@ModuleTest.test_check_unused_args.<locals>.CheckAllUsedFormatterc                 S   sD   t | }|tdt| |D ]}|| q$|r@tdd S )Nr   zunused arguments)setkeysupdaterangelenremover/   )r   	used_argsrK   kwargsZunused_argsr(   r   r   r   check_unused_args   s    zRModuleTest.test_check_unused_args.<locals>.CheckAllUsedFormatter.check_unused_argsN)r9   r:   r;   rs   r   r   r   r   CheckAllUsedFormatter   s   rt   z{0}
   Z10z{0}{i}d   iZ10100z	{0}{i}{1}   Z1010020r   )rx   j{i}r.   )r   rt   r$   r   r   r   test_check_unused_args   s    z!ModuleTest.test_check_unused_argsc                 C   sj   t  }d}tdd}| t$}|d||t d W d    n1 sJ0    Y  | dt|j	 d S )Nr   rv   rw   r{   	recursion)
r	   r   dictr!   r/   _vformatrk   assertInrH   	exception)r   r$   rK   rr   errr   r   r   test_vformat_recursion_limit   s    
2z'ModuleTest.test_vformat_recursion_limitN)r9   r:   r;   r   r   r%   r+   r0   r5   r@   rD   rO   rW   r_   rj   r|   r   r   r   r   r   r      s   
		r   c                   @   s   e Zd ZdS )BagN)r9   r:   r;   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )Mappingc              	   C   sB   | }| dD ].}zt||}W q ty:   t|Y q0 q|S )N.)rd   getattrr>   r*   )r   nameobjpartr   r   r   __getitem__   s    zMapping.__getitem__N)r9   r:   r;   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-S ).TestTemplatec                 C   sJ   t d}| |tdddd | t|jtdd | tt j d S )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!   r*   r"   )r   sr   r   r   test_regular_templates   s    z#TestTemplate.test_regular_templatesc                 C   sD   t d}tdddd}| ||d | t|jtddd d S )N$who likes ${what} for ${meal}r   r   dinnerr   r   mealtim likes ham for dinnerr   )r   r   r   r   r!   r*   r   r   dr   r   r   "test_regular_templates_with_braces   s    

z/TestTemplate.test_regular_templates_with_bracesc                 C   s,   t d}tdddd}| ||d d S )Nz$WHO likes ${WHAT} for ${MEAL}r   r   r   )ZWHOWHATZMEALr   r   r   r   r   r   r   r   r   &test_regular_templates_with_upper_case   s    z3TestTemplate.test_regular_templates_with_upper_casec                 C   s,   t d}tdddd}| ||d d S )Nz%$_wh0_ likes ${_w_h_a_t_} for ${mea1}r   r   r   )Z_wh0_Z	_w_h_a_t_Zmea1r   r   r   r   r   r   'test_regular_templates_with_non_letters   s    z4TestTemplate.test_regular_templates_with_non_lettersc                 C   sJ   | j }td}||tdddd td}||tdddd d S )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   r   r   r   test_escapes   s    zTestTemplate.test_escapesc                 C   s<   | j }td}tdd}|||d |||d d S )Nz%(foo)s $foo ${foo}Zbazr   z%(foo)s baz bazr   r   r   r   safe_substituter   r   r   r   r   r   r   test_percents   s
    
zTestTemplate.test_percentsc                 C   sT   | j }td}tdd}|||d |||d td}|||d d S )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   r   r   r   test_stringification   s    
z!TestTemplate.test_stringificationc                 C   s>   | j }td}tddd}|||d |||d d S )Nz$who ate ${meal})r   fred)r   kung pao)r   r   z'('tim', 'fred') ate ('ham', 'kung pao')r   r   r   r   r   test_tupleargs   s
    zTestTemplate.test_tupleargsc                 C   s   | j }td}||tddd ||tddd ||tddd	d
 ||tdddd ||tddddd d S )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   r   r   r   test_SafeTemplate  s    zTestTemplate.test_SafeTemplatec                 C   s   | j }td}|t|jtdd td}|t|jtdd td}|t|jtdd td}|t|jtdd td}|t|jtdd d S )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   r   r   r   test_invalid_placeholders  s    z&TestTemplate.test_invalid_placeholdersc                 C   sX   G dd dt }t }t |_t |j_d|jj_d|j_|d}| ||d d S )Nc                   @   s   e Zd ZdZdS )z9TestTemplate.test_idpattern_override.<locals>.PathPatternz[_a-z][._a-z0-9]*N)r9   r:   r;   	idpatternr   r   r   r   PathPattern#  s   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   r   r   r   test_idpattern_override"  s    

z$TestTemplate.test_idpattern_overridec                 C   sN   G dd dt }|d}tddddd}| t|j| | ||d	 d S )
Nc                   @   s   e Zd ZdZdS )z3TestTemplate.test_flags_override.<locals>.MyPatternr   N)r9   r:   r;   flagsr   r   r   r   	MyPattern.  s   r   z$wHO likes ${WHAT} for ${meal}r   r   r   r   )ZwHOr   r   wzfredHO likes ${WHAT} for dinner)r   r   r!   r/   r   r   r   )r   r   r   r   r   r   r   test_flags_override-  s
    z TestTemplate.test_flags_overridec                 C   s:   G dd dt }tddd}|d}| ||d d S )Nc                   @   s   e Zd ZdZdZdZdS )zFTestTemplate.test_idpattern_override_inside_outside.<locals>.MyPattern[a-z]+[A-Z]+r   Nr9   r:   r;   r   braceidpatternr   r   r   r   r   r   8  s   r   r   BARr   r   z$foo ${BAR}zfoo BARr   r   r   r   r   r   r   r   &test_idpattern_override_inside_outside5  s    z3TestTemplate.test_idpattern_override_inside_outsidec                 C   sP   G dd dt }tddd}|d}| t|j| |d}| t|j| d S )Nc                   @   s   e Zd ZdZdZdZdS )zWTestTemplate.test_idpattern_override_inside_outside_invalid_unbraced.<locals>.MyPatternr   r   r   Nr   r   r   r   r   r   C  s   r   r   r   r   z$FOOz${bar})r   r   r!   r/   r   r   r   r   r   7test_idpattern_override_inside_outside_invalid_unbraced@  s    zDTestTemplate.test_idpattern_override_inside_outside_invalid_unbracedc                 C   s   G dd dt }t }t |_t |j_d|jj_d|j_|d}| ||d G dd dt }|d}| 	t
|ji  | 	t
|ji  d S )	Nc                   @   s   e Zd ZdZdS )z5TestTemplate.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r9   r:   r;   patternr   r   r   r   r   N  s   r   r   r   z,@bag.foo.who likes to eat a bag of @bag.whatr   c                   @   s   e Zd ZdZdS )z6TestTemplate.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   r   r   r   r   
BadPattern]  s   r   )r   r   r   r   r   r   r   r   r   r!   r/   r   )r   r   r   r   r   r   r   r   test_pattern_overrideM  s    

z"TestTemplate.test_pattern_overridec                 C   sJ   G dd dt }d}||}| t|ji  |ddi}| |d d S )Nc                   @   s   e Zd ZdZdS )z5TestTemplate.test_braced_override.<locals>.MyTemplate
            \$(?:
              (?P<escaped>$)                     |
              (?P<named>[_a-z][_a-z0-9]*)        |
              @@(?P<braced>[_a-z][_a-z0-9]*)@@   |
              (?P<invalid>)                      |
           )
           Nr   r   r   r   r   
MyTemplatej  s   r   PyCon in $@@location@@location	ClevelandPyCon in Cleveland)r   r!   r*   r   r   r   r   Ztmpltvalr   r   r   test_braced_overridei  s    
z!TestTemplate.test_braced_overridec                 C   sJ   G dd dt }d}||}| | | |ddi}| |d d S )Nc                   @   s   e Zd ZdZdS )z:TestTemplate.test_braced_override_safe.<locals>.MyTemplater   Nr   r   r   r   r   r   {  s   r   r   r   r   r   )r   r   r   r   r   r   r   test_braced_override_safez  s    
z&TestTemplate.test_braced_override_safec                 C   sb   G dd dt }|d}| t}|i  W d    n1 sB0    Y  | dt|j d S )Nc                   @   s   e Zd ZdZdS )z;TestTemplate.test_invalid_with_no_lines.<locals>.MyTemplatez
              (?P<invalid>) |
              unreachable(
                (?P<named>)   |
                (?P<braced>)  |
                (?P<escaped>)
              )
            Nr   r   r   r   r   r     s   r   r=   zline 1, col 1)r   r!   r/   r   r   rH   r   )r   r   r   r   r   r   r   test_invalid_with_no_lines  s
    	(z'TestTemplate.test_invalid_with_no_linesc                 C   s*   t d}tddd}| ||d d S )N$who likes $whatu   tÿmu   fþedr   u   tÿm likes fþedr   r   r   r   r   test_unicode_values  s    z TestTemplate.test_unicode_valuesc                 C   s   | j }td}||jdddd ||jtddddd ||jtdd	ddddd td
}||jtddddd ||jtddddd td}||jddd d S Nr   r   r   r   ztim likes hamr   r   r   r   zthe mapping is $mappingZnoner   Zbozo)mappingzthe mapping is bozoZoneZtwozthe mapping is twozthe self is $selfr   zthe self is bozor   r   r   r   r   test_keyword_arguments  s$    z#TestTemplate.test_keyword_argumentsc                 C   s   | j }| j}td}||jdddd ||jtddddd ||jtdd	ddddd td
}||jtddddd ||jtddddd tdd}|t|j|i  |t|j|i  td}||jddd d S r   )r   r!   r   r   r   r"   r   )r   r   r   r   r   r   r   r   test_keyword_arguments_safe  s,    
z(TestTemplate.test_keyword_arguments_safec                 C   s   | j }| j}G dd dt}|d}||jdddd |t|j ||jdddd || d |d}|t|jtddd || d G d	d
 d
t}|d}|  |tdddd d S )Nc                   @   s   e Zd ZdZdS )z?TestTemplate.test_delimiter_override.<locals>.AmpersandTemplate&Nr9   r:   r;   	delimiterr   r   r   r   AmpersandTemplate  s   r   zthis &gift is for &{who} &&ZbudZyou)Zgiftr   zthis bud is for you &zthis &gift is for &{who} &c                   @   s   e Zd ZdZdS )z7TestTemplate.test_delimiter_override.<locals>.PieDelims@Nr   r   r   r   r   	PieDelims  s   r   z-@who likes to eat a bag of @{what} worth $100r   r   r   r   )r   r!   r   r   r*   r   r/   r   )r   r   r   r   r   r   r   r   r   test_delimiter_override  s     z$TestTemplate.test_delimiter_overrideN)r9   r:   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s,   	r   __main__)
Zunittestr	   r   ZTestCaser   r   r   r   r9   mainr   r   r   r   <module>   s    <  