o
    GXîh›U ã                   @   s„  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ G dd„ de jƒZG dd„ dƒZG dd	„ d	eƒZG d
d„ deejƒZG dd„ deejƒZG dd„ deejƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deejƒZG dd„ deejƒZG dd„ deƒZG dd„ deejƒZG dd„ deejƒZG d d!„ d!eƒZG d"d#„ d#eejƒZG d$d%„ d%ejƒZG d&d'„ d'eƒZG d(d)„ d)eejƒZ G d*d+„ d+eejƒZ!G d,d-„ d-ƒZ"d.d/„ Z#G d0d1„ d1ejƒZ$G d2d3„ d3ejƒZ%G d4d5„ d5ejƒZ&G d6d7„ d7ejƒZ'G d8d9„ d9ejƒZ(G d:d;„ d;eejƒZ)G d<d=„ d=ejƒZ*G d>d?„ d?ejƒZ+e,d@kr@e -¡  dS dS )Aé    N)Úsupport)Ú	os_helperc                   @   s@   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZeZ	dS )Ú
SortedDictc                 C   ó   t | j ¡ ƒS ©N)ÚsortedÚdataÚitems©Úself© r   ú@/opt/python-3.10.19/usr/lib/python3.10/test/test_configparser.pyr	      ó   zSortedDict.itemsc                 C   r   r   )r   r   Úkeysr
   r   r   r   r      r   zSortedDict.keysc                 C   ó   dd„ |   ¡ D ƒS )Nc                 S   s   g | ]}|d  ‘qS )é   r   )Ú.0Úir   r   r   Ú
<listcomp>   s    z%SortedDict.values.<locals>.<listcomp>)r	   r
   r   r   r   Úvalues   ó   zSortedDict.valuesc                 C   ó   t |  ¡ ƒS r   )Úiterr	   r
   r   r   r   Ú	iteritems   ó   zSortedDict.iteritemsc                 C   r   r   )r   r   r
   r   r   r   Úiterkeys   r   zSortedDict.iterkeysc                 C   r   r   )r   r   r
   r   r   r   Ú
itervalues   r   zSortedDict.itervaluesN)
Ú__name__Ú
__module__Ú__qualname__r	   r   r   r   r   r   Ú__iter__r   r   r   r   r      s    r   c                   @   sJ   e Zd ZdZdZdZdZdZej	Z
dZejZejZd
dd„Zd
dd	„ZdS )ÚCfgParserTestCaseClassF)ú=ú:)ú;ú#TNc                 C   sB   t || j| j| j| j| j| j| j| j| j	d
}| j
di |¤Ž}|S )N)
ÚdefaultsÚallow_no_valueÚ
delimitersÚcomment_prefixesÚinline_comment_prefixesÚempty_lines_in_valuesÚ	dict_typeÚstrictÚdefault_sectionÚinterpolationr   )Údictr'   r(   r)   r*   r+   r,   r-   r.   r/   Úconfig_class)r   r&   Z	argumentsÚinstancer   r   r   Ú	newconfig0   s   öz CfgParserTestCaseClass.newconfigc                 C   s   |   |¡}| |¡ |S r   )r3   Úread_string)r   Ústringr&   Úcfr   r   r   Ú
fromstring@   ó   

z!CfgParserTestCaseClass.fromstringr   )r   r   r   r'   r(   r)   r*   r+   ÚconfigparserÚ_default_dictr,   r-   ZDEFAULTSECTr.   Ú_UNSETr/   r3   r7   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 ).ÚBasicTestCasec           	      C   s  g d¢}| j r| d¡ | ¡  ddg}| ¡ }| ¡  | j}|||ƒ | d¡}| ¡  |||ƒ dd„ |D ƒ}| ¡  | | j¡ | ¡  |||ƒ |d  ¡ }tt|ƒƒ}|||ƒ | ¡ }tt|ƒƒ}|  t	|ƒt	|ƒ¡ |D ]
\}}|||j
ƒ qs|| ¡ || j ƒ || dd	¡d
ƒ || dd	¡dƒ || dd	¡dƒ || dd¡dƒ || dd	¡dƒ || dd¡dƒ || dd¡dƒ || dd¡dƒ || dd¡dƒ || dd¡dƒ |  | dd¡d¡ || dd¡dƒ || dd¡dƒ || dd ¡d!ƒ || d"d#¡d$ƒ | j r|| dd%¡d ƒ ||jdd	dd&d
ƒ ||jdd	d	did'dƒ |  tj¡ | d(d	¡ W d   ƒ n	1 sMw   Y  |  tj¡ | dd)¡ W d   ƒ n	1 sjw   Y  ||jd(d	dd&dƒ ||jdd)dd&dƒ ||jdd	d d&dƒ ||jd*d	d d&d ƒ ||jddd+d&dƒ ||jdd,d+d&d+ƒ ||jdd,d-d&d-ƒ |  tj¡ | dd,¡ W d   ƒ n	1 sÔw   Y  |  |jddd.d&d¡ |  |jdd/d.d&d.¡ ||jdd/d0d&d0ƒ |  tj¡ | dd/¡ W d   ƒ n	1 sw   Y  ||jddd1d&dƒ ||jdd2d3d&d3ƒ ||jdd2d1d&d1ƒ |  tj¡ | dd2¡ W d   ƒ n	1 sRw   Y  ||jd4dd1d&d1ƒ | j r|||jdd%dd&d ƒ ||jdd5dd&dƒ ||d d	 d
ƒ ||d d	 dƒ |d }||j
dƒ |  |j|¡ |  t¡ d6|_
W d   ƒ n	1 s³w   Y  |  t¡ d7|_W d   ƒ n	1 sÌw   Y  ||d	 dƒ ||d dƒ ||d d	 dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d8 d	 d9ƒ | j r||d d% d ƒ ||d  d	d¡d
ƒ ||d jd	dd&d
ƒ ||d jd	d	did'dƒ |  t¡ |d( d	  W d   ƒ n	1 sUw   Y  |  t¡ |d d)  W d   ƒ n	1 sqw   Y  |  t¡ |d( jd	dd& W d   ƒ n	1 sw   Y  ||d  d)d¡dƒ ||d jd)dd&dƒ ||d  d)¡d ƒ ||d  d	d ¡dƒ ||d jd	d d&dƒ |  t¡ |d*  d	d ¡ W d   ƒ n	1 sæw   Y  ||d  dd+¡dƒ ||d jdd+d&dƒ ||d  d,d+¡d+ƒ ||d jd,d+d&d+ƒ ||d  d,d-¡d-ƒ ||d jd,d-d&d-ƒ ||d  d,¡d ƒ |  |d  dd.¡d¡ |  |d jdd.d&d¡ |  |d  d/d.¡d.¡ |  |d jd/d.d&d.¡ ||d  d/d0¡d0ƒ ||d jd/d0d&d0ƒ ||d  d/¡d ƒ ||d  dd1¡dƒ ||d jdd1d&dƒ ||d  d2d3¡d3ƒ ||d jd2d3d&d3ƒ ||d  d2d1¡d1ƒ ||d jd2d1d&d1ƒ ||d  d2¡d ƒ | j r||d  d%d¡d ƒ ||d jd%dd&d ƒ ||d  d5d¡dƒ ||d jd5dd&dƒ d:|| j d;< d<|| j d=< |  | d¡¡ |  | dd¡¡ |  | d¡¡ |  | | j¡¡ |  | dd	¡d>¡ |  | dd	¡d?¡ |  | dd	¡d@¡ |  | dd;¡¡ |  | dd;¡¡ |  | | jd;¡¡ |  | dd;¡¡ |  | | jd;¡¡ |  tj¡}| dAd	¡ W d   ƒ n	1 s£w   Y  |  |jjdB¡ || d8d	¡d9ƒ |d= |  d|v ¡ |  t¡ |d= W d   ƒ n	1 s×w   Y  |  t ¡ || j= W d   ƒ n	1 sñw   Y  |d d	= |  d	|d v ¡ |  t¡ |d d	= W d   ƒ n	1 sw   Y  |  d=|d v ¡ |  t¡ |d d== W d   ƒ n	1 s>w   Y  || j d== |  d=|d v ¡ |  t¡ || j d== W d   ƒ n	1 siw   Y  |  t¡ |dA d	= W d   ƒ d S 1 s…w   Y  d S )CN)
úCommented BarúFoo BarúInternationalized Stuffú	Long LineúSection\with$weird%characters[	ÚSpacesú
Spacey BarúSpacey Bar From The BeginningÚTypesúThis One Has A ] In ItÚNoValue)ÚbazÚqwe)ÚfooÚbar3rD   c                 S   ó   g | ]}|‘qS r   r   ©r   Úsectionr   r   r   r   d   ó    z,BasicTestCase.basic_test.<locals>.<listcomp>r>   rJ   Úbar1rC   Úbar2rK   rH   rI   r=   Úbar4rB   úkey with spacesÚvalueúanother with spacesúsplat!rE   Úinté*   Z42Úfloatç)\Âõ(Ü?z0.44ÚbooleanFZ123ústrange but acceptablerF   ÚforksÚspoonsúoption-without-value©Úfallback©ÚvarszNo Such Foo Barzno-such-foozNo Such Spacey Baré   zno-such-intZ18g        zno-such-floatz0.0Tzno-such-booleanÚyeszNo Such Typeszno-such-option-without-valuezName is read-onlyzParser is read-onlyr@   ú7this line is much, much longer than my editor
likes it.Ú1Z
this_valueÚ2Z
that_valuez4remove_option() failed to report existence of optionz'remove_option() failed to remove optionzIremove_option() failed to report non-existence of option that was removedúNo Such Section)ri   )!r'   ÚappendÚsortÚsectionsÚassertEqualr	   r.   r   ÚlistÚlenÚnamer&   ÚgetÚgetintÚassertAlmostEqualÚgetfloatÚ
getbooleanÚassertRaisesr9   ÚNoSectionErrorÚNoOptionErrorÚassertIsÚparserÚAttributeErrorÚKeyErrorÚ
assertTrueZremove_sectionÚassertFalseÚ
has_optionÚremove_optionÚ	exceptionÚargsÚ
ValueError)	r   r6   ÚEÚFÚLÚeqrp   rN   Úcmr   r   r   Ú
basic_testH   sÂ  





ÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿ
ÿÿÿ$ÿzBasicTestCase.basic_testc                 C   sú   d  | j| j¡}| jr|d7 }|  |¡}|  |¡ | jrc|  tj	¡ | 
t d  | j¡¡¡ W d   ƒ n1 s9w   Y  |  tj¡ | 
t d  | j¡¡¡ W d   ƒ d S 1 s\w   Y  d S | 
t d  | j¡¡¡ | 
t d  | j¡¡¡ d S )Nax  [Foo Bar]
foo{0[0]}bar1
[Spacey Bar]
foo {0[0]} bar2
[Spacey Bar From The Beginning]
  foo {0[0]} bar3
  baz {0[0]} qwe
[Commented Bar]
foo{0[1]} bar4 {1[1]} comment
baz{0[0]}qwe {1[0]}another one
[Long Line]
foo{0[1]} this line is much, much longer than my editor
   likes it.
[Section\with$weird%characters[	]
[Internationalized Stuff]
foo[bg]{0[1]} Bulgarian
foo{0[0]}Default
foo[en]{0[0]}English
foo[de]{0[0]}Deutsch
[Spaces]
key with spaces {0[1]} value
another with spaces {0[0]} splat!
[Types]
int {0[1]} 42
float {0[0]} 0.44
boolean {0[0]} NO
123 {0[1]} strange but acceptable
[This One Has A ] In It]
  forks {0[0]} spoons
z[NoValue]
option-without-value
z¡                    [Duplicate Options Here]
                    option {0[0]} with a value
                    option {0[1]} with another value
                zÄ                    [And Now For Something]
                    completely different {0[0]} True
                    [And Now For Something]
                    the larch {0[1]} 1
                z‘                [Duplicate Options Here]
                option {0[0]} with a value
                option {0[1]} with another value
            z°                [And Now For Something]
                completely different {0[0]} True
                [And Now For Something]
                the larch {0[1]} 1
            )Úformatr(   r)   r'   r7   r‰   r-   rv   r9   ÚDuplicateOptionErrorr4   ÚtextwrapÚdedentÚDuplicateSectionError©r   Úconfig_stringr6   r   r   r   Ú
test_basic(  s4   âÿ


üÿ
û"ÿ
ü

ûzBasicTestCase.test_basicc                 C   sD  ddiddidddœdddœddii d	d
dddœdddœdddddœddidœ
}| j r4| ddd ii¡ |  ¡ }| |¡ |  |¡ | jrŠ|  tj¡ | ddiddidœ¡ W d   ƒ n1 sbw   Y  |  tj	¡ | dd d!d"œi¡ W d   ƒ d S 1 sƒw   Y  d S | ddiddid#œ¡ | dd d!d"œi¡ d S )$NrJ   rP   rQ   rK   rI   )rJ   rH   rR   rf   Z	BulgarianZDefaultZEnglishZDeutsch)zfoo[bg]rJ   zfoo[en]zfoo[de]rT   rV   )rS   rU   rX   rZ   Fr\   )rW   rY   r[   é{   r]   r^   )
r>   rC   rD   r=   r@   rA   r?   rB   rE   rF   rG   r_   ÚkeyZkey2Úvalue2)rg   r   zDuplicate Options Herezwith a valuezwith another value)ÚoptionZOPTION)rN   ZSECTION)
r'   Úupdater3   Ú	read_dictr‰   r-   rv   r9   rŽ   r‹   )r   Úconfigr6   r   r   r   Útest_basic_from_dictk  s~   ÿÿþþÿüþüÿÛ)ÿÿ


þÿþÿ"ÿþþ
ÿz"BasicTestCase.test_basic_from_dictc                 C   s¶  |   ¡ }| d¡ | d¡ | d¡ | ¡ }| ¡  | j}||g d¢ƒ | ddd¡ || d¡dgƒ || dd¡ddƒ |  t	j
¡ | ddd¡ W d   ƒ n1 sWw   Y  |  | dd¡¡ |  | dd¡¡ | ddd	¡ d
D ]}|  | d|¡d¡ qw|| d¡dgƒ || d¡dgƒ | dd¡ || d¡g ƒ |  d | jd ¡¡}|| d¡dgƒ || dd¡dƒ | jd | jd ¡ddid}|  | dd¡¡ d S )NÚAÚaÚB)rš   rœ   r›   rT   Úbú@could not locate option, expecting case-insensitive option namesúA-Bú	A-B value©úa-bzA-bza-BrŸ   ú9has_option() returned false for option which should existr¢   ú3[MySection]
Option{} first line   
	second line   
r   Ú	MySectionr•   ÚOptionúfirst line
second lineú[section]
nekey{}nevalue
r“   ©r&   rN   ÚKey)r3   Úadd_sectionrl   rk   rm   ÚsetÚoptionsrq   rv   r9   rw   r}   r   r~   r€   r7   rŠ   r(   )r   r6   r†   r‡   Úoptr   r   r   Útest_case_sensitivity·  sP   


ÿþ
þÿÿþz#BasicTestCase.test_case_sensitivityc                 C   s¬  |   ¡ }i |d< ddi|d< i |d< dd„ |D ƒ}| ¡  | j}| j}||tdd| jdgƒƒ ||d  ¡ dhƒ ||d d ddƒ |  t¡ d|d d< W d   ƒ n1 sYw   Y  |  	d|d v ¡ d	|d d
< dD ]}|  	||d v d¡ qo||d  ¡ dhƒ ||d  ¡ dhƒ |d d= ||d  ¡ i ƒ |  
d | jd ¡¡}||d  ¡ dhƒ ||d d dƒ | j
d | jd ¡ddid}|  	d|d v ¡ d S )Nrš   rœ   rT   r›   c                 S   rL   r   r   rM   r   r   r   r   æ  rO   zFBasicTestCase.test_case_sensitivity_mapping_access.<locals>.<listcomp>r   rž   r    rŸ   r¡   r£   r¢   r¤   r   r¥   r•   r¦   r§   r¨   r“   r©   rª   rN   )r3   rk   rm   ZassertCountEqualr   r.   r   rv   r|   r}   r7   rŠ   r(   )r   r6   r†   r‡   Zelem_eqr®   r   r   r   Ú$test_case_sensitivity_mapping_accessá  sN   ÿþ
þ
ÿÿþz2BasicTestCase.test_case_sensitivity_mapping_accessc                 C   sP   |   ddi¡}|  | | jd¡dd¡ |   ddi¡}|  | | jd¡dd¡ d S )NrJ   ÚBarÚFoorž   z<could not locate option, expecting case-insensitive defaults)r3   rm   rq   r.   ©r   r6   r   r   r   Útest_default_case_sensitivity	  s   þþz+BasicTestCase.test_default_case_sensitivityc                 C   s  |   ¡ }|  |tjd | jd ¡¡ |  |tjd | jd ¡¡ |  |tjd¡}|  |jd¡ | j	s‚|  |tjd¡}|  |jd¡ t
 d¡}| jd d	krTtj}|f}ntj}|dd
f}t|dd}|  |||¡}W d   ƒ n1 stw   Y  |  |j|¡ d S d S )Nz[Foo]
{}val-without-opt-name
r   r   úNo Section!
)ú<???>r   rµ   z[Foo]
  wrong-indent
)r¶   úcfgparser.3r"   z.  # INI with as many tricky parts as possible
úutf-8©Úencoding)r3   Úparse_errorr9   ÚParsingErrorrŠ   r(   ÚMissingSectionHeaderErrorrm   r‚   r'   r   ÚfindfileÚopen)r   r6   ÚeÚtrickyÚerrorÚexpectedÚfr   r   r   Útest_parse_errors  s>   
þ
þ
ÿ
ÿ
ÿÿñzBasicTestCase.test_parse_errorsc                 C   sX   t |dƒr|}nt |¡}|  |¡}| |¡ W d   ƒ |jS 1 s$w   Y  |jS )NÚreadline)ÚhasattrÚioÚStringIOrv   Ú	read_filer   )r   r6   ÚexcÚsrcÚsiorˆ   r   r   r   r»   /  s   


ÿþzBasicTestCase.parse_errorc                 C   sê   |   ¡ }|  | ¡ g d¡ |  | d¡d¡ |  tj¡ | d¡ W d   ƒ n1 s,w   Y  |  tj¡ | 	ddd¡ W d   ƒ n1 sIw   Y  |  
|tjdd¡}|  |jd¡ | d¡ |  
|tjdd¡}|  |jd¡ d S )	Nz0new ConfigParser should have no defined sectionsr²   z5new ConfigParser should have no acknowledged sectionsrJ   ÚbarrT   )rJ   )rÎ   rJ   )r3   rm   rl   r~   Zhas_sectionrv   r9   rw   r­   r¬   Ú	get_errorr‚   r«   rx   ©r   r6   rÀ   r   r   r   Útest_query_errors8  s$   ÿÿÿÿ
zBasicTestCase.test_query_errorsc              
   C   sT   z|  ||¡ W n |y } z|W  Y d }~S d }~ww |  d|j|jf ¡ d S )Nzexpected exception type %s.%s)rq   Zfailr   r   )r   r6   rË   rN   r•   rÀ   r   r   r   rÏ   I  s   €ÿ

