a
    äze´S ã                   @   st  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	 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 d/d0„ d0ejƒZ"G d1d2„ d2ejƒZ#G d3d4„ d4ejƒZ$G d5d6„ d6ejƒZ%G d7d8„ d8ejƒZ&G d9d:„ d:eejƒZ'G d;d<„ d<ejƒZ(G d=d>„ d>ejƒZ)e*d?krpe +¡  dS )@é    N)Úsupportc                   @   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   s   t | j ¡ ƒS ©N)ÚsortedÚdataÚitems©Úself© r
   ú,/usr/lib/python3.9/test/test_configparser.pyr      s    zSortedDict.itemsc                 C   s   t | j ¡ ƒS r   )r   r   Úkeysr   r
   r
   r   r      s    zSortedDict.keysc                 C   s   dd„ |   ¡ D ƒS )Nc                 S   s   g | ]}|d  ‘qS )é   r
   )Ú.0Úir
   r
   r   Ú
<listcomp>   ó    z%SortedDict.values.<locals>.<listcomp>)r   r   r
   r
   r   Úvalues   s    zSortedDict.valuesc                 C   s   t |  ¡ ƒS r   )Úiterr   r   r
   r
   r   Ú	iteritems   s    zSortedDict.iteritemsc                 C   s   t |  ¡ ƒS r   )r   r   r   r
   r
   r   Úiterkeys   s    zSortedDict.iterkeysc                 C   s   t |  ¡ ƒS r   )r   r   r   r
   r
   r   Ú
itervalues   s    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
f i |¤Ž}|S )N)
ÚdefaultsÚallow_no_valueÚ
delimitersÚcomment_prefixesÚinline_comment_prefixesÚempty_lines_in_valuesÚ	dict_typeÚstrictÚdefault_sectionÚinterpolation)Údictr!   r"   r#   r$   r%   r&   r'   r(   r)   Úconfig_class)r	   r    Z	argumentsÚinstancer
   r
   r   Ú	newconfig/   s    öz CfgParserTestCaseClass.newconfigc                 C   s   |   |¡}| |¡ |S r   )r-   Úread_string)r	   Ústringr    Úcfr
   r
   r   Ú
fromstring?   s    

z!CfgParserTestCaseClass.fromstring)N)N)r   r   r   r!   r"   r#   r$   r%   ÚconfigparserÚ_default_dictr&   r'   ZDEFAULTSECTr(   Ú_UNSETr)   r-   r1   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
ƒ qæ|| ¡ || 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!ƒ | 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 sˆ0    Y  |  tj¡ | dd&¡ W d   ƒ n1 sÂ0    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–0    Y  |  |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0    Y  ||jddd.d#dƒ ||jdd/d0d#d0ƒ ||jdd/d.d#d.ƒ |  tj¡ | dd/¡ W d   ƒ n1 s’0    Y  ||jd1dd.d#d.ƒ | j ræ||jdd"dd#d ƒ ||jdd2dd#dƒ ||d d	 d
ƒ ||d d	 dƒ |d }||j
dƒ |  |j|¡ |  t¡ d3|_
W d   ƒ n1 sT0    Y  |  t¡ d4|_W d   ƒ n1 s†0    Y  ||d	 dƒ ||d dƒ ||d d	 dƒ ||d d dƒ ||d d dƒ ||d d dƒ ||d5 d	 d6ƒ | 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 s˜0    Y  |  t¡ |d d&  W d   ƒ n1 sÐ0    Y  |  t¡" |d% jd	dd# W d   ƒ n1 s0    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º0    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,d-¡d-ƒ ||d jd,d-d#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 jd/d.d#d.ƒ ||d  d/¡d ƒ | j 
r
||d  d"d¡d ƒ ||d jd"dd#d ƒ ||d  d2d¡dƒ ||d jd2dd#dƒ d7|| j d8< d9|| j d:< |  | d¡¡ |  | dd¡¡ |  | d¡¡ |  | | j¡¡ |  | dd	¡d;¡ |  | dd	¡d<¡ |  | dd	¡d=¡ |  | dd8¡¡ |  | dd8¡¡ |  | | jd8¡¡ |  | dd8¡¡ |  | | jd8¡¡ |  tj¡}| d>d	¡ W d   ƒ n1 s40    Y  |  |jjd?¡ || d5d	¡d6ƒ |d= |  d|v ¡ |  t¡ |d= W d   ƒ n1 sœ0    Y  |  t ¡ || j= W d   ƒ n1 sÐ0    Y  |d d	= |  d	|d v ¡ |  t¡ |d d	= W d   ƒ n1 s"0    Y  |  d:|d v ¡ |  t¡ |d d:= W d   ƒ n1 sj0    Y  || j d:= |  d:|d v ¡ |  t¡ || j d:= W d   ƒ n1 sÀ0    Y  |  t¡ |d> d	= W d   ƒ n1 sö0    Y  d S )@N)	úCommented BarúFoo BarúInternationalized Stuffú	Long LineúSection\with$weird%characters[	ÚSpacesú
Spacey BarúSpacey Bar From The BeginningÚTypesÚNoValue)ÚbazÚqwe)ÚfooÚbar3r=   c                 S   s   g | ]}|‘qS r
   r
   ©r   Úsectionr
   r
   r   r   b   r   z,BasicTestCase.basic_test.<locals>.<listcomp>r7   rB   Úbar1r<   Úbar2rC   r@   rA   r6   Úbar4r;   úkey with spacesÚvalueúanother with spacesúsplat!r>   Úinté*   Z42Úfloatç)\Âõ(Ü?z0.44ÚbooleanFZ123ústrange but acceptableú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-onlyr9   ú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)r]   )!r!   ÚappendÚsortÚsectionsÚassertEqualr   r(   r   ÚlistÚlenÚnamer    ÚgetÚgetintÚassertAlmostEqualÚgetfloatÚ
getbooleanÚassertRaisesr2   ÚNoSectionErrorÚNoOptionErrorÚassertIsÚparserÚAttributeErrorÚKeyErrorÚ
assertTrueZremove_sectionÚassertFalseÚ
has_optionÚremove_optionÚ	exceptionÚargsÚ
ValueError)	r	   r0   ÚEÚFÚLÚeqrd   rE   Úcmr
   r
   r   Ú
