o
    HXh0O                     @   st   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r8e 	  dS 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   :/opt/python-3.10.19/usr/lib/python3.10/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    d S 1 sVw   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 spw   Y  | t |ddd W d    d S 1 sw   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   sl   t  }G dd d}| }| |d|d | t |dd W d    d S 1 s/w   Y  d S )Nc                   @      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__r9   r   r   r   r   AnyAttrW       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 s(w   Y  | t |di  W d    d S 1 sDw   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 r7   )r	   r   __init__	namespace)r   rH   r   r   r   rG   j   s   
zGModuleTest.test_override_get_value.<locals>.NamespaceFormatter.__init__c                 S   sF   t |trz|| W S  ty   | j|  Y S w tj||| d S r7   )
isinstancestrr*   rH   r	   r   	get_value)r   keyargskwdsr   r   r   rK   n   s   

zHModuleTest.test_override_get_value.<locals>.NamespaceFormatter.get_valueN)r:   r;   r<   rG   rK   r   r   r   r   NamespaceFormatteri   s    rO   ZgreetingZhelloz{greeting}, world!zhello, world!r	   r   r   r    )r   rO   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                   @   r6   )z<ModuleTest.test_override_format_field.<locals>.CallFormatterc                 S   s   t | |S r7   )r    )r   valueformat_specr   r   r   format_field~   s   zIModuleTest.test_override_format_field.<locals>.CallFormatter.format_fieldN)r:   r;   r<   rT   r   r   r   r   CallFormatter}   r>   rU   z*{0}*c                   S   s   dS )Nresultr   r   r   r   r   <lambda>   s    z7ModuleTest.test_override_format_field.<locals>.<lambda>z*result*rP   )r   rU   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 )NrA   )superconvert_field)r   rR   
conversion	__class__r   r   rZ      s   zHModuleTest.test_override_convert_field.<locals>.XFormatter.convert_field)r:   r;   r<   rZ   __classcell__r   r   r\   r   
XFormatter   s    r_   z{0!r}:{0!x}r   z
'foo':NonerP   )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                   @   r6   )z4ModuleTest.test_override_parse.<locals>.BarFormatterc                 s   sX    | dD ]#}|d dkr"|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_rS   r   r   r   parse   s   z:ModuleTest.test_override_parse.<locals>.BarFormatter.parseN)r:   r;   r<   ri   r   r   r   r   BarFormatter   s    rj   z*|+0:^10s|*r   z*   foo    *rP   )r   rj   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                   @   r6   )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_argsrM   kwargsZunused_argsr(   r   r   r   check_unused_args   s   zRModuleTest.test_check_unused_args.<locals>.CheckAllUsedFormatter.check_unused_argsN)r:   r;   r<   rt   r   r   r   r   CheckAllUsedFormatter   r>   ru   z{0}
   Z10z{0}{i}d   iZ10100z	{0}{i}{1}   Z1010020r   )ry   j{i}r.   )r   ru   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 s%w   Y  | dt|j	 d S )Nr   rw   rx   r|   	recursion)
r	   r   dictr!   r/   _vformatrl   assertInrJ   	exception)r   r$   rM   rs   errr   r   r   test_vformat_recursion_limit   s   
z'ModuleTest.test_vformat_recursion_limitN)r:   r;   r<   r   r   r%   r+   r0   r5   rB   rF   rQ   rX   r`   rk   r}   r   r   r   r   r   r      s    
		r   c                   @   s   e Zd ZdS )BagN)r:   r;   r<   r   r   r   r   r      s    r   c                   @   r6   )Mappingc              	   C   s<   | }| dD ]}zt||}W q ty   t|w |S )N.)re   getattrr@   r*   )r   nameobjpartr   r   r   __getitem__   s   zMapping.__getitem__N)r:   r;   r<   r   r   r   r   r   r      r>   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   ,   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      z3TestTemplate.test_regular_templates_with_upper_casec                 C   r   )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   r   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                   @      e Zd ZdZdS )z9TestTemplate.test_idpattern_override.<locals>.PathPatternz[_a-z][._a-z0-9]*N)r:   r;   r<   	idpatternr   r   r   r   PathPattern#      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                   @   r   )z3TestTemplate.test_flags_override.<locals>.MyPatternr   N)r:   r;   r<   flagsr   r   r   r   	MyPattern.  r   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                   @      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r:   r;   r<   r   braceidpatternr   r   r   r   r   r   8      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                   @   r   )zWTestTemplate.test_idpattern_override_inside_outside_invalid_unbraced.<locals>.MyPatternr   r   r   Nr   r   r   r   r   r   C  r   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                   @   r   )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r:   r;   r<   patternr   r   r   r   r   N  r   r   r   r   z,@bag.foo.who likes to eat a bag of @bag.whatr   c                   @   r   )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]  r   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                   @   r   )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  r   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     
z!TestTemplate.test_braced_overridec                 C   sJ   G dd dt }d}||}| | | |ddi}| |d d S )Nc                   @   r   )z:TestTemplate.test_braced_override_safe.<locals>.MyTemplater   Nr   r   r   r   r   r   {  r   r   r   r   r   r   )r   r   r   r   r   r   r   test_braced_override_safez  r   z&TestTemplate.test_braced_override_safec                 C   sb   G dd dt }|d}| t}|i  W d    n1 s!w   Y  | dt|j d S )Nc                   @   r   )z;TestTemplate.test_invalid_with_no_lines.<locals>.MyTemplatez
              (?P<invalid>) |
              unreachable(
                (?P<named>)   |
                (?P<braced>)  |
                (?P<escaped>)
              )
            Nr   r   r   r   r   r     r   r   r?   zline 1, col 1)r   r!   r/   r   r   rJ   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                   @   r   )z?TestTemplate.test_delimiter_override.<locals>.AmpersandTemplate&Nr:   r;   r<   	delimiterr   r   r   r   AmpersandTemplate  r   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                   @   r   )z7TestTemplate.test_delimiter_override.<locals>.PieDelims@Nr   r   r   r   r   	PieDelims  r   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)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   r      s.    	r   __main__)
Zunittestr	   r   ZTestCaser   r   r   r   r:   mainr   r   r   r   <module>   s     <  