ÿzBasicTestCase.get_errorc                 C   sn   |   dj| jd d¡}tddƒD ]#}|  | dd| ¡¡ |  | dd| ¡¡ |  t|jdd	| ¡ qd S )
Nzä[BOOLTEST]
T1{equals}1
T2{equals}TRUE
T3{equals}True
T4{equals}oN
T5{equals}yes
F1{equals}0
F2{equals}FALSE
F3{equals}False
F4{equals}oFF
F5{equals}nO
E1{equals}2
E2{equals}foo
E3{equals}-1
E4{equals}0.1
E5{equals}FALSE AND MOREr   ©Úequalsr   é   ZBOOLTESTzt%dzf%dze%d)	r7   rŠ   r(   Úranger}   ru   r~   rv   rƒ   )r   r6   Úxr   r   r   Útest_booleanR  s   
ñÿÿýzBasicTestCase.test_booleanc                 C   sP  |   ¡ }| d¡ |  tj¡}| d¡ W d   ƒ n1 sw   Y  |j}|  t|ƒd¡ |  |jd¡ | j	r¦|  tj¡}|j
t dj| jd d¡dd W d   ƒ n1 s[w   Y  |j}|  t|ƒd	¡ |  |jd
¡ |  tj¡}| ddddœi¡ W d   ƒ n1 sw   Y  |j}|  t|ƒd¡ |  |jd¡ d S d S )Nr²   zSection 'Foo' already exists)r²   NNzì                    [Foo]
                    will this be added{equals}True
                    [Bar]
                    what about this{equals}True
                    [Foo]
                    oops{equals}this won't
                r   rÒ   ú	<foo-bar>©ÚsourcezFWhile reading from '<foo-bar>' [line  5]: section 'Foo' already exists)r²   rØ   rÔ   r±   Úvalzis really `opt`)r®   ZOPTzIWhile reading from '<dict>': option 'opt' in section 'Bar' already exists)r±   r®   z<dict>N)r3   r«   rv   r9   rŽ   r   rm   Ústrr‚   r-   r4   rŒ   r   rŠ   r(   r‹   r—   )r   r6   rˆ   rÀ   r   r   r   Útest_weird_errorsk  s4   
ÿ

ùùÿ	ÿìzBasicTestCase.test_weird_errorsc                 C   sœ   dj | j| jd | jd}| jr|d7 }|  |¡}dD ]0}t ¡ }|j||d | jd }|r4d  |¡}dj || jd	}| jrC|d
7 }|  	| 
¡ |¡ qd S )Na8  [Long Line]
foo{0[0]} this line is much, much longer than my editor
   likes it.
[{default_section}]
foo{0[1]} another very
 long line
[Long Line - With Comments!]
test {0[1]} we        {comment} can
            also      {comment} place
            comments  {comment} in
            multiline {comment} values
r   )Zcommentr.   z![Valueless]
option-without-value
)TF)Úspace_around_delimitersz {} zÑ[{default_section}]
foo{equals}another very
	long line

[Long Line]
foo{equals}this line is much, much longer than my editor
	likes it.

[Long Line - With Comments!]
test{equals}we
	also
	comments
	multiline

)rÓ   r.   z"[Valueless]
option-without-value

)rŠ   r(   r)   r.   r'   r7   rÈ   rÉ   Úwriterm   Úgetvalue)r   r   r6   rÞ   ÚoutputÚ	delimiterZexpect_stringr   r   r   Ú
test_writeŠ  s6   ôÿÿ


òÿÿãzBasicTestCase.test_writec                 C   sˆ   |   dj| jd d¡}G dd„ dtƒ}| ddd¡ | dd|dƒ¡ | dd	d¡ | dd	|dƒ¡ | ddd¡ | dd	d¡ d S )
Nú[sect]
option1{eq}foo
r   ©r‡   c                   @   s   e Zd ZdS )z2BasicTestCase.test_set_string_types.<locals>.mystrN)r   r   r   r   r   r   r   ÚmystrÅ  s    ræ   ÚsectÚoption1ZsplatÚoption2)r7   rŠ   r(   rÜ   r¬   )r   r6   ræ   r   r   r   Útest_set_string_typesÀ  s   
ÿz#BasicTestCase.test_set_string_typesc                 C   sb  | j d dkr|  d¡ t d¡}|  ¡ }|j|dgdd}|  ||g¡ |  | dd	¡d
¡ |  ¡ }|j|dd}|  ||g¡ |  | dd	¡d
¡ |  ¡ }|jt 	|¡dd}|  ||g¡ |  | dd	¡d
¡ |  ¡ }|jt 	|¡|gdd}|  |||g¡ |  | dd	¡d
¡ |  ¡ }|jdgdd}|  |g ¡ |  ¡ }|jg dd}|  |g ¡ d S )Nr   r"   úincompatible formatúcfgparser.1únonexistent-filer¸   r¹   r>   rJ   Únewbar)
r(   ÚskipTestr   r¾   r3   Úreadrm   rq   ÚpathlibÚPath)r   Zfile1r6   Úparsed_filesr   r   r   Útest_read_returns_file_listÎ  s2   

z)BasicTestCase.test_read_returns_file_listc                 C   s˜   | j d dkr|  d¡ t d¡ ¡ }|  ¡ }|j|dd}|  ||g¡ |  ¡ }|jddd}|  |g ¡ |  ¡ }|j|dgdd}|  ||g¡ d S )Nr   r"   rë   rì   r¸   r¹   s   nonexistent-file)r(   rï   r   r¾   Úencoder3   rð   rm   )r   Zfile1_bytestringr6   ró   r   r   r   Ú0test_read_returns_file_list_with_bytestring_pathï  s   
z>BasicTestCase.test_read_returns_file_list_with_bytestring_pathc                 C   s   |   dj| jd d¡S )Nah  [Foo]
bar{equals}something %(with1)s interpolation (1 step)
bar9{equals}something %(with9)s lots of interpolation (9 steps)
bar10{equals}something %(with10)s lots of interpolation (10 steps)
bar11{equals}something %(with11)s lots of interpolation (11 steps)
with11{equals}%(with10)s
with10{equals}%(with9)s
with9{equals}%(with8)s
with8{equals}%(With7)s
with7{equals}%(WITH6)s
with6{equals}%(with5)s
With5{equals}%(with4)s
WITH4{equals}%(with3)s
with3{equals}%(with2)s
with2{equals}%(with1)s
with1{equals}with

[Mutual Recursion]
foo{equals}%(bar)s
bar{equals}%(foo)s

[Interpolation Error]
name{equals}%(reference)s
r   rÒ   )r7   rŠ   r(   r
   r   r   r   Úget_interpolation_config  s
   
éÿz&BasicTestCase.get_interpolation_configc                 C   s€   | j d | j¡ddid}t|jdddidƒ}| ¡  |  ||¡ |  tj	¡ | d¡ W d   ƒ d S 1 s9w   Y  d S )	Nz
            [section]
            name {0[0]} %(value)s
            key{0[1]} |%(name)s|
            getdefault{0[1]} |%(default)s|
        Údefaultú	<default>r©   rN   rT   rb   zno such section)
r7   rŠ   r(   rn   r	   rk   rm   rv   r9   rw   )r   rÃ   r6   r†   r   r   r   Úcheck_items_config  s   û"ÿz BasicTestCase.check_items_configc                 C   sŽ   | j d | j¡ddid}|  | ¡ d d¡ |  | ¡ d d¡ |  | ¡ d d¡ |  t¡ | ¡  W d   ƒ d S 1 s@w   Y  d S )	Nú®
            [section1]
            name1 {0[0]} value1
            [section2]
            name2 {0[0]} value2
            [section3]
            name3 {0[0]} value3
        rø   rù   r©   r   Úsection1Úsection2Úsection3)r7   rŠ   r(   rm   Úpopitemrv   r|   r³   r   r   r   Útest_popitem)  s   ù
"ÿzBasicTestCase.test_popitemc                 C   s    |   ddi¡}|  | | jd¡dd¡ dddœ|d< |  | ¡ dg¡ |  t|d  ¡ ƒh d	£¡ | ¡  |  t| ¡ ƒtƒ ¡ |  t|| j  ¡ ƒdh¡ d S )
NrJ   r±   r²   rž   Úvalue1r”   )rè   ré   Zzing>   rJ   ré   rè   )r3   rm   rq   r.   rl   r¬   r   Úclearr³   r   r   r   Ú
test_clear8  s   þ zBasicTestCase.test_clearc                 C   sB  | j d | j¡ddid}|  t|d  ¡ ƒddh¡ |  t|d  ¡ ƒd	dh¡ |  t|d
  ¡ ƒddh¡ |  |d d d¡ |  |d d	 d¡ |  |d
 d d¡ |  | ¡ g d¢¡ ddi|d< |  t|d  ¡ ƒddh¡ |  |d d d¡ |  d	|d ¡ |  | ¡ g d¢¡ i |d
< |  t|d
  ¡ ƒdh¡ |  d|d
 ¡ |  | ¡ g d¢¡ || j || j< |  	t|| j  ¡ ƒtƒ ¡ i || j< |  t|| j  ¡ ƒtƒ ¡ |  t|d  ¡ ƒdh¡ |  t|d  ¡ ƒdh¡ |  t|d
  ¡ ƒtƒ ¡ |  | ¡ g d¢¡ |d |d< |  t|d  ¡ ƒdh¡ d S )Nrû   ZnameDZvalueDr©   rü   Zname1Únamedrý   Zname2rþ   Zname3r  r”   Zvalue3)rü   rý   rþ   Zname22Zvalue22)
r7   rŠ   r(   rm   r¬   r   rl   ÚassertNotInr.   ZassertNotEqualr³   r   r   r   Útest_setitemD  s:   ù
zBasicTestCase.test_setitemc                 C   s   | j r|  d¡ t d | jd ¡¡}|  ¡ }|  tj	¡ | 
|¡ W d   ƒ n1 s-w   Y  |  | dd¡d¡ |  |d d d¡ d S )Nz2if no_value is allowed, ParsingError is not raisedzC            [DEFAULT]
            test {0} test
            invalidr   ZDEFAULTÚtest)r'   rï   rŒ   r   rŠ   r(   r3   rv   r9   r¼   r4   rm   rq   )r   Úinvalidr6   r   r   r   Útest_invalid_multiline_valuej  s   
ýÿz*BasicTestCase.test_invalid_multiline_valueN)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<   F   s0     aCL*(
		6!&r<   c                   @   s   e Zd ZejZdZdS )ÚStrictTestCaseTN)r   r   r   r9   ÚRawConfigParserr1   r-   r   r   r   r   r
  z  s    r
  c                   @   sR   e Zd Zej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 )ÚConfigParserTestCasec                 C   s˜   |   ¡ }| j}|| dd¡dƒ || dd¡dƒ || dd¡dƒ |  |tjdd¡}| jtjkr:|  |jd	¡ d S t	| jtj