basic_testG   sœ   





,,,ÿÿÿÿ,ÿ,
ÿÿ&&ÿ,,20ÿÿÿÿÿÿÿÿÿÿ,ÿ&(
**,zBasicTestCase.basic_testc                 C   sö   d  | j| j¡}| jr|d7 }|  |¡}|  |¡ | jrÂ|  tj	¡( | 
t d  | j¡¡¡ W d   ƒ n1 sr0    Y  |  tj¡( | 
t d  | j¡¡¡ W d   ƒ qò1 s¶0    Y  n0| 
t d  | j¡¡¡ | 
t d  | j¡¡¡ d S )NaI  [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
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!   r1   r}   r'   rj   r2   ÚDuplicateOptionErrorr.   ÚtextwrapÚdedentÚDuplicateSectionError©r	   Úconfig_stringr0   r
   r
   r   Ú
test_basic%  s0    äÿ

ü&û(üûzBasicTestCase.test_basicc                 C   s>  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œ	}| j rb| ddd ii¡ |  ¡ }| |¡ |  |¡ | jr|  tj¡( | ddiddidœ¡ W d   ƒ n1 sÀ0    Y  |  tj	¡$ | dddd œi¡ W d   ƒ n1 s0    Y  n,| ddiddid!œ¡ | dddd œi¡ d S )"NrB   rF   rG   rC   rA   )rB   r@   rH   rZ   Z	BulgarianZDefaultZEnglishZDeutsch)zfoo[bg]rB   zfoo[en]zfoo[de]rJ   rL   )rI   rK   rN   rP   FrR   )rM   rO   rQ   é{   )	r7   r<   r=   r6   r9   r:   r8   r;   r>   r?   rS   ÚkeyZkey2Úvalue2)r[   r   zDuplicate Options Herezwith a valuezwith another value)ÚoptionZOPTION)rE   ZSECTION)
r!   Úupdater-   Ú	read_dictr}   r'   rj   r2   r‚   r   )r	   Úconfigr0   r
   r
   r   Útest_basic_from_dictf  sv    ÿÿþþÿüþüá&ÿÿ

þ&þÿ(þþÿ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 s®0    Y  |  | dd¡¡ |  | dd¡¡ | ddd	¡ d
D ]}|  | d|¡d¡ qî|| 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   rJ   Ú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    rE   ÚKey)r-   Úadd_sectionr`   r_   ra   ÚsetÚoptionsre   rj   r2   rk   rq   rs   rr   rt   r1   r~   r"   )r	   r0   rz   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 s²0    Y  |  	d|d v ¡ d	|d d
< dD ]}|  	||d v d¡ qÞ||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   rJ   r   c                 S   s   g | ]}|‘qS r
   r
   rD   r
   r
   r   r   Þ  r   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ž   rE   )r-   r_   ra   ZassertCountEqualr   r(   r   rj   rp   rq   r1   r~   r"   )r	   r0   rz   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 )NrB   ÚBarÚFoor’   z<could not locate option, expecting case-insensitive defaults)r-   ra   re   r(   ©r	   r0   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rªtj}|f}ntj}|dd
f}t|dd}|  |||¡}W d   ƒ n1 sê0    Y  |  |j|¡ 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)r-   Úparse_errorr2   ÚParsingErrorr~   r"   ÚMissingSectionHeaderErrorra   rv   r!   r   ÚfindfileÚopen)r	   r0   ÚeÚtrickyÚerrorÚexpectedÚfr
   r
   r   Útest_parse_errors  s>    
ÿÿ
ÿÿ
ÿ
ÿ
ÿ,zBasicTestCase.test_parse_errorsc                 C   sT   t |dƒr|}n
t |¡}|  |¡}| |¡ W d   ƒ n1 sD0    Y  |jS )NÚreadline)ÚhasattrÚioÚStringIOrj   Ú	read_fileru   )r	   r0   Ú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 sX0    Y  |  tj¡ | 	ddd¡ W d   ƒ n1 s’0    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 sectionsrB   ÚbarrJ   )rB   )rÂ   rB   )r-   ra   r`   rr   Zhas_sectionrj   r2   rk   r¡   r    Ú	get_errorrv   rŸ   rl   ©r	   r0   r´   r
   r
   r   Útest_query_errors0  s     ÿÿ(,
zBasicTestCase.test_query_errorsc              
   C   sT   z|  ||¡ W n( |y8 } z|W  Y d }~S d }~0 0 |  d|j|jf ¡ d S )Nzexpected exception type %s.%s)re   Zfailr   r   )r	   r0   r¿   rE   r‰   r´   r
   r
   r   rÃ   A  s    