ƒrJ|  |jd	¡ d S d S )
Nr²   rÎ   z%something with interpolation (1 step)Úbar9z.something with lots of interpolation (9 steps)Úbar10z/something with lots of interpolation (10 steps)Úbar11)r  r²   ú5something %(with11)s lots of interpolation (11 steps))r÷   rm   rq   rÏ   r9   ÚInterpolationDepthErrorr/   r;   r‚   Ú
isinstanceÚLegacyInterpolation)r   r6   r‡   rÀ   r   r   r   Útest_interpolation‚  s   ÿÿÿz'ConfigParserTestCase.test_interpolationc                 C   s†   |   ¡ }|  |tjdd¡}|  |jd¡ |  |jd¡ |  |jd¡ | jtj	kr1|  |j
d¡ d S t| jtjƒrA|  |j
d¡ d S d S )NúInterpolation Errorrp   Ú	reference)rp   r  z%(reference)sr  )r÷   rÏ   r9   ÚInterpolationMissingOptionErrorrm   r  rN   r•   r/   r;   r‚   r  r  rÐ   r   r   r   Ú test_interpolation_missing_value’  s   
ÿÿz5ConfigParserTestCase.test_interpolation_missing_valuec                 C   ó   |   g d¢¡ d S )N)©rø   rù   )Ú
getdefaultz|<default>|)r“   z|value|)rp   rT   ©rú   r
   r   r   r   Ú
test_items   r   zConfigParserTestCase.test_itemsc                 C   sž   |   dj| jd d¡}|  | dd¡d¡ | jtjkr(|  | dd¡d¡ d S t| jtj	ƒrM|  
t¡ | dd¡ W d   ƒ d S 1 sFw   Y  d S d S )	Nzc[section]
option1{eq}xxx
option2{eq}%(option1)s/xxx
ok{eq}%(option1)s/%%s
not_ok{eq}%(option2)s/%%sr   rå   rN   Úokzxxx/%sZnot_okz
xxx/xxx/%s)r7   rŠ   r(   rm   rq   r/   r9   r;   r  r  rv   Ú	TypeErrorr³   r   r   r   Útest_safe_interpolation¦  s   û"ÿÿz,ConfigParserTestCase.test_safe_interpolationc                 C   s¢   |   dj| jd d¡}|  | dd¡d¡ |  t|jddd¡ |  t|jddd¡ |  t|jddd	¡ |  | dd¡d¡ | dd
d¡ |  | dd
¡d¡ d S )Nrä   r   rå   rç   rè   rJ   ú%fooúfoo%úf%ooré   úfoo%%barzfoo%bar)r7   rŠ   r(   rm   rq   rv   rƒ   r¬   r³   r   r   r   Ú#test_set_malformatted_interpolationµ  s   
ÿz8ConfigParserTestCase.test_set_malformatted_interpolationc                 C   s¼   |   dj| jd d¡}|  t|jddd¡ |  t|jddd¡ |  t|jddtƒ ¡ |  t|jddd¡ |  t|jddd¡ |  t|jddtƒ ¡ |  t|jdd	d
¡ |  t|jd	¡ d S )Nrä   r   rå   rç   rè   r   g      ð?ré   r’   zinvalid opt name!)r7   rŠ   r(   rv   r  r¬   Úobjectr«   r³   r   r   r   Útest_set_nonstring_typesÅ  s   
ÿz-ConfigParserTestCase.test_set_nonstring_typesc                 C   s   |   ¡ }|  t|j| j¡ d S r   )r3   rv   rƒ   r«   r.   r³   r   r   r   Útest_add_section_defaultÓ  s   z-ConfigParserTestCase.test_add_section_defaultc                 C   s€   | j ddid}|  || j d d¡ |  || j  d¡d¡ | j ddid}|  || j d d	¡ |  || j  d¡d¡ d
S )zbpo-23835 fix for ConfigParserr   ç333333@r©   rg   z2.4rš   çÍÌÌÌÌÌ@r›   z5.2N)r3   rm   r.   rs   rt   r³   r   r   r   Útest_defaults_keyword×  s   z*ConfigParserTestCase.test_defaults_keywordN)r   r   r   r9   ÚConfigParserr1   r  r  r  r   r%  r'  r(  r+  r   r   r   r   r    s    r  c                   @   sD   e Zd ZejZdZe d¡ 	¡ Z
dd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú#ConfigParserTestCaseNoInterpolationNz™
        [numbers]
        one = 1
        two = %(one)s * 2
        three = ${common:one} * 3

        [hexen]
        sixteen = ${numbers:two} * 8
    c                 C   sT   |   |d d d¡ |   |d d d¡ |   |d d d¡ |   |d d	 d
¡ d S )NZnumbersÚonerg   Útwoz%(one)s * 2Úthreez${common:one} * 3ZhexenZsixteenz${numbers:two} * 8)rm   r³   r   r   r   ÚassertMatchesIniî  s   z4ConfigParserTestCaseNoInterpolation.assertMatchesInic                 C   s   |   | j¡}|  |¡ d S r   )r7   Úinir1  r³   r   r   r   Útest_no_interpolationô  s   z9ConfigParserTestCaseNoInterpolation.test_no_interpolationc                 C   s   |   ¡ }|  | d¡¡ d S ©NÚ )r3   ÚassertIsNoner4   r³   r   r   r   Útest_empty_caseø  s   z3ConfigParserTestCaseNoInterpolation.test_empty_casec                 C   s2   G dd„ dt jƒ}|ƒ }| | j¡ |  |¡ d S )Nc                   @   s   e Zd ZdZdS )zbConfigParserTestCaseNoInterpolation.test_none_as_default_interpolation.<locals>.CustomConfigParserN)r   r   r   Z_DEFAULT_INTERPOLATIONr   r   r   r   ÚCustomConfigParserý  ó    r8  )r9   r,  r4   r2  r1  )r   r8  r6   r   r   r   Ú"test_none_as_default_interpolationü  s   zFConfigParserTestCaseNoInterpolation.test_none_as_default_interpolation)r   r   r   r9   r,  r1   r/   rŒ   r   Ústripr2  r1  r3  r7  r:  r   r   r   r   r-  á  s    ø
r-  c                   @   s"   e Zd ZejZe ¡ Zdd„ ZdS )Ú'ConfigParserTestCaseLegacyInterpolationc                 C   s¸   |   dj| jd d¡}|  | dd¡d¡ | ddd¡ |  | dd¡d¡ | ddd¡ |  | dd¡d¡ | ddd	¡ |  | dd¡d	¡ | dd
d¡ |  | dd
¡d¡ d S )Nrä   r   rå   rç   rè   rJ   r!  r"  r#  ré   r$  )r7   rŠ   r(   rm   rq   r¬   r³   r   r   r   r%  	  s   
ÿzKConfigParserTestCaseLegacyInterpolation.test_set_malformatted_interpolationN)	r   r   r   r9   r,  r1   r  r/   r%  r   r   r   r   r<    s    r<  c                   @   ó   e Zd ZdZdZdZdS )Ú)ConfigParserTestCaseNonStandardDelimiters©z:=ú$©ú//ú"N©r   r   r   r(   r)   r*   r   r   r   r   r>    ó    r>  c                   @   ó   e Zd ZdZdS )Ú-ConfigParserTestCaseNonStandardDefaultSectionZgeneralN)r   r   r   r.   r   r   r   r   rG  !  r9  rG  c                   @   s6   e Zd ZejZd dd¡Zdd„ Zdd„ Z	dd	„ Z
d
S )ÚMultilineValuesTestCasezSI'm having spam spam spam spam spam spam spam beaked beans spam spam spam and spam!ú ú	
c                 C   sŽ   |   ¡ }tdƒD ]}d |¡}| |¡ tdƒD ]}| |d |¡| j¡ qqttjddd}| 	|¡ W d   ƒ d S 1 s@w   Y  d S )Néd   z	section{}é
   zlovely_spam{}Úwr¸   r¹   )
r3   rÕ   rŠ   r«   r¬   Úwonderful_spamr¿   r   ÚTESTFNrß   )r   r6   r   ÚsÚjrÄ   r   r   r   ÚsetUp+  s   

ÿ"ÿzMultilineValuesTestCase.setUpc                 C   s   t  tj¡ d S r   )ÚosÚunlinkr   rO  r
   r   r   r   ÚtearDown5  s   z MultilineValuesTestCase.tearDownc                 C   sb   |   ¡ }ttjdd}| |¡ W d   ƒ n1 sw   Y  |  | dd¡| j dd¡¡ d S )Nr¸   r¹   Zsection8Zlovely_spam4rJ  Ú
)	r3   r¿   r   rO  rÊ   rm   rq   rN  Úreplace)r   Zcf_from_filerÄ   r   r   r   Ú test_dominating_multiline_values8  s   ÿÿz8MultilineValuesTestCase.test_dominating_multiline_valuesN)r   r   r   r9   r,  r1   rW  rN  rR  rU  rX  r   r   r   r   rH  %  s    þ
rH  c                   @   s2   e Zd ZejZdd„ Zdd„ Zdd„ Zdd„ Z	d	S )
ÚRawConfigParserTestCasec                 C   sZ   |   ¡ }| j}|| dd¡dƒ || dd¡dƒ || dd¡dƒ || dd¡d	ƒ d S )
Nr²   rÎ   z*something %(with1)s interpolation (1 step)r  z3something %(with9)s lots of interpolation (9 steps)r  z5something %(with10)s lots of interpolation (10 steps)r  r  )r÷   rm   rq   ©r   r6   r‡   r   r   r   r  E  s   ÿÿÿÿz*RawConfigParserTestCase.test_interpolationc                 C   r  )N)r  )r  z|%(default)s|)r“   z
|%(name)s|)rp   z	%(value)sr  r
   r   r   r   r  Q  r   z"RawConfigParserTestCase.test_itemsc                 C   sô   |   ¡ }| d¡ | ddd¡ | ddg d¢¡ | ddddi¡ |  | dd¡d¡ |  | dd¡g d¢¡ |  | dd¡ddi¡ | d	¡ | d	d
d¡ |  | d	d
¡d¡ |jtju rxdd„ |_| ddd¡ |  | dd¡d¡ d S d S )Nz
non-stringrW   r   rn   )r   r   r   é   é   rÔ   é   é   r0   Úpign†ðù!	@r’   zthis is sickTc                 S   ó   | S r   r   )rÖ   r   r   r   Ú<lambda>g  ó    zBRawConfigParserTestCase.test_set_nonstring_types.<locals>.<lambda>)	r3   r«   r¬   rm   rq   Ú_dictr9   r:   Úoptionxformr³   r   r   r   r'  W  s$   
ÿ

ûz0RawConfigParserTestCase.test_set_nonstring_typesc                 C   sz   |   t¡}| jddid W d  ƒ n1 sw   Y  |j}|  t|ƒd¡ | jddid}|  || j d d¡ dS )	z-bpo-23835 legacy behavior for RawConfigParserr   r)  r©   Nz%'int' object has no attribute 'lower'rš   r*  r›   )rv   r{   r3   r   rm   rÜ   rs   r.   )r   ÚctxÚerrr6   r   r   r   r+  k  s   ÿz-RawConfigParserTestCase.test_defaults_keywordN)
r   r   r   r9   r  r1   r  r  r'  r+  r   r   r   r   rY  B  s    rY  c                   @   r=  )Ú,RawConfigParserTestCaseNonStandardDelimitersr?  rA  NrD  r   r   r   r   rg  u  rE  rg  c                   @   s&   e Zd ZejZdZdZdZdd„ Z	dS )ÚRawConfigParserTestSambaConf)r%   r$   z----)rB  Fc                 C   sž   t  d¡}|  ¡ }|j|dgdd}|  ||g¡ g d¢}|  | ¡ |¡ |  | dd¡d¡ |  | dd	¡d
¡ |  | dd¡d¡ |  | dd¡d¡ d S )Nzcfgparser.2rí   r¸   r¹   )ÚglobalZhomesZprinterszprint$zpdf-generatorÚtmpZAgustinri  Z	workgroupZMDKGROUPzmax log sizeé2   zhosts allowz127.rj  zecho commandzcat %s; rm %s)r   r¾   r3   rð   rm   rl   rq   rr   )r   Zsmbconfr6   ró   rl   r   r   r   Útest_reading  s   
z)RawConfigParserTestSambaConf.test_readingN)
r   r   r   r9   r  r1   r)   r*   r+   rl  r   r   r   r   rh  {  s    rh  c                   @   s\   e Zd ZejZe ¡ ZdZdZ	ddd„Z
dd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ ZdS )Ú)ConfigParserTestCaseExtendedInterpolationÚcommonTNc                 C   s"   |   |¡}|r
||_| |¡ |S r   )r3   rd  r4   )r   r5   r&   rd  r6   r   r   r   r7   •  s
   

z4ConfigParserTestCaseExtendedInterpolation.fromstringc                 C   sP  |   t d¡ ¡ ¡}| j}||d d dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d d d	ƒ ||d d
 dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d d
 dƒ ||d d dƒ d S )Na  
            [common]
            favourite Beatle = Paul
            favourite color = green

            [tom]
            favourite band = ${favourite color} day
            favourite pope = John ${favourite Beatle} II
            sequel = ${favourite pope}I

            [ambv]
            favourite Beatle = George
            son of Edward VII = ${favourite Beatle} V
            son of George V = ${son of Edward VII}I

            [stanley]
            favourite Beatle = ${ambv:favourite Beatle}
            favourite pope = ${tom:favourite pope}
            favourite color = black
            favourite state of mind = paranoid
            favourite movie = soylent ${common:favourite color}
            favourite song = ${favourite color} sabbath - ${favourite state of mind}
        rn  zfavourite BeatleZPaulzfavourite colorZgreenZtomzfavourite bandz	green dayzfavourite popezJohn Paul IIZsequelzJohn Paul IIIZambvZGeorgezson of Edward VIIzGeorge Vzson of George Vz	George VIZstanleyZblackzfavourite state of mindZparanoidzfavourite moviezsoylent greenzfavourite songzblack sabbath - paranoid)r7   rŒ   r   r;  rm   rZ  r   r   r   Útest_extended_interpolationœ  s.   êÿzEConfigParserTestCaseExtendedInterpolation.test_extended_interpolationc                 C   sŠ   |   t d¡ ¡ ¡}|  tj¡ |d d  W d   ƒ n1 s!w   Y  |  tj¡ |d d  W d   ƒ d S 1 s>w   Y  d S )Nz¸
            [one for you]
            ping = ${one for me:pong}

            [one for me]
            pong = ${one for you:ping}

            [selfish]
            me = ${me}
        zone for youZpingZselfishÚme)r7   rŒ   r   r;  rv   r9   r  r³   r   r   r   Útest_endless_loopÉ  s   	÷ÿ"ÿz;ConfigParserTestCaseExtendedInterpolation.test_endless_loopc                 C   sª   |   d¡}|  |d d d¡ |  |d d d¡ |  |d d d¡ tj}|  |¡}|d d	  W d   ƒ n1 s<w   Y  |  |jjd
¡ |  |jjd d¡ d S )Nzì
            [dollars]
            $var = $$value
            $var2 = ${$var}
            ${sick} = cannot interpolate me

            [interpolated]
            $other = ${dollars:$var}
            $trying = ${dollars:${sick}}
        Zdollarsz$varz$valueZinterpolatedz$otherz${sick}zcannot interpolate mez$tryingzdollars:${sickr[  z${dollars:${sick}})r7   rm   r9   r  rv   r   r  r‚   )r   r6   Zexception_classrˆ   r   r   r   Útest_strange_optionsÚ  s   
ÿz>ConfigParserTestCaseExtendedInterpolation.test_strange_optionsc                 C   sŽ   t  d¡ ¡ }|  |¡}| j}||d d dƒ ||d d dƒ ||d d dƒ ||d d d	ƒ ||d
 d dƒ ||d
 d dƒ d S )Naj  
            [common]
            optionlower = value
            OptionUpper = Value

            [Common]
            optionlower = a better ${common:optionlower}
            OptionUpper = A Better ${common:OptionUpper}

            [random]
            foolower = ${common:optionlower} redefined
            FooUpper = ${Common:OptionUpper} Redefined
        rn  ZoptionlowerrT   ZOptionUpperÚValueÚCommonúa better valueúA Better ValueÚrandomZfoolowerúvalue redefinedZFooUpperúA Better Value Redefined)rŒ   r   r;  r7   rm   ©r   r2  r6   r‡   r   r   r   Útest_case_sensitivity_basicï  s   ô