ÿzBasicTestCase.get_errorc                 C   sn   |   dj| jd d¡}tddƒD ]F}|  | 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)	r1   r~   r"   Úrangerq   ri   rr   rj   rw   )r	   r0   Úxr
   r
   r   Útest_booleanJ  s    ñÿÿzBasicTestCase.test_booleanc                 C   sP  |   ¡ }| d¡ |  tj¡}| d¡ W d   ƒ n1 s>0    Y  |j}|  t|ƒd¡ |  |jd¡ | j	rL|  tj¡2}|j
t dj| jd d¡dd W d   ƒ n1 s¸0    Y  |j}|  t|ƒd	¡ |  |jd
¡ |  tj¡$}| ddddœi¡ W d   ƒ n1 s0    Y  |j}|  t|ƒd¡ |  |jd¡ 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)r-   rŸ   rj   r2   r‚   ru   ra   Ústrrv   r'   r.   r€   r   r~   r"   r   r‹   )r	   r0   r|   r´   r
   r
   r   Útest_weird_errorsc  s,    
(ùù$4zBasicTestCase.test_weird_errorsc                 C   sœ   dj | j| jd | jd}| jr(|d7 }|  |¡}dD ]`}t ¡ }|j||d | jd }|rhd  |¡}dj || jd	}| jr†|d
7 }|  	| 
¡ |¡ q6d 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!   r1   r¼   r½   Úwritera   Úgetvalue)r	   r„   r0   rÒ   ÚoutputÚ	delimiterZexpect_stringr
   r
   r   Ú
test_write‚  s4    ôÿÿ


òÿÿ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)r1   r~   r"   rÐ   r    )r	   r0   rÚ   r
   r
   r   Útest_set_string_types¸  s    ÿz#BasicTestCase.test_set_string_typesc                 C   sJ  | j d dkr|  d¡ t d¡}|  ¡ }| |dg¡}|  ||g¡ |  | dd¡d¡ |  ¡ }| |¡}|  ||g¡ |  | dd¡d¡ |  ¡ }| t 	|¡¡}|  ||g¡ |  | dd¡d¡ |  ¡ }| t 	|¡|g¡}|  |||g¡ |  | dd¡d¡ |  ¡ }| dg¡}|  |g ¡ |  ¡ }| g ¡}|  |g ¡ d S )	Nr   r   úincompatible formatúcfgparser.1únonexistent-filer7   rB   Únewbar)
r"   ÚskipTestr   r²   r-   Úreadra   re   ÚpathlibÚPath)r	   Zfile1r0   Ú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¡ ¡ }|  ¡ }| |¡}|  ||g¡ |  ¡ }| d¡}|  |g ¡ |  ¡ }| |dg¡}|  ||g¡ d S )Nr   r   rß   rà   s   nonexistent-file)r"   rã   r   r²   Úencoder-   rä   ra   )r	   Zfile1_bytestringr0   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Æ   )r1   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   ƒ n1 sp0    Y  d S )	Nz
            [section]
            name {0[0]} %(value)s
            key{0[1]} |%(name)s|
            getdefault{0[1]} |%(default)s|
        Údefaultú	<default>r   rE   rJ   rV   zno such section)
r1   r~   r"   rb   r   r_   ra   rj   r2   rk   )r	   r·   r0   rz   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   ƒ n1 s~0    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)r1   r~   r"   ra   Úpopitemrj   rp   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 )
NrB   r¥   r¦   r’   Úvalue1rˆ   )rÜ   rÝ   Zzing>   rÜ   rÝ   rB   )r-   ra   re   r(   r`   r    r   Úclearr§   r
   r
   r   Ú
test_clear0  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)
r1   r~   r"   ra   r    r   r`   ÚassertNotInr(   ZassertNotEqualr§   r
   r
   r   Útest_setitem<  s>    ùù
zBasicTestCase.test_setitemc                 C   s   | j r|  d¡ t d | jd ¡¡}|  ¡ }|  tj	¡ | 
|¡ W d   ƒ n1 sZ0    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"   r-   rj   r2   r°   r.   ra   re   )r	   Úinvalidr0   r
   r
   r   Útest_invalid_multiline_valueb  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   r5   E   s.    _AI*(
		6!&r5   c                   @   s   e Zd ZejZdZdS )ÚStrictTestCaseTN)r   r   r   r2   ÚRawConfigParserr+   r'   r
   r
   r
   r   rþ   r  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rr|  |jd	¡ nt	| jtj
ƒrŽ|  |jd	¡ 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ë   ra   re   rÃ   r2   ÚInterpolationDepthErrorr)   r4   rv   Ú
isinstanceÚLegacyInterpolation)r	   r0   r{   r´   r
   r
   r   Útest_interpolationz  s    ÿÿz'ConfigParserTestCase.test_interpolationc                 C   s€   |   ¡ }|  |tjdd¡}|  |jd¡ |  |jd¡ |  |jd¡ | jtj	kr`|  |j
d¡ nt| jtjƒr||  |j
d¡ d S )NúInterpolation Errorrd   Ú	reference)rd   r	  z%(reference)sr
  )rë   rÃ   r2   ÚInterpolationMissingOptionErrorra   r
  rE   r‰   r)   r4   rv   r  r  rÄ   r
   r
   r   Ú test_interpolation_missing_valueŠ  s    
ÿz5ConfigParserTestCase.test_interpolation_missing_valuec                 C   s   |   g d¢¡ d S )N)©rì   rí   )Ú
getdefaultz|<default>|)r‡   z|value|)rd   rJ   ©rî   r   r
   r
   r   Ú
test_items˜  s    zConfigParserTestCase.test_itemsc                 C   s–   |   dj| jd d¡}|  | dd¡d¡ | jtjkrN|  | dd¡d¡ nDt| jtj	ƒr’|  
t¡ | dd¡ W d   ƒ n1 sˆ0    Y  d S )	Nzc[section]
option1{eq}xxx
option2{eq}%(option1)s/xxx
ok{eq}%(option1)s/%%s
not_ok{eq}%(option2)s/%%sr   rÙ   rE   Úokzxxx/%sZnot_okz
xxx/xxx/%s)r1   r~   r"   ra   re   r)   r2   r4   r  r  rj   Ú	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Ü   rB   ú%fooúfoo%úf%oorÝ   úfoo%%barzfoo%bar)r1   r~   r"   ra   re   rj   rw   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!)r1   r~   r"   rj   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   )r-   rj   rw   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   r[   z2.4rŽ   çÍÌÌÌÌÌ@r   z5.2N)r-   ra   r(   rg   rh   r§   r
   r
   r   Útest_defaults_keywordÏ  s    z*ConfigParserTestCase.test_defaults_keywordN)r   r   r   r2   ÚConfigParserr+   r  r  r  r  r  r  r  r  r
   r
   r
   r   r   w  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Úoner[   Útwoz%(one)s * 2Úthreez${common:one} * 3ZhexenZsixteenz${numbers:two} * 8)ra   r§   r
   r
   r   ÚassertMatchesIniæ  s    z4ConfigParserTestCaseNoInterpolation.assertMatchesInic                 C   s   |   | j¡}|  |¡ d S r   )r1   Úinir$  r§   r
   r
   r   Útest_no_interpolationì  s    z9ConfigParserTestCaseNoInterpolation.test_no_interpolationc                 C   s   |   ¡ }|  | d¡¡ d S ©NÚ )r-   ÚassertIsNoner.   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õ  s   r+  )r2   r  r.   r%  r$  )r	   r+  r0   r
   r
   r   Ú"test_none_as_default_interpolationô  s    zFConfigParserTestCaseNoInterpolation.test_none_as_default_interpolation)r   r   r   r2   r  r+   r)   r€   r   Ústripr%  r$  r&  r*  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Ü   rB   r  r  r  rÝ   r  )r1   r~   r"   ra   re   r    r§   r
   r
   r   r    s    ÿzKConfigParserTestCaseLegacyInterpolation.test_set_malformatted_interpolationN)	r   r   r   r2   r  r+   r  r)   r  r
   r
   r
   r   r.  ý  s   r.  c                   @   s   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/    s   r/  c                   @   s   e Zd ZdZdS )Ú-ConfigParserTestCaseNonStandardDefaultSectionZgeneralN)r   r   r   r(   r
   r
   r
   r   r6    s   r6  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¡ q0qttjdƒ}| 	|¡ W d   ƒ n1 sz0    Y  d S )Néd   z	section{}é
   zlovely_spam{}Úw)
r-   rÉ   r~   rŸ   r    Úwonderful_spamr³   r   ÚTESTFNrÓ   )r	   r0   r   ÚsÚjr¸   r
   r
   r   ÚsetUp#  s    

zMultilineValuesTestCase.setUpc                 C   s   t  tj¡ d S r   )ÚosÚunlinkr   r>  r   r
   r
   r   ÚtearDown-  s    z MultilineValuesTestCase.tearDownc                 C   s^   |   ¡ }ttjƒ}| |¡ W d   ƒ n1 s20    Y  |  | dd¡| j dd¡¡ d S )NZsection8Zlovely_spam4r9  Ú
)	r-   r³   r   r>  r¾   ra   re   r=  Úreplace)r	   Zcf_from_filer¸   r
   r
   r   Ú test_dominating_multiline_values0  s    (ÿz8MultilineValuesTestCase.test_dominating_multiline_valuesN)r   r   r   r2   r  r+   rF  r=  rA  rD  rG  r
   r
   r
   r   r7    s   þ
r7  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ë   ra   re   ©r	   r0   r{   r
   r
   r   r  =  s    ÿÿÿÿz*RawConfigParserTestCase.test_interpolationc                 C   s   |   g d¢¡ d S )N)r  )r  z|%(default)s|)r‡   z
|%(name)s|)rd   z	%(value)sr  r   r
   r
   r   r  I  s    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 rìdd„ |_| ddd¡ |  | dd¡d¡ d S )Nz
non-stringrM   r   rb   )r   r   r   é   é   rÈ   é   é   r*   Úpign†ðù!	@r†   zthis is sickTc                 S   s   | S r   r
   )rÊ   r
   r
   r   Ú<lambda>_  r   zBRawConfigParserTestCase.test_set_nonstring_types.<locals>.<lambda>)	r-   rŸ   r    ra   re   Ú_dictr2   r3   Úoptionxformr§   r
   r
   r   r  O  s"    
ÿ

z0RawConfigParserTestCase.test_set_nonstring_typesc                 C   sz   |   t¡ }| jddid W d  ƒ n1 s00    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   )rj   ro   r-   ru   ra   rÐ   rg   r(   )r	   ÚctxÚerrr0   r
   r
   r   r  c  s    .z-RawConfigParserTestCase.test_defaults_keywordN)
r   r   r   r2   rÿ   r+   r  r  r  r  r
   r
   r
   r   rH  :  s
   rH  c                   @   s   e Zd ZdZdZdZdS )Ú,RawConfigParserTestCaseNonStandardDelimitersr0  r2  Nr5  r
   r
   r
   r   rT  m  s   rT  c                   @   s&   e Zd ZejZdZdZdZdd„ Z	dS )ÚRawConfigParserTestSambaConf)r   r   z----)r3  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AgustinrV  Z	workgroupZMDKGROUPzmax log sizeé2   zhosts allowz127.rW  zecho commandzcat %s; rm %s)r   r²   r-   rä   ra   r`   re   rf   )r	   Zsmbconfr0   rç   r`   r
   r
   r   Útest_readingy  s    