zEConfigParserTestCaseExtendedInterpolation.test_case_sensitivity_basicc                 C   sÌ   t  d¡ ¡ }|  tj¡ |  |¡}W d   ƒ n1 sw   Y  | j|dd„ d}| j}||d d dƒ ||d d d	ƒ ||d
 d dƒ ||d
 d dƒ ||d d dƒ ||d d dƒ d S )Na8  
            [common]
            option = value
            Option = Value

            [Common]
            option = a better ${common:option}
            Option = A Better ${common:Option}

            [random]
            foo = ${common:option} redefined
            Foo = ${Common:Option} Redefined
        c                 S   r`  r   r   )r®   r   r   r   ra    rb  z[ConfigParserTestCaseExtendedInterpolation.test_case_sensitivity_conflicts.<locals>.<lambda>)rd  rn  r•   rT   r¦   rs  rt  ru  rv  rw  rJ   rx  r²   ry  )rŒ   r   r;  rv   r9   r‹   r7   rm   rz  r   r   r   Útest_case_sensitivity_conflicts  s   ôÿzIConfigParserTestCaseExtendedInterpolation.test_case_sensitivity_conflictsc                 C   s^  |   d¡}|  tj¡ |d d  W d   ƒ n1 sw   Y  |  tj¡ |d d  W d   ƒ n1 s8w   Y  |  tj¡ |d d  W d   ƒ n1 sTw   Y  |  tj¡ |d d  W d   ƒ n1 spw   Y  |  tj¡ |d d  W d   ƒ n1 sŒw   Y  |  t¡ d|d d	< W d   ƒ d S 1 s¨w   Y  d S )
Na   
            [interpolation fail]
            case1 = ${where's the brace
            case2 = ${does_not_exist}
            case3 = ${wrong_section:wrong_value}
            case4 = ${i:like:colon:characters}
            case5 = $100 for Fail No 5!
        zinterpolation failZcase1Zcase2Zcase3Zcase4Zcase5zBLACK $ABBATHZcase6)r7   rv   r9   ÚInterpolationSyntaxErrorr  rƒ   r³   r   r   r   Útest_other_errors"  s&   
	ÿÿÿÿÿ"ÿz;ConfigParserTestCaseExtendedInterpolation.test_other_errors)NN)r   r   r   r9   r,  r1   ÚExtendedInterpolationr/   r.   r-   r7   ro  rq  rr  r{  r|  r~  r   r   r   r   rm    s    
-rm  c                   @   rF  )ÚConfigParserTestCaseNoValueTN)r   r   r   r'   r   r   r   r   r€  :  r9  r€  c                   @   s2   e Zd ZejZdhZdhZdZdd„ Z	dd„ Z
dS )	ÚConfigParserTestCaseTrickyFiler"   r%   Tc                 C   sš  t  d¡}|  ¡ }|  t|j|ddƒd¡ |  | ¡ g d¢¡ |  |j| jdddid	d
¡ |  	t
¡ |j| jddddid W d   ƒ n1 sKw   Y  |  t| dd¡ d¡ƒd¡ |  t| dd¡ d¡ƒd¡ d}|  | |d¡¡ |  | |d¡d¡ |  t| d¡ƒd¡ |  	tj¡ | d¡ W d   ƒ n1 s¤w   Y  |  | dd¡d¡ |  | dd¡| dd¡¡ |  | dd¡d¡ d S ) Nr·   r¸   r¹   r   )ÚstrangeÚ
corruptionú&yeah, sections can be indented as wellúanother one!úno values hereútricky interpolationúmore interpolationZgoZinterpolatez-1rb   éÿÿÿÿT)Úrawrc   r‚  ÚotherrV  é   rƒ  rT   rL  r„  zare they subsectionszlets use some Unicodeu	   ç‰‡ä»®år…  rÔ   r†  r‡  Zletszdo thisrˆ  zgo shopping)r   r¾   r3   rm   ro   rð   rl   rr   r.   rv   rƒ   rq   Úsplitr~   ru   r	   r9   r  )r   rÁ   r6   Zlongnamer   r   r   Útest_cfgparser_dot_3D  s8   
ÿÿÿþÿ
ÿz3ConfigParserTestCaseTrickyFile.test_cfgparser_dot_3c                 C   sP   t  d¡}|  ¡ }|  t¡ |j|dd W d   ƒ d S 1 s!w   Y  d S )Nr·   Úasciir¹   )r   r¾   r3   rv   ÚUnicodeDecodeErrorrð   )r   rÁ   r6   r   r   r   Útest_unicode_failured  s
   
"ÿz3ConfigParserTestCaseTrickyFile.test_unicode_failureN)r   r   r   r9   r,  r1   r(   r)   r'   rŽ  r‘  r   r   r   r   r  >  s     r  c                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚIssue7005TestCasezrTest output when None is set() as a value and allow_no_value == False.

    http://bugs.python.org/issue7005

    z[section]
option = None

c                 C   s<   |dd}|  d¡ | ddd ¡ t ¡ }| |¡ | ¡ S ©NF)r'   rN   r•   )r«   r¬   rÈ   rÉ   rß   rà   )r   r1   ÚcprÍ   r   r   r   Úpreparet  s   


zIssue7005TestCase.preparec                 C   sT   t jdd}| d¡ |  t¡ | ddd ¡ W d   ƒ d S 1 s#w   Y  d S r“  )r9   r,  r«   rv   r  r¬   )r   r”  r   r   r   Útest_none_as_value_stringified}  s
   
"ÿz0Issue7005TestCase.test_none_as_value_stringifiedc                 C   s   |   tj¡}|  || j¡ d S r   )r•  r9   r  rm   Úexpected_output)r   rá   r   r   r   Ú"test_none_as_value_stringified_rawƒ  s   z4Issue7005TestCase.test_none_as_value_stringified_rawN)r   r   r   Ú__doc__r—  r•  r–  r˜  r   r   r   r   r’  k  s    	r’  c                   @   s   e Zd ZeZdd„ ZdS )ÚSortedTestCasec                 C   s0   |   d¡}t ¡ }| |¡ |  | ¡ d¡ d S )Nz [b]
o4=1
o3=2
o2=3
o1=4
[a]
k=v
z,[a]
k = v

[b]
o1 = 4
o2 = 3
o3 = 2
o4 = 1

)r7   rÈ   rÉ   rß   rm   rà   )r   r6   rá   r   r   r   Útest_sorted‹  s   


ÿzSortedTestCase.test_sortedN)r   r   r   r   r,   r›  r   r   r   r   rš  ˆ  s    rš  c                   @   s"   e Zd ZejZdZdZdd„ ZdS )ÚCompatibleTestCasez#;r$   c                 C   sT   t  d¡}|  |¡}|  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ d S )	Nzî        [Commented Bar]
        baz=qwe ; a comment
        foo: bar # not a comment!
        # but this is a comment
        ; another comment
        quirk: this;is not a comment
        ; a space must precede an inline comment
        r=   rJ   zbar # not a comment!rH   rI   Zquirkzthis;is not a comment)rŒ   r   r7   rm   rq   r   r   r   r   Útest_comment_handling¤  s   

	ÿÿz(CompatibleTestCase.test_comment_handlingN)	r   r   r   r9   r  r1   r)   r*   r  r   r   r   r   rœ  Ÿ  s
    rœ  c                   @   s   e Zd ZejZddd„ZdS )ÚCopyTestCaseNc                 C   sp   |   |¡}| |¡ |   ¡ }| |¡ | ¡ D ]}|j| jkr q|| j  ¡ D ]\}}|| |kr4||= q'q|S r   )r3   r4   r—   r   rp   r.   r	   )r   r5   r&   r6   Zcf_copyrN   rø   rT   r   r   r   r7   ¸  s   


€þzCopyTestCase.fromstringr   )r   r   r   r9   r,  r1   r7   r   r   r   r   rž  µ  s    rž  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFakeFilec                 C   sP   t  d¡}t|dd}| ¡ | _| j ¡  W d   ƒ d S 1 s!w   Y  d S )Nrì   r¸   r¹   )r   r¾   r¿   Ú	readlinesÚlinesÚreverse)r   Ú	file_pathrÄ   r   r   r   Ú__init__É  s
   

"þzFakeFile.__init__c                 C   s   t | jƒr
| j ¡ S dS r4  )ro   r¡  Úpopr
   r   r   r   rÆ   Ï  r8   zFakeFile.readlineN)r   r   r   r¤  rÆ   r   r   r   r   rŸ  È  s    rŸ  c                 c   s(    |   ¡ }|r|V  |   ¡ }|sdS dS )z+As advised in Doc/library/configparser.rst.N)rÆ   )rÄ   Úliner   r   r   Úreadline_generatorÕ  s   €þr§  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚReadFileTestCasec              	   C   s´   t  d¡g}z| |d  d¡¡ W n	 ty   Y nw |D ]9}t ¡ }t|dd}| |¡ W d   ƒ n1 s:w   Y  |  	d|¡ |  	d|d ¡ |  
|d d d¡ qd S )	Nrì   r   Úutf8r¸   r¹   r>   rJ   rî   )r   r¾   rj   rõ   ÚUnicodeEncodeErrorr9   r,  r¿   rÊ   ÚassertInrm   )r   Z
file_pathsr£  rz   rÄ   r   r   r   Ú	test_fileÞ  s   ÿÿúzReadFileTestCase.test_filec                 C   sZ   t  d¡ ¡  d¡}t ¡ }| |¡ |  d|¡ |  d|d ¡ |  |d d d¡ d S )Nz%
        [Foo Bar]
        foo=newbarrV  r>   rJ   rî   )	rŒ   r   r;  r  r9   r,  rÊ   r«  rm   )r   r¡  rz   r   r   r   Útest_iterableì  s   
þ
zReadFileTestCase.test_iterablec                 C   s‚   t  ¡ }|  t¡ | tƒ ¡ W d  ƒ n1 sw   Y  | ttƒ ƒ¡ |  d|¡ |  d|d ¡ |  |d d d¡ dS )zIssue #11670.Nr>   rJ   rî   )	r9   r,  rv   r  rÊ   rŸ  r§  r«  rm   ©r   rz   r   r   r   Útest_readline_generatorö  s   ÿz(ReadFileTestCase.test_readline_generatorc                 C   s¤  t  d¡ ¡  d¡}t ¡ }|  tj¡}|j|dd W d  ƒ n1 s&w   Y  |  	t
|jƒd¡ t  d¡ ¡  d¡}t ¡ }|  tj¡}|j|dd W d  ƒ n1 sZw   Y  |  	t
|jƒd¡ t  d	¡ ¡  d¡}t ¡ }|  tj¡}|j|dd W d  ƒ n1 sŽw   Y  |  	t
|jƒd
¡ t  d¡ ¡  d¡}t ¡ }|  tj¡}|j|dd W d  ƒ n1 sÂw   Y  |  	t
|jƒd¡ dS )zIssue #18260.z"
        [badbad]
        [badbad]rV  s   badbadrÙ   NzGWhile reading from b'badbad' [line  2]: section 'badbad' already existsz5
        [badbad]
        bad = bad
        bad = badzWWhile reading from b'badbad' [line  3]: option 'bad' in section 'badbad' already existsz
        [badbad]
        = badz=Source contains parsing errors: b'badbad'
	[line  2]: '= bad'z"
        [badbad
        bad = badzDFile contains no section headers.
file: b'badbad', line: 1
'[badbad')rŒ   r   r;  r  r9   r,  rv   rŽ   rÊ   rm   rÜ   r   r‹   r¼   r½   )r   r¡  rz   Zdser   r   r   Útest_source_as_bytes   sX   
þÿþ
ýÿþ
þÿþ
þÿþz%ReadFileTestCase.test_source_as_bytesN)r   r   r   r¬  r­  r¯  r°  r   r   r   r   r¨  Ý  s
    

r¨  c                   @   sP   e Zd 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S )ÚCoverageOneHundredTestCasez"Covers edge cases in the codebase.c                 C   sf   t  dd¡}|  |jd¡ |  |jd¡ |  |jd ¡ |  |jd ¡ |  |jd¡ |  t|ƒd¡ d S )NrN   r•   )rN   r•   NNz3Option 'option' in section 'section' already exists)	r9   r‹   rm   rN   r•   rÚ   Úlinenor‚   rÜ   ©r   rÂ   r   r   r   Útest_duplicate_option_error3  s   z6CoverageOneHundredTestCase.test_duplicate_option_errorc                 C   s<   t  ddd¡}|  |jd¡ |  |jd¡ |  |jd¡ d S )Nr•   rN   Úrawval)r•   rN   rµ  )r9   r  rm   r‚   r•   rN   r³  r   r   r   Útest_interpolation_depth_error=  s   ÿz9CoverageOneHundredTestCase.test_interpolation_depth_errorc                 C   s   |   t¡}t ¡  W d   ƒ n1 sw   Y  |  t|jƒd¡ |   t¡}tjddd W d   ƒ n1 s9w   Y  |  t|jƒd¡ tjdd}|  |jd¡ tj	dd}t 
d	t¡ |  |jd¡ d|_|  |jd¡ W d   ƒ n1 s|w   Y  |D ]
}|  |jtu ¡ qƒd S )
Nz%Required argument `source' not given.rÚ   Úfilename)rÚ   r·  z:Cannot specify both `filename' and `source'. Use `source'.©r·  T©ÚrecordÚalways)rv   rƒ   r9   r¼   rm   rÜ   r   rÚ   ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningr·  r}   Úcategory)r   rˆ   rÂ   rM  Úwarningr   r   r   Útest_parsing_errorD  s&   
ÿÿüÿz-CoverageOneHundredTestCase.test_parsing_errorc                 C   sª   t  ¡ }| d¡ |  t j¡}|d d  W d   ƒ n1 s w   Y  |  t|jƒd¡ |  t j¡}|d d  W d   ƒ n1 sEw   Y  |  t|jƒd¡ d S )Nz–
            [section]
            invalid_percent = %
            invalid_reference = %(()
            invalid_variable = %(does_not_exist)s
        rN   Zinvalid_percentz.'%' must be followed by '%' or '(', found: '%'Zinvalid_referencez+bad interpolation variable reference '%(()')r9   r,  r4   rv   r}  rm   rÜ   r   ©r   rz   rˆ   r   r   r   Útest_interpolation_validationW  s   