z)RawConfigParserTestSambaConf.test_readingN)
r   r   r   r2   rÿ   r+   r#   r$   r%   rY  r
   r
   r
   r   rU  s  s
   rU  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   )r-   rQ  r.   )r	   r/   r    rQ  r0   r
   r
   r   r1     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}
        r[  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)r1   r€   r   r-  ra   rI  r
   r
   r   Útest_extended_interpolation”  s*    ÿzEConfigParserTestCaseExtendedInterpolation.test_extended_interpolationc                 C   sˆ   |   t d¡ ¡ ¡}|  tj¡ |d d  W d   ƒ n1 sB0    Y  |  tj¡ |d d  W d   ƒ n1 sz0    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)r1   r€   r   r-  rj   r2   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 sx0    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:${sickrJ  z${dollars:${sick}})r1   ra   r2   r  rj   ru   r
  rv   )r	   r0   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
        r[  ZoptionlowerrJ   ZOptionUpperÚValueÚCommonúa better valueúA Better ValueÚrandomZfoolowerúvalue redefinedZFooUpperúA Better Value Redefined)r€   r   r-  r1   ra   ©r	   r%  r0   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:0    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   s   | S r   r
   )r¢   r
   r
   r   rO    r   z[ConfigParserTestCaseExtendedInterpolation.test_case_sensitivity_conflicts.<locals>.<lambda>)rQ  r[  r‰   rJ   rš   r`  ra  rb  rc  rd  rB   re  r¦   rf  )r€   r   r-  rj   r2   r   r1   ra   rg  r
   r
   r   Útest_case_sensitivity_conflictsÿ  s    (zIConfigParserTestCaseExtendedInterpolation.test_case_sensitivity_conflictsc                 C   s`  |   d¡}|  tj¡ |d d  W d   ƒ n1 s80    Y  |  tj¡ |d d  W d   ƒ n1 sp0    Y  |  tj¡ |d d  W d   ƒ n1 s¨0    Y  |  tj¡ |d d  W d   ƒ n1 sà0    Y  |  tj¡ |d d  W d   ƒ n1 s0    Y  |  t¡ d|d d	< W d   ƒ n1 sR0    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)r1   rj   r2   ÚInterpolationSyntaxErrorr  rw   r§   r
   r
   r   Útest_other_errors  s    
	****,z;ConfigParserTestCaseExtendedInterpolation.test_other_errors)NN)r   r   r   r2   r  r+   ÚExtendedInterpolationr)   r(   r'   r1   r\  r^  r_  rh  ri  rk  r
   r
   r
   r   rZ  ‡  s   
-rZ  c                   @   s   e Zd ZdZdS )ÚConfigParserTestCaseNoValueTN)r   r   r   r!   r
   r
   r
   r   rm  2  s   rm  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 s–0    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 sJ0    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-1rV   éÿÿÿÿT)ÚrawrW   ro  ÚotherrE  é   rp  rJ   r;  rq  zare they subsectionszlets use some Unicodeu	   ç‰‡ä»®årr  rÈ   rs  rt  Zletszdo thisru  zgo shopping)r   r²   r-   ra   rc   rä   r`   rf   r(   rj   rw   re   Úsplitrr   ri   r   r2   r  )r	   rµ   r0   Zlongnamer
   r
   r   Útest_cfgparser_dot_3<  s4    
ÿÿÿ$*
ÿz3ConfigParserTestCaseTrickyFile.test_cfgparser_dot_3c                 C   sN   t  d¡}|  ¡ }|  t¡ |j|dd W d   ƒ n1 s@0    Y  d S )Nr«   Úasciir­   )r   r²   r-   rj   ÚUnicodeDecodeErrorrä   )r	   rµ   r0   r
   r
   r   Útest_unicode_failure\  s    
z3ConfigParserTestCaseTrickyFile.test_unicode_failureN)r   r   r   r2   r  r+   r"   r#   r!   r{  r~  r
   r
   r
   r   rn  6  s    rn  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!   rE   r‰   )rŸ   r    r¼   r½   rÓ   rÔ   )r	   r+   ÚcprÁ   r
   r
   r   Úpreparel  s    


zIssue7005TestCase.preparec                 C   sR   t jdd}| d¡ |  t¡ | ddd ¡ W d   ƒ n1 sD0    Y  d S r€  )r2   r  rŸ   rj   r  r    )r	   r  r
   r
   r   Útest_none_as_value_stringifiedu  s    
z0Issue7005TestCase.test_none_as_value_stringifiedc                 C   s   |   tj¡}|  || j¡ d S r   )r‚  r2   rÿ   ra   Ú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  c  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

)r1   r¼   r½   rÓ   ra   rÔ   )r	   r0   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
        r6   rB   zbar # not a comment!r@   rA   Zquirkzthis;is not a comment)r€   r   r1   ra   re   rƒ   r
   r
   r   Útest_comment_handlingœ  s    
	
ÿÿz(CompatibleTestCase.test_comment_handlingN)	r   r   r   r2   rÿ   r+   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rN||= qNq.|S r   )r-   r.   r‹   r   rd   r(   r   )r	   r/   r    r0   Zcf_copyrE   rì   rJ   r
   r
   r   r1   °  s    



zCopyTestCase.fromstring)N)r   r   r   r2   r  r+   r1   r
   r
   r
   r   r‹  ­  s   r‹  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFakeFilec                 C   sJ   t  d¡}t|ƒ$}| ¡ | _| j ¡  W d   ƒ n1 s<0    Y  d S )Nrà   )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 r'  )rc   rŽ  Úpopr   r
   r
   r   rº   Ç  s    

zFakeFile.readlineN)r   r   r   r‘  rº   r
   r
   r
   r   rŒ  À  s   rŒ  c                 c   s    |   ¡ }|r|V  |   ¡ }q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y6   Y n0 |D ]n}t ¡ }t|ƒ}| |¡ W d   ƒ n1 sp0    Y  |  	d|¡ |  	d|d ¡ |  
|d d d¡ q<d S )Nrà   r   Úutf8r7   rB   râ   )r   r²   r^   ré   ÚUnicodeEncodeErrorr2   r  r³   r¾   ÚassertInra   )r	   Z
file_pathsr  rn   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=newbarrE  r7   rB   râ   )	r€   r   r-  rz  r2   r  r¾   r˜  ra   )r	   rŽ  rn   r
   r
   r   Útest_iterableä  s    þ
zReadFileTestCase.test_iterablec                 C   s‚   t  ¡ }|  t¡ | tƒ ¡ W d  ƒ n1 s40    Y  | ttƒ ƒ¡ |  d|¡ |  d|d ¡ |  |d d d¡ dS )zIssue #11670.Nr7   rB   râ   )	r2   r  rj   r  r¾   rŒ  r”  r˜  ra   ©r	   rn   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 sL0    Y  |  	t
|jƒd¡ t  d¡ ¡  d¡}t ¡ }|  tj¡}|j|dd W d  ƒ n1 s´0    Y  |  	t
|jƒd¡ t  d	¡ ¡  d¡}t ¡ }|  tj¡}|j|dd W d  ƒ n1 s0    Y  |  	t
|jƒd
¡ t  d¡ ¡  d¡}t ¡ }|  tj¡}|j|dd W d  ƒ n1 sˆ0    Y  |  	t
|jƒd¡ dS )zIssue #18260.z"
        [badbad]
        [badbad]rE  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-  rz  r2   r  rj   r‚   r¾   ra   rÐ   ru   r   r°   r±   )r	   rŽ  rn   Zdser
   r
   r   Útest_source_as_bytesø  sP    þ,þý,þþ.þþ.þ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 )NrE   r‰   )rE   r‰   NNz3Option 'option' in section 'section' already exists)	r2   r   ra   rE   r‰   rÎ   Úlinenorv   rÐ   ©r	   r¶   r
   r
   r   Útest_duplicate_option_error+  s    z6CoverageOneHundredTestCase.test_duplicate_option_errorc                 C   s<   t  ddd¡}|  |jd¡ |  |jd¡ |  |jd¡ d S )Nr‰   rE   Úrawval)r‰   rE   r¢  )r2   r  ra   rv   r‰   rE   r   r
   r
   r   Útest_interpolation_depth_error5  s    ÿz9CoverageOneHundredTestCase.test_interpolation_depth_errorc                 C   s"  |   t¡}t ¡  W d   ƒ n1 s(0    Y  |  t|jƒd¡ |   t¡}tjddd W d   ƒ n1 sr0    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ø0    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)rj   rw   r2   r°   ra   rÐ   ru   rÎ   ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningr¤  rq   Úcategory)r	   r|   r¶   r<  Úwarningr
   r
   r   Útest_parsing_error<  s    &,,z-CoverageOneHundredTestCase.test_parsing_errorc                 C   sª   t  ¡ }| d¡ |  t j¡}|d d  W d   ƒ n1 s@0    Y  |  t|jƒd¡ |  t j¡}|d d  W d   ƒ n1 sŠ0    Y  |  t|jƒd¡ d S )Nz–
            [section]
            invalid_percent = %
            invalid_reference = %(()
            invalid_variable = %(does_not_exist)s
        rE   Zinvalid_percentz.'%' must be followed by '%' or '(', found: '%'Zinvalid_referencez+bad interpolation variable reference '%(()')r2   r  r.   rj   rj  ra   rÐ   ru   ©r	   rn   r|   r
   r
   r   Útest_interpolation_validationO  s    
**z8CoverageOneHundredTestCase.test_interpolation_validationc                 C   sš   t  d¡}t ¡ }tjdd*}t dt¡ |j|dd W d   ƒ n1 sN0    Y  |D ]}|  	|j
tu ¡ q\|  t|ƒd¡ |  |d d	 d
¡ d S )Nz2
        [section]
        option = value
        Tr¦  r¨  r½   r¥  rJ  rE   r‰   rJ   )r¼   r½   r2   r  r©  rª  r«  r¬  Zreadfprq   r­  ra   rc   )r	   rÁ   rn   r<  r®  r
   r
   r   Útest_readfp_deprecation`  s    
,z2CoverageOneHundredTestCase.test_readfp_deprecationc                 C   s^   t jdd$}t  dt¡ t ¡ }W d   ƒ n1 s60    Y  |D ]}|  |jtu ¡ qDd S )NTr¦  r¨  )r©  rª  r«  r¬  r2   ZSafeConfigParserrq   r­  )r	   r<  rn   r®  r
   r
   r   Ú!test_safeconfigparser_deprecationn  s
    &z<CoverageOneHundredTestCase.test_safeconfigparser_deprecationc                 C   s*   t  ¡ }| d¡ |  t|d ƒd¡ d S )Nz7
            [section]
            key = value
        rE   z<Section: section>)r2   r  r.   ra   Úreprr›  r
   r
   r   Útest_sectionproxy_repru  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¸0    Y  |  d|j¡ |jd= |  d|j¡ |  	t
¡ | dd¡ W d   ƒ n1 s0    Y  |  	t
¡ |d  d¡ W d   ƒ n1 sN0    Y  |  	t
¡ |d  d¡ W d   ƒ n1 sˆ0    Y  d S )
Nr   ÚdecimalzS
            [s1]
            one = 1
            [s2]
            two = 2
        Ús1r!  r   Ús2r"  rJ  )r2   r  r¶  ÚDecimalÚ