ÿÿz8CoverageOneHundredTestCase.test_interpolation_validationc                 C   sš   t  d¡}t ¡ }tjdd}t dt¡ |j|dd W d   ƒ n1 s'w   Y  |D ]
}|  	|j
tu ¡ q.|  t|ƒd¡ |  |d d	 d
¡ d S )Nz2
        [section]
        option = value
        Tr¹  r»  rÉ   r¸  r[  rN   r•   rT   )rÈ   rÉ   r9   r,  r¼  r½  r¾  r¿  Zreadfpr}   rÀ  rm   ro   )r   rÍ   rz   rM  rÁ  r   r   r   Útest_readfp_deprecationh  s   
þz2CoverageOneHundredTestCase.test_readfp_deprecationc                 C   s^   t jdd}t  dt¡ t ¡ }W d   ƒ n1 sw   Y  |D ]
}|  |jtu ¡ q"d S )NTr¹  r»  )r¼  r½  r¾  r¿  r9   ZSafeConfigParserr}   rÀ  )r   rM  rz   rÁ  r   r   r   Ú!test_safeconfigparser_deprecationv  s   
þÿz<CoverageOneHundredTestCase.test_safeconfigparser_deprecationc                 C   s*   t  ¡ }| d¡ |  t|d ƒd¡ d S )Nz7
            [section]
            key = value
        rN   z<Section: section>)r9   r,  r4   rm   Úreprr®  r   r   r   Útest_sectionproxy_repr}  s   
z1CoverageOneHundredTestCase.test_sectionproxy_reprc                 C   s’  t  ¡ }dd l}|j|jd< | d¡ |  d|j¡ |  | dd¡d¡ |  | dd¡d	¡ |  |d  d¡d¡ |  |d  d¡d	¡ |`|  	t
¡ | dd¡ W d   ƒ n1 s\w   Y  |  d|j¡ |jd= |  d|j¡ |  	t
¡ | dd¡ W d   ƒ n1 s‰w   Y  |  	t
¡ |d  d¡ W d   ƒ n1 s¥w   Y  |  	t
¡ |d  d¡ W d   ƒ d S 1 sÂw   Y  d S )
Nr   ÚdecimalzS
            [s1]
            one = 1
            [s2]
            two = 2
        Ús1r.  r   Ús2r/  r[  )r9   r,  rÉ  ÚDecimalÚ
convertersr4   r«  rm   Ú
getdecimalrv   r{   r  )r   rz   rÉ  r   r   r   Ú"test_inconsistent_converters_state…  s2   
ÿÿÿ"ÿz=CoverageOneHundredTestCase.test_inconsistent_converters_stateN)r   r   r   r™  r´  r¶  rÂ  rÄ  rÅ  rÆ  rÈ  rÏ  r   r   r   r   r±  0  s    
r±  c                   @   sh   e Zd 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S )ÚExceptionPicklingTestCasezBTests for issue #13760: ConfigParser exceptions are not picklable.c                 C   sd   dd l }t d¡}t|jd ƒD ]}| ||¡}| |¡}|  |j|j¡ |  t	|ƒt	|ƒ¡ qd S )Nr   rT   r   )
Úpickler9   ÚErrorrÕ   ÚHIGHEST_PROTOCOLÚdumpsÚloadsrm   ÚmessagerÇ  ©r   rÑ  Úe1ÚprotoZpickledÚe2r   r   r   Ú
test_error¥  s   

üz$ExceptionPicklingTestCase.test_errorc                 C   s„   dd l }t d¡}t|jd ƒD ]/}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  t|ƒt|ƒ¡ qd S )Nr   rN   r   )rÑ  r9   rw   rÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   rN   rÇ  r×  r   r   r   Útest_nosectionerror®  s   

úz-ExceptionPicklingTestCase.test_nosectionerrorc                 C   s–   dd l }t dd¡}t|jd ƒD ]7}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  t|ƒt|ƒ¡ qd S )Nr   r•   rN   r   )rÑ  r9   rx   rÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   rN   r•   rÇ  r×  r   r   r   Útest_nooptionerror¹  s   
ùz,ExceptionPicklingTestCase.test_nooptionerrorc                 C   ó¨   dd l }t ddd¡}t|jd ƒD ]?}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |j|j¡ |  t|ƒt|ƒ¡ qd S )Nr   rN   rÚ   r’   r   )rÑ  r9   rŽ   rÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   rN   rÚ   r²  rÇ  r×  r   r   r   Útest_duplicatesectionerrorÅ  ó   
øz4ExceptionPicklingTestCase.test_duplicatesectionerrorc                 C   sº   dd l }t dddd¡}t|jd ƒD ]G}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  t|ƒt|ƒ¡ qd S )Nr   rN   r•   rÚ   r’   r   )rÑ  r9   r‹   rÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   rN   r•   rÚ   r²  rÇ  r×  r   r   r   Útest_duplicateoptionerrorÒ  s   
ÿ
÷z3ExceptionPicklingTestCase.test_duplicateoptionerrorc                 C   ó˜   dd l }t ddd¡}t|jd ƒD ]7}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  t|ƒt|ƒ¡ qd S ©Nr   r•   rN   Úmsgr   )rÑ  r9   ZInterpolationErrorrÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   rN   r•   rÇ  r×  r   r   r   Útest_interpolationerrorá  ó   
ùz1ExceptionPicklingTestCase.test_interpolationerrorc                 C   sª   dd l }t dddd¡}t|jd ƒD ]?}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |j|j¡ |  t|ƒt|ƒ¡ qd S )Nr   r•   rN   rµ  r  r   )rÑ  r9   r  rÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   rN   r•   r  rÇ  r×  r   r   r   Ú$test_interpolationmissingoptionerrorí  s   ÿ
øz>ExceptionPicklingTestCase.test_interpolationmissingoptionerrorc                 C   râ  rã  )rÑ  r9   r}  rÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   rN   r•   rÇ  r×  r   r   r   Útest_interpolationsyntaxerrorû  ræ  z7ExceptionPicklingTestCase.test_interpolationsyntaxerrorc                 C   râ  )Nr   r•   rN   rµ  r   )rÑ  r9   r  rÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   rN   r•   rÇ  r×  r   r   r   Útest_interpolationdeptherror  s   ÿ
ùz6ExceptionPicklingTestCase.test_interpolationdeptherrorc                 C   sf  dd l }t d¡}| dd¡ | dd¡ | dd¡ t|jd ƒD ]7}| ||¡}| |¡}|  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |j|j¡ |  t|ƒt|ƒ¡ q"tjd	d
}| dd¡ | dd¡ | dd¡ t|jd ƒD ]7}| ||¡}| |¡}|  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |j|j¡ |  t|ƒt|ƒ¡ qyd S )Nr   rÚ   r   Zline1r[  Zline2r\  Zline3r·  r¸  )rÑ  r9   r¼   rj   rÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   rÚ   ÚerrorsrÇ  r×  r   r   r   Útest_parsingerror  s4   


ùz+ExceptionPicklingTestCase.test_parsingerrorc                 C   rÞ  )Nr   r·  r’   r¦  r   )rÑ  r9   r½   rÕ   rÓ  rÔ  rÕ  rm   rÖ  r‚   r¦  rÚ   r²  rÇ  r×  r   r   r   Útest_missingsectionheadererror/  rà  z8ExceptionPicklingTestCase.test_missingsectionheadererrorN)r   r   r   r™  rÛ  rÜ  rÝ  rß  rá  rå  rç  rè  ré  rë  rì  r   r   r   r   rÐ  ¢  s    	rÐ  c                   @   s   e Zd ZdZdd„ ZdS )ÚInlineCommentStrippingTestCasez}Tests for issue #14590: ConfigParser doesn't strip inline comment when
    delimiter occurs earlier without preceding space..c                 C   sÊ   t jdd}| d¡ |d }|  |d d¡ |  |d d¡ |  |d	 d
¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |d }|  |d d¡ |  |d d¡ |  |d	 d¡ d S )N)r$   r%   rB  )r*   aæ  
        [section]
        k1 = v1;still v1
        k2 = v2 ;a comment
        k3 = v3 ; also a comment
        k4 = v4;still v4 ;a comment
        k5 = v5;still v5 ; also a comment
        k6 = v6;still v6; and still v6 ;a comment
        k7 = v7;still v7; and still v7 ; also a comment

        [multiprefix]
        k1 = v1;still v1 #a comment ; yeah, pretty much
        k2 = v2 // this already is a comment ; continued
        k3 = v3;#//still v3# and still v3 ; a comment
        rN   Zk1zv1;still v1Zk2Zv2Zk3Zv3Zk4zv4;still v4Zk5zv5;still v5Zk6zv6;still v6; and still v6Zk7zv7;still v7; and still v7Zmultiprefixzv3;#//still v3# and still v3)r9   r,  r4   rm   )r   ÚcfgrP  r   r   r   Útest_strippingA  s   
z-InlineCommentStrippingTestCase.test_strippingN)r   r   r   r™  rï  r   r   r   r   rí  =  s    rí  c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚExceptionContextTestCasezO Test that implementation details doesn't leak
    through raising exceptions. c                 C   sb   t  ¡ }| d¡ |  t j¡}| | dd¡ W d   ƒ n1 s"w   Y  |  |jjd¡ d S )Nz„
        [Paths]
        home_dir: /Users
        my_dir: %(home_dir1)s/lumberjack
        my_pictures: %(my_dir)s/Pictures
        ÚPathsÚmy_dirT)	r9   r,  r4   rv   r  rq   ry   r   Ú__suppress_context__rÃ  r   r   r   Útest_get_basic_interpolatione  s   
ÿz5ExceptionContextTestCase.test_get_basic_interpolationc                 C   sj   t jt  ¡ d}| d¡ |  t j¡}| | dd¡ W d   ƒ n1 s&w   Y  |  |jj	d¡ d S )N)r/   z‚
        [Paths]
        home_dir: /Users
        my_dir: ${home_dir1}/lumberjack
        my_pictures: ${my_dir}/Pictures
        rñ  rò  T)
r9   r,  r  r4   rv   r  rq   ry   r   ró  rÃ  r   r   r   Útest_get_extended_interpolationr  s   ÿ
ÿz8ExceptionContextTestCase.test_get_extended_interpolationc                 C   s\   t  ¡ }| d¡ |  t j¡}| d¡ W d   ƒ n1 sw   Y  |  |jjd¡ d S )Nz2
        [Paths]
        home_dir: /Users
        r  T)	r9   r,  r4   rv   rw   r­   ry   r   ró  rÃ  r   r   r   Útest_missing_options€  s   
ÿz-ExceptionContextTestCase.test_missing_optionsc                 C   sV   t  ¡ }|  t j¡}| ddd¡ W d   ƒ n1 sw   Y  |  |jjd¡ d S )NÚSection1Úan_intZ15T)r9   r,  rv   rw   r¬   ry   r   ró  ©r   r˜   rˆ   r   r   r   Útest_missing_sectionŠ  s
   ÿz-ExceptionContextTestCase.test_missing_sectionc                 C   sT   t  ¡ }|  t j¡}| dd¡ W d   ƒ n1 sw   Y  |  |jjd¡ d S )Nr÷  rø  T)r9   r,  rv   rw   r€   ry   r   ró  rù  r   r   r   Útest_remove_option  s
   ÿz+ExceptionContextTestCase.test_remove_optionN)	r   r   r   r™  rô  rõ  rö  rú  rû  r   r   r   r   rð  a  s    
rð  c                       s0   e Zd ZdZejZd‡ fdd„	Zdd„ Z‡  Z	S )ÚConvertersTestCasez Introduced in 3.5, issue #18159.Nc                    s    t ƒ j|d}dd„ |jd< |S )Nr©   c                 S   r   )Nc                 S   s   g | ]
}|  ¡ r|  ¡ ‘qS r   )r;  )r   rÀ   r   r   r   r   ž  s    ÿzBConvertersTestCase.newconfig.<locals>.<lambda>.<locals>.<listcomp>)r  ©Úvr   r   r   ra  ž  s    z.ConvertersTestCase.newconfig.<locals>.<lambda>rn   )Úsuperr3   rÍ  )r   r&   r2   ©Ú	__class__r   r   r3   œ  s   zConvertersTestCase.newconfigc                 C   sŒ  |   ¡ }|  d|j¡ |  d|j¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |  t|jƒd¡ |  t¡ dd„ |jd< W d   ƒ n1 sRw   Y  |  t¡ d	d„ |jd < W d   ƒ n1 snw   Y  | 	d
¡ |d }|  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  | 
dd¡d¡ |  | 
dd¡d¡ |  | 
dd¡d¡ |  | 
dd¡d¡ |  | 
dd¡d¡ |  | 
dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡g d¢¡ |  | dd¡d¡ |  | 
d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡g d¢¡ |  | d¡d¡ |  t¡ | dd¡ W d   ƒ n	1 sPw   Y  |  t¡ | d¡ W d   ƒ n	1 skw   Y  dd l}|j|jd< |  d|j¡ |  |jd ¡ |  t|jƒd¡ | d¡}|  | dd¡|¡ |  | d¡|¡ |jd= |  d|j¡ |  t|jƒd¡ |  t¡ | dd¡ W d   ƒ n	1 sÕw   Y  |  t¡ | d¡ W d   ƒ n	1 sðw   Y  |  t¡ |jd= W d   ƒ n	1 s
w   Y  |  t¡ |jd= W d   ƒ n	1 s$w   Y  |  t¡ |jd = W d   ƒ d S 1 s?w   Y  d S )Nr[   rn   rW   rY   rŒ  c                 S   r`  r   r   rý  r   r   r   ra  ¬  rb  z4ConvertersTestCase.test_converters.<locals>.<lambda>r5  c                 S   r`  r   r   rý  r   r   r   ra  ®  rb  z~
        [s]
        str = string
        int = 1
        float = 0.5
        list = a b c d e f g
        bool = yes
        rP  rÜ   r5   rg   z0.5za b c d e f gÚboolre   r   g      à?)r›   r   ÚcÚdrÀ   rÄ   ÚgTr   rÉ  rÔ   )r3   r«  rÍ  r6  ÚassertIsNotNonerm   ro   rv   rƒ   r4   rq   rr   rt   Zgetlistru   r{   rÎ  rÉ  rÌ  r  r|   )r   rî  rP  rÉ  Zdec0_5r   r   r   Útest_converters¢  sˆ   ÿÿ
ÿÿ
ÿÿ
ÿ
ÿ
$ÿz"ConvertersTestCase.test_convertersr   )
r   r   r   r™  r9   r,  r1   r3   r  Ú__classcell__r   r   r   r   rü  —  s
    rü  c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú!BlatantOverrideConvertersTestCasez}What if somebody overrode a getboolean()? We want to make sure that in
    this case the automatic converters do not kick in.z¨
        [one]
        one = false
        two = false
        three = long story short

        [two]
        one = false
        two = false
        three = four
    c                 C   s:   t jdtid}| | j¡ |  |¡ |  |jd ¡ d S )Nro   )rÍ  )r9   r,  ro   r4   r˜   Ú	_test_lenr  rÍ  ©r   rî  r   r   r   Útest_converters_at_initù  s   
z9BlatantOverrideConvertersTestCase.test_converters_at_initc                 C   sÞ   G dd„ dt jƒ}|ƒ }| | j¡ |  |¡ |  |jd ¡ |  | dd¡¡ |  | dd¡¡ |  	| dd¡¡ |  	| dd¡¡ |j
|jd< |  	| dd¡¡ |  	| dd¡¡ |  	| dd¡¡ |  	| dd¡¡ d S )Nc                       s@   e Zd ZdZddejdœ‡ fdd„
Zddejdœdd„Z‡  ZS )	zOBlatantOverrideConvertersTestCase.test_inheritance.<locals>.StrangeConfigParserz0a historic borough in south central PennsylvaniaFN©rŠ  rc   ra   c                   s"   ||krdS t ƒ j|||||dS )NTr  )rÿ  ru   ©r   rN   r•   rŠ  rc   ra   r   r   r   ru     s
   ÿzZBlatantOverrideConvertersTestCase.test_inheritance.<locals>.StrangeConfigParser.getbooleanc                S   s   | j ||t|||dS )Nr  )Z	_get_convro   r  r   r   r   Úgetlen	  s   ÿzVBlatantOverrideConvertersTestCase.test_inheritance.<locals>.StrangeConfigParser.getlen)	r   r   r   Z
gettysburgr9   r;   ru   r  r  r   r   r   r   ÚStrangeConfigParser   s    ÿÿr  ro   r.  r/  r[   )r9   r,  r4   r˜   r
  r6  rÍ  r}   ru   r~   Ú_convert_to_boolean)r   r  rî  r   r   r   Útest_inheritanceÿ  s   
z2BlatantOverrideConvertersTestCase.test_inheritancec                 C   sê  |   t|jƒd¡ |  d|j¡ |  d|j¡ |  d|j¡ |  |jd ¡ |  |jd ¡ |  |jd ¡ |   | dd¡d¡ |   | dd	¡d¡ |   | dd
¡d¡ |   | d	d¡d¡ |   | d	d	¡d¡ |   | d	d
¡d¡ |   |jd	dddd¡ |  tj	¡ | d	d¡ W d   ƒ n1 s•w   Y  |   |d  d¡d¡ |   |d  d	¡d¡ |   |d  d
¡d¡ |   |d	  d¡d¡ |   |d	  d	¡d¡ |   |d	  d
¡d¡ |   |d	  dd¡d¡ |   |d	  d¡d ¡ d S )NrŒ  r[   ro   ZtysburgrW   rY   r.  rÔ   r/  r0  é   Zfourr   r`   )
rm   ro   rÍ  r«  r  r6  r  rv   r9   rx   r  r   r   r   r
    s2   ÿz+BlatantOverrideConvertersTestCase._test_lenc                    s&  t  ¡ ‰ dd„ ˆ _‡ fdd„ˆ _ˆ  | j¡ |  tˆ jƒd¡ |  	dˆ j¡ |  