convertersr.   r˜  ra   Ú
getdecimalrj   ro   rù   )r	   rn   r¶  r
   r
   r   Ú"test_inconsistent_converters_state}  s*    
*,.z=CoverageOneHundredTestCase.test_inconsistent_converters_stateN)r   r   r   r†  r¡  r£  r¯  r±  r²  r³  rµ  r¼  r
   r
   r
   r   rž  (  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   rJ   r   )
Úpickler2   ÚErrorrÉ   ÚHIGHEST_PROTOCOLÚdumpsÚloadsra   Ú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   rE   r   )r¾  r2   rk   rÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   rE   r´  rÄ  r
   r
   r   Útest_nosectionerror¦  s    

z-ExceptionPicklingTestCase.test_nosectionerrorc                 C   s–   dd l }t dd¡}t|jd ƒD ]n}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  t|ƒt|ƒ¡ q"d S )Nr   r‰   rE   r   )r¾  r2   rl   rÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   rE   r‰   r´  rÄ  r
   r
   r   Útest_nooptionerror±  s    
z,ExceptionPicklingTestCase.test_nooptionerrorc                 C   s¨   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   rE   rÎ   r†   r   )r¾  r2   r‚   rÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   rE   rÎ   rŸ  r´  rÄ  r
   r
   r   Útest_duplicatesectionerror½  s    
z4ExceptionPicklingTestCase.test_duplicatesectionerrorc                 C   sº   dd l }t dddd¡}t|jd ƒD ]Ž}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  t|ƒt|ƒ¡ q&d S )Nr   rE   r‰   rÎ   r†   r   )r¾  r2   r   rÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   rE   r‰   rÎ   rŸ  r´  rÄ  r
   r
   r   Útest_duplicateoptionerrorÊ  s    
ÿ
z3ExceptionPicklingTestCase.test_duplicateoptionerrorc                 C   s˜   dd l }t ddd¡}t|jd ƒD ]n}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  t|ƒt|ƒ¡ q$d S ©Nr   r‰   rE   Úmsgr   )r¾  r2   ZInterpolationErrorrÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   rE   r‰   r´  rÄ  r
   r
   r   Útest_interpolationerrorÙ  s    
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‰   rE   r¢  r
  r   )r¾  r2   r  rÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   rE   r‰   r
  r´  rÄ  r
   r
   r   Ú$test_interpolationmissingoptionerrorå  s    ÿ
z>ExceptionPicklingTestCase.test_interpolationmissingoptionerrorc                 C   s˜   dd l }t ddd¡}t|jd ƒD ]n}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  t|ƒt|ƒ¡ q$d S rÍ  )r¾  r2   rj  rÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   rE   r‰   r´  rÄ  r
   r
   r   Útest_interpolationsyntaxerroró  s    
z7ExceptionPicklingTestCase.test_interpolationsyntaxerrorc                 C   s˜   dd l }t ddd¡}t|jd ƒD ]n}| ||¡}| |¡}|  |j|j¡ |  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  t|ƒt|ƒ¡ q$d S )Nr   r‰   rE   r¢  r   )r¾  r2   r  rÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   rE   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 ]n}| ||¡}| |¡}|  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |j|j¡ |  t|ƒt|ƒ¡ qDtjd	d
}| dd¡ | dd¡ | dd¡ t|jd ƒD ]n}| ||¡}| |¡}|  |j	|j	¡ |  |j
|j
¡ |  |j|j¡ |  |j|j¡ |  t|ƒt|ƒ¡ qòd S )Nr   rÎ   r   Zline1rJ  Zline2rK  Zline3r¤  r¥  )r¾  r2   r°   r^   rÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   rÎ   Úerrorsr´  rÄ  r
   r
   r   Útest_parsingerror  s2    


z+ExceptionPicklingTestCase.test_parsingerrorc                 C   s¨   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   r¤  r†   r“  r   )r¾  r2   r±   rÉ   rÀ  rÁ  rÂ  ra   rÃ  rv   r“  rÎ   rŸ  r´  rÄ  r
   r
   r   Útest_missingsectionheadererror'  s    
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   r3  )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
        rE   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)r2   r  r.   ra   )r	   Úcfgr?  r
   r
   r   Útest_stripping9  s    
z-InlineCommentStrippingTestCase.test_strippingN)r   r   r   r†  rØ  r
   r
   r
   r   rÖ  5  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 sD0    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)	r2   r  r.   rj   r  re   rm   ru   Ú__suppress_context__r°  r
   r
   r   Útest_get_basic_interpolation]  s    
*z5ExceptionContextTestCase.test_get_basic_interpolationc                 C   sj   t jt  ¡ d}| d¡ |  t j¡}| | dd¡ W d   ƒ n1 sL0    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)
r2   r  rl  r.   rj   r  re   rm   ru   rÜ  r°  r
   r
   r   Útest_get_extended_interpolationj  s    ÿ
*z8ExceptionContextTestCase.test_get_extended_interpolationc                 C   s\   t  ¡ }| d¡ |  t j¡}| d¡ W d   ƒ n1 s>0    Y  |  |jjd¡ d S )Nz2
        [Paths]
        home_dir: /Users
        rû   T)	r2   r  r.   rj   rk   r¡   rm   ru   rÜ  r°  r
   r
   r   Útest_missing_optionsx  s
    
(z-ExceptionContextTestCase.test_missing_optionsc                 C   sV   t  ¡ }|  t j¡}| ddd¡ W d   ƒ n1 s80    Y  |  |jjd¡ d S )NÚSection1Úan_intZ15T)r2   r  rj   rk   r    rm   ru   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 s60    Y  |  |jjd¡ d S )Nrà  rá  T)r2   r  rj   rk   rt   rm   ru   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Ù  Y  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   s   dd„ |   ¡ D ƒS )Nc                 S   s   g | ]}|  ¡ r|  ¡ ‘qS r
   )r-  )r   r´   r
   r
   r   r   –  s   ÿzBConvertersTestCase.newconfig.<locals>.<lambda>.<locals>.<listcomp>)rz  ©Úvr
   r
   r   rO  –  r   z.ConvertersTestCase.newconfig.<locals>.<lambda>rb   )Úsuperr-   rº  )r	   r    r,   ©Ú	__class__r
   r   r-   ”  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 s¤0    Y  |  t¡ d	d„ |jd < W d   ƒ n1 sÜ0    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 s 0    Y  |  t¡ | d¡ W d   ƒ n1 sÖ0    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ª0    Y  |  t¡ | d¡ W d   ƒ n1 sà0    Y  |  t¡ |jd= W d   ƒ n1 s0    Y  |  t¡ |jd= W d   ƒ n1 sH0    Y  |  t¡ |jd = W d   ƒ n1 s|0    Y  d S )NrQ   rb   rM   rO   ry  c                 S   s   | S r   r
   ræ  r
   r
   r   rO  ¤  r   z4ConvertersTestCase.test_converters.<locals>.<lambda>r(  c                 S   s   | S r   r
   ræ  r
   r
   r   rO  ¦  r   z~
        [s]
        str = string
        int = 1
        float = 0.5
        list = a b c d e f g
        bool = yes
        r?  rÐ   r/   r[   z0.5za b c d e f gÚboolrY   r   g      à?)r   r‘   ÚcÚdr´   r¸   ÚgTr   r¶  rÈ   )r-   r˜  rº  r)  ÚassertIsNotNonera   rc   rj   rw   r.   re   rf   rh   Zgetlistri   ro   r»  r¶  r¹  rù   rp   )r	   r×  r?  r¶  Zdec0_5r
   r
   r   Útest_convertersš  sv    ,,
,*
,*((z"ConvertersTestCase.test_converters)N)
r   r   r   r†  r2   r  r+   r-   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 )Nrc   )rº  )r2   r  rc   r.   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©rw  rW   rU   c                   s"   ||krdS t ƒ j|||||dS )NTrö  )rè  ri   ©r	   rE   r‰   rw  rW   rU   ré  r
   r   ri   û  s
    ÿzZBlatantOverrideConvertersTestCase.test_inheritance.<locals>.StrangeConfigParser.getbooleanc                S   s   | j ||t|||dS )Nrö  )Z	_get_convrc   r÷  r
   r
   r   Úgetlen  s    ÿzVBlatantOverrideConvertersTestCase.test_inheritance.<locals>.StrangeConfigParser.getlen)	r   r   r   Z
gettysburgr2   r4   ri   rø  rñ  r
   r
   ré  r   ÚStrangeConfigParserø  s   ÿÿrù  rc   r!  r"  rQ   )r2   r  r.   rŒ   ró  r)  rº  rq   ri   rr   Ú_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,0    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 )Nry  rQ   rc   ZtysburgrM   rO   r!  rÈ   r"  r#  é   Zfourr   rT   )
ra   rc   rº  r˜  rù   r)  rø  rj   r2   rl   rô  r
   r
   r   ró    s0    ,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Ö0    Y  |  t¡& |  ˆ d
  d	¡d¡ W d   ƒ n1 s0    Y  d S )Nc                 S   s   dS )NTr
   ©rE   r‰   r
   r
   r   rO  0  r   zLBlatantOverrideConvertersTestCase.test_instance_assignment.<locals>.<lambda>c                    s   t ˆ |  | ƒS r   )rc   rý  ©r×  r
   r   rO  1  r   rK  rQ   rc   rM   rO   r!  r"  rÈ   r#  rü  ry  )r2   r  ri   rø  r.   rŒ   ra   rc   rº  r˜  rù   r)  rq   rú  rr   rj   ro   r   r
   rþ  r   Útest_instance_assignment.  s:    
6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   dh}t j| t|d d S )Nr¿  )Ú	blacklist)r   Zcheck__all__r2   )r	   r  r
   r
   r   Útest__all__Q  s    zMiscTestCase.test__all__N)r   r   r   r  r
   r
   r
   r   r   P  s   r   Ú__main__),Úcollectionsr2   r¼   rB  rå   r€   Zunittestr©  rû   r   ÚUserDictr   r   r5   ZTestCaserþ   r   r   r.  r/  r6  r7  rH  rT  rU  rZ  rm  rn  r  r‡  r‰  r‹  rŒ  r”  r•  rž  r½  rÖ  rÙ  rå  rò  r   r   Úmainr
   r
   r
   r   Ú<module>   s`   !      3b$3 ,-Sr $6Ro