dˆ j¡ |  ˆ jd ¡ |  ˆ jd ¡ |  ˆ jd ¡ |  ˆ  d	d	¡¡ |  ˆ  d
d
¡¡ |  ˆ  d	d
¡¡ |  ˆ  d
d	¡¡ ˆ jˆ jd< |  ˆ  d	d	¡¡ |  ˆ  d
d
¡¡ |  ˆ  d	d
¡¡ |  ˆ  d
d	¡¡ |  ˆ  d	d	¡d¡ |  ˆ  d	d
¡d¡ |  ˆ  d	d¡d¡ |  ˆ  d
d	¡d¡ |  ˆ  d
d
¡d¡ |  ˆ  d
d¡d¡ |  t¡ |  ˆ d	  d	¡d¡ W d   ƒ n1 sêw   Y  |  t¡ |  ˆ d
  d	¡d¡ W d   ƒ d S 1 sw   Y  d S )Nc                 S   s   dS )NTr   ©rN   r•   r   r   r   ra  8  rb  zLBlatantOverrideConvertersTestCase.test_instance_assignment.<locals>.<lambda>c                    s   t ˆ |  | ƒS r   )ro   r  ©rî  r   r   ra  9  rO   r\  r[   ro   rW   rY   r.  r/  rÔ   r0  r  rŒ  )r9   r,  ru   r  r4   r˜   rm   ro   rÍ  r«  r  r6  r}   r  r~   rv   r{   r
   r   r  r   Útest_instance_assignment6  s>   
ÿ$ÿz:BlatantOverrideConvertersTestCase.test_instance_assignmentN)	r   r   r   r™  r˜   r  r  r
  r  r   r   r   r   r	  é  s    r	  c                   @   s   e Zd Zdd„ ZdS )ÚMiscTestCasec                 C   s   t j| tdhd d S )NrÒ  )Znot_exported)r   Zcheck__all__r9   r
   r   r   r   Útest__all__Y  s   zMiscTestCase.test__all__N)r   r   r   r  r   r   r   r   r  X  s    r  Ú__main__).Úcollectionsr9   rÈ   rS  rñ   rŒ   Zunittestr¼  r  r   Ztest.supportr   ÚUserDictr   r!   r<   ZTestCaser
  r  r-  r<  r>  rG  rH  rY  rg  rh  rm  r€  r  r’  rš  rœ  rž  rŸ  r§  r¨  r±  rÐ  rí  rð  rü  r	  r  r   Úmainr   r   r   r   Ú<module>   sf    !      :b$3 ,-Sr $6Ro
ÿ