
    du>                        d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZ  G d	 d
e
          Z G d de
          Z G d de
          Z G d de
          Z G d de
          Z G d de
          Z G d de
          Z G d de
          Z G d de
          Z G d de
          ZdS )z2Tests for reading and writing configuration files.    N)BytesIO)skipIf)patch)TestCase   )

ConfigDict
ConfigFileStackedConfig_check_section_name_check_variable_name_escape_value_format_string_parse_stringapply_instead_ofparse_submodulesc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$S )%ConfigFileTestsc                 D    t          j        t          |                    S N)r	   	from_filer   )selftexts     ]/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/dulwich/tests/test_config.pyr   zConfigFileTests.from_file&   s    #GDMM222    c                 "    t                       d S r   )r	   r   s    r   
test_emptyzConfigFileTests.test_empty)   s    r   c                 b    |                      t                      t                                 d S r   )assertEqualr	   r   s    r   test_eqzConfigFileTests.test_eq,   s&    z||44444r   c           
          |                      d          }|                     t          ddddddi          |           d S )Ns\   [core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
   core   0   true   false)s   repositoryformatversions   filemodes   bares   logallrefupdatesr   r   r	   r   cfs     r   test_default_configz#ConfigFileTests.test_default_config/   sn    ^^
 
 	48%,!)-4	! !	 	 	
 	
 	
 	
 	
r   c                 t    |                      d          }|                     t                      |           d S Nr   r'   r(   s     r   test_from_file_emptyz$ConfigFileTests.test_from_file_emptyF   s3    ^^C  r*****r   c                 z    |                      d          }|                     t          di i          |           d S )Ns   
[section]
s   sectionr'   r(   s     r   test_empty_line_before_sectionz.ConfigFileTests.test_empty_line_before_sectionJ   s=    ^^,--]B$788"=====r   c                 z    |                      d          }|                     t          di i          |           d S )Ns   # foo
[section]
r/   r'   r(   s     r   test_comment_before_sectionz+ConfigFileTests.test_comment_before_sectionN   s=    ^^122]B$788"=====r   c                 z    |                      d          }|                     t          di i          |           d S )Ns   [section] # foo
r/   r'   r(   s     r   test_comment_after_sectionz*ConfigFileTests.test_comment_after_sectionR   s=    ^^011]B$788"=====r   c                 ~    |                      d          }|                     t          dddii          |           d S )Ns   [section]
bar= foo # a comment
r/      bar   foor'   r(   s     r   test_comment_after_variablez+ConfigFileTests.test_comment_after_variableV   sB    ^^@AA]VV4D$EFFKKKKKr   c                 ~    |                      d          }|                     t          dddii          |           d S )Ns   [section]
bar= "foo#bar"
r/   r6      foo#barr'   r(   s     r   *test_comment_character_within_value_stringz:ConfigFileTests.test_comment_character_within_value_stringZ   sB    ^^:;;]VZ4H$IJJBOOOOOr   c                 ~    |                      d          }|                     t          dddii          |           d S )Ns(   [branch "foo#bar"] # a comment
bar= foo
)   branchr:   r6   r7   r'   r(   s     r   ,test_comment_character_within_section_stringz<ConfigFileTests.test_comment_character_within_section_string^   D    ^^IJJ%<vv>N$OPPRTUUUUUr   c                 ~    |                      d          }|                     t          dddii          |           d S )Ns(   [branch "foo]bar"] # a comment
bar= foo
)r=   s   foo]barr6   r7   r'   r(   s     r   *test_closing_bracket_within_section_stringz:ConfigFileTests.test_closing_bracket_within_section_stringb   r?   r   c                     |                      d          }|                     d|                    dd                     |                     d|                    dd                     d S )Ns   [core]
foo = bar
r6   r"   r7   r#   r7   r   r   getr(   s     r   test_from_file_sectionz&ConfigFileTests.test_from_file_sectionf   c    ^^233
F!;!;<<<(96!B!BCCCCCr   c           	         |                      d          }|                     ddgt          |                    dd                               |                     g t          |                    dd                               d S )N   [core]
foo = bar
foo = blah
r6   s   blahr"   r7   )r   r   listget_multivarr(   s     r   test_from_file_multiplez'ConfigFileTests.test_from_file_multiplek   sw    ^^>??&'*DV1T1T,U,UVVVT"//+w"G"GHHIIIIIr   c                     d                     d          }|                     |          }|                     d|                    dd                     d S )Nu   [core]
foo = bär
z	utf-8-sigs   bärr"   r7   )encoder   r   rE   )r   r   r)   s      r   test_from_file_utf8_bomz'ConfigFileTests.test_from_file_utf8_bomp   sP    )00==^^D!!z6(B(BCCCCCr   c                     |                      d          }|                     d|                    dd                     |                     d|                    dd                     d S )N   [cOre]
fOo = bar
r6   r"   r7   rC   rD   r(   s     r   -test_from_file_section_case_insensitive_lowerz=ConfigFileTests.test_from_file_section_case_insensitive_loweru   rG   r   c                     |                      d          }|                     d|                    dd                     |                     d|                    dd                     d S )NrQ   r6   r"      fOo)s   cOrerT   rD   r(   s     r   -test_from_file_section_case_insensitive_mixedz=ConfigFileTests.test_from_file_section_case_insensitive_mixedz   rG   r   c                     |                      d          }|                     d|                    dd                     d S )Ns   [core]
foo = "bar"la
   barlar"   r7   rD   r(   s     r    test_from_file_with_mixed_quotedz0ConfigFileTests.test_from_file_with_mixed_quoted   s>    ^^677266*f#=#=>>>>>r   c                 H    |                      t          | j        d           d S )Ns   [core
foo = bar
assertRaises
ValueErrorr   r   s    r   )test_from_file_section_with_open_bracketsz9ConfigFileTests.test_from_file_section_with_open_brackets   s#    *dn6KLLLLLr   c                 H    |                      t          | j        d           d S )Ns   [core]
foo = "bar
rZ   r   s    r   %test_from_file_value_with_open_quotedz5ConfigFileTests.test_from_file_value_with_open_quoted   s#    *dn6MNNNNNr   c                     |                      d          }|                     d|                    dd                     d S )Ns   [core]
foo = " bar"
s    barr"   r7   rD   r(   s     r   test_from_file_with_quotesz*ConfigFileTests.test_from_file_with_quotes   s>    ^^9::"&&V"<"<=====r   c                     |                      d          }|                     d|                    dd                     d S )Ns   [core]
foo = bar\
 la
rW   r"   r7   rD   r(   s     r   $test_from_file_with_interrupted_linez4ConfigFileTests.test_from_file_with_interrupted_line   s>    ^^ABB266*f#=#=>>>>>r   c                     |                      d          }|                     d|                    dd                     d S )Ns   [core]
foo
r%   r"   r7   rD   r(   s     r   #test_from_file_with_boolean_settingz3ConfigFileTests.test_from_file_with_boolean_setting   s>    ^^011"&&V"<"<=====r   c                     |                      d          }|                     d|                    dd                     d S )Ns   [branch "foo"]
foo = bar
r6   r=   r7   r7   rD   r(   s     r   test_from_file_subsectionz)ConfigFileTests.test_from_file_subsection   s?    ^^:;;(;V!D!DEEEEEr   c                 H    |                      t          | j        d           d S )Ns   [branch "foo]
foo = bar
rZ   r   s    r   !test_from_file_subsection_invalidz1ConfigFileTests.test_from_file_subsection_invalid   s#    *dn6STTTTTr   c                     |                      d          }|                     d|                    dd                     d S )Ns   [branch.foo]
foo = bar
r6   rg   r7   rD   r(   s     r   $test_from_file_subsection_not_quotedz4ConfigFileTests.test_from_file_subsection_not_quoted   s?    ^^899(;V!D!DEEEEEr   c                     |                      d          }t                      }|                    |           |                     d|                                           d S )NrI   s   [core]
	foo = bar
	foo = blah
)r   r   write_to_filer   getvalue)r   r)   fs      r   test_write_preserve_multivarz,ConfigFileTests.test_write_preserve_multivar   sV    ^^>??II
?NNNNNr   c                     t                      }t                      }|                    |           |                     d|                                           d S r,   )r	   r   rn   r   ro   r   crp   s      r   test_write_to_file_emptyz(ConfigFileTests.test_write_to_file_empty   sJ    LLII	ajjll+++++r   c                     t                      }|                    ddd           t                      }|                    |           |                     d|                                           d S )Nr"   r7   r6   s   [core]
	foo = bar
r	   setr   rn   r   ro   rs   s      r   test_write_to_file_sectionz*ConfigFileTests.test_write_to_file_section   sa    LL	j&&)))II	11::<<@@@@@r   c                     t                      }|                    ddd           t                      }|                    |           |                     d|                                           d S )N)r=   s   blier7   r6   s   [branch "blie"]
	foo = bar
rw   rs   s      r   test_write_to_file_subsectionz-ConfigFileTests.test_write_to_file_subsection   sb    LL	"FF333II	:AJJLLIIIIIr   c                     |                      d          }|                     d|                    dd                     d S )Ns   [branch.foo] foo = bar
r6   rg   r7   rD   r(   s     r   test_same_linezConfigFileTests.test_same_line   s?    ^^788(;V!D!DEEEEEr   c                     |                      d          }|                     t          |                                          dg           |                     d|                    dd                     d S )Nsj   [alias]
c = '!f() { \
 printf '[git commit -m \"%s\"]\n' \"$*\" && \
 git commit -m \"$*\"; \
 }; f'
s   aliassA   '!f() { printf '[git commit -m "%s"]
' "$*" && git commit -m "$*"   c)r   r   rJ   sectionsrE   r(   s     r   test_quoted_newlines_windowsz,ConfigFileTests.test_quoted_newlines_windows   s|    ^^  	bkkmm,,|n===*FF<&&	( 	( 	( 	( 	(r   c                 ~    |                      d          }|                     t          dddii          |           d S )NsA   [gui]
	fontdiff = -family \"Ubuntu Mono\" -size 11 -overstrike 0
)s   guis   fontdiffs,   -family "Ubuntu Mono" -size 11 -overstrike 0r'   r(   s     r   test_quotedzConfigFileTests.test_quoted   sc    ^^
 

 	#%T   		
 		
 		
 		
 		
r   c                 ~    |                      d          }|                     t          dddii          |           d S )Nsn   [alias]
who = "!who() {\
  git log --no-merges --pretty=format:'%an - %ae' $@ | uniq -c | sort -rn;\
};\
who"
r   s   whosU   !who() {git log --no-merges --pretty=format:'%an - %ae' $@ | uniq -c | sort -rn;};whor'   r(   s     r   test_quoted_multilinez%ConfigFileTests.test_quoted_multiline   sf    ^^
 
 	B"	 	 	
 	
 	
 	
 	
r   c                     t                      }|                    ddd           t                      }|                    |           |                     d|                                           d S )Ns   xandikoss   colors   #665544s   [xandikos]
	color = "#665544"
rw   rs   s      r   test_set_hash_gets_quotedz)ConfigFileTests.test_set_hash_gets_quoted   sa    LL	k8Z000II	=qzz||LLLLLr   N)&__name__
__module____qualname__r   r   r    r*   r-   r0   r2   r4   r8   r;   r>   rA   rF   rL   rO   rR   rU   rX   r]   r_   ra   rc   re   rh   rj   rl   rq   ru   ry   r{   r}   r   r   r   r    r   r   r   r   %   s\       3 3 3  5 5 5
 
 
.+ + +> > >> > >> > >L L LP P PV V VV V VD D D
J J J
D D D
D D D
D D D
? ? ?M M MO O O> > >? ? ?> > >F F FU U UF F FO O O, , ,A A AJ J JF F F( ( (
 
 
"
 
 
.M M M M Mr   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )ConfigDictTestsc                 j   t                      }|                     t          |j        dd           |                    ddd           |                     d|                    dd                     |                    ddd           |                     d|                    dd                     d S )Nr7   r#   r"      bla   bloe)r   r[   KeyErrorrE   rx   r   r   cds     r   test_get_setzConfigDictTests.test_get_set   s    \\(BFFG<<<
z66***
F!;!;<<<
z67+++"&&V"<"<=====r   c                    t                      }|                    ddd           |                     |                    dd                     |                    ddd           |                     |                    dd                     |                    ddd           |                     t          |j        dd           d S )Nr"   r7   r%   r&   s   invalid)r   rx   
assertTrueget_booleanassertFalser[   r\   r   s     r   test_get_booleanz ConfigDictTests.test_get_boolean  s    \\
z67+++z6::;;;
z68,,,
F;;<<<
z6:...*bnj&IIIIIr   c                 j   t                      }|                    ddd           |                    ddd           |                     ddgt          |                                                     |                     |d         ddi           d|d<   |                     |d         d           d S )Nr"   r7   r   s   core2r      b   a)r   rx   r   rJ   keysr   s     r   	test_dictzConfigDictTests.test_dict  s    \\
z66***
{FG,,,*k2DOODDDJ&&)9:::4D4(((((r   c                     t                      }|                    ddd           |                    ddd           |                     dgt          |                    d                               d S )Nr"   r7   r   r   r   )r7   r   r   rx   r   rJ   itemsr   s     r   
test_itemszConfigDictTests.test_items  sk    \\
z66***
{FG,,,*+T"((:2F2F-G-GHHHHHr   c                     t                      }|                    ddd           |                     g t          |                    d                               d S )Nr   r7   r   r"   r   r   s     r   test_items_nonexistantz&ConfigDictTests.test_items_nonexistant  sQ    \\
{FG,,,T"((:"6"67788888r   c                     t                      }|                    ddd           |                     dgt          |                                                     d S )Nr   r7   r   )r   rx   r   rJ   r   r   s     r   test_sectionszConfigDictTests.test_sections%  sO    \\
{FG,,,+R[[]](;(;<<<<<r   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      st        > > >J J J	) 	) 	)I I I9 9 9= = = = =r   r   c                       e Zd Zd Z eej        dk    d          d             Z eej        dk    d          d             ZdS )StackedConfigTestsc                 ,    t          j                     d S r   )r
   default_backendsr   s    r   test_default_backendsz(StackedConfigTests.test_default_backends-  s    &(((((r   win32z!Windows specific config location.c                 "   ddl m} t          j                            ddd          }|                     dt          j                            |d                     t          dd	
          5  t           |                      }d d d            n# 1 swxY w Y   |                     t          j                            t          j	        
                    d          dd          t          j                            |dd          h|           d S )Nr   get_win_system_pathsC:fooGitPATHcmdzos.path.existsTreturn_valuePROGRAMDATAconfigetc	gitconfig)r   r   ospathjoinoverrideEnvr   rx   r   environrE   )r   r   install_dirpathss       r   test_windows_config_from_pathz0StackedConfigTests.test_windows_config_from_path0  s5   111111gll466k5!A!ABBB#$777 	0 	0,,..//E	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0RZ^^M::E8LL[%== 	
 	
 	
 	
 	
s   -BBBc                 J   dd l }ddlm} |                     dd            t          j                            ddd          }t          d          5  t          d	||j        f
          5  t           |                      }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | 
                    t          j                            t          j                            d          dd          t          j                            |dd          h|           d S )Nr   r   r   r   r   r   r   zwinreg.OpenKeyzwinreg.QueryValueExr   r   r   r   r   )winregr   r   r   r   r   r   r   REG_SZrx   r   r   rE   )r   r   r   r   r   s        r   test_windows_config_from_regz/StackedConfigTests.test_windows_config_from_reg@  s   111111&&&gll466#$$ 	4 	4%)6=9   4 4 002233	4 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	RZ^^M::E8LL[%== 	
 	
 	
 	
 	
s6   B%*BB%B	B%B	B%%B),B)N)	r   r   r   r   r   sysplatformr   r   r   r   r   r   r   ,  s        ) ) ) VCLG#%HII
 
 JI
 VCLG#%HII
 
 JI
 
 
r   r   c                        e Zd Zd Zd Zd ZdS )EscapeValueTestsc                 L    |                      dt          d                     d S )Nr7   r   r   r   s    r   test_nothingzEscapeValueTests.test_nothingX  s&    v!6!677777r   c                 L    |                      dt          d                     d S )Ns   foo\\s   foo\r   r   s    r   test_backslashzEscapeValueTests.test_backslash[  s&    ]8%<%<=====r   c                 L    |                      dt          d                     d S )Ns   foo\ns   foo
r   r   s    r   test_newlinezEscapeValueTests.test_newline^  s&    M($;$;<<<<<r   N)r   r   r   r   r   r   r   r   r   r   r   W  sA        8 8 8> > >= = = = =r   r   c                       e Zd Zd Zd ZdS )FormatStringTestsc                     |                      dt          d                     |                      dt          d                     d S )N   " foo"    foo   "\tfoo"   	foor   r   r   s    r   r   zFormatStringTests.test_quotedc  sD    N7$;$;<<<nX&>&>?????r   c                     |                      dt          d                     |                      dt          d                     d S Nr7   s   foo barr   r   s    r   test_not_quotedz!FormatStringTests.test_not_quotedg  sD    !7!7888^J%?%?@@@@@r   N)r   r   r   r   r   r   r   r   r   r   b  s:        @ @ @A A A A Ar   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )ParseStringTestsc                     |                      dt          d                     |                      dt          d                     d S )Nr   r   r   r   r   r   r   s    r   r   zParseStringTests.test_quotedm  sD    -	":":;;;=#=#=>>>>>r   c                     |                      dt          d                     |                      dt          d                     d S r   r   r   s    r   r   z ParseStringTests.test_not_quotedq  sD    v!6!6777]:%>%>?????r   c                 L    |                      dt          d                     d S r,   r   r   s    r   r   zParseStringTests.test_nothingu  s&    mC0011111r   c                 L    |                      dt          d                     d S )Ns   	bar	s   \tbar\tr   r   s    r   test_tabzParseStringTests.test_tabx  s&    ]<%@%@AAAAAr   c                 L    |                      dt          d                     d S )Ns   
bar	s   \nbar\t	r   r   s    r   r   zParseStringTests.test_newline{  s&    ]>%B%BCCCCCr   c                 L    |                      dt          d                     d S )Ns   "foo"s   \"foo\"r   r   s    r   
test_quotezParseStringTests.test_quote~  s&    =#>#>?????r   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r   l  s|        ? ? ?@ @ @2 2 2B B BD D D@ @ @ @ @r   r   c                       e Zd Zd Zd ZdS )CheckVariableNameTestsc                     |                      t          d                     |                      t          d                     |                      t          d                     d S )N   foo    bar,bar   bar.bar)r   r   r   s    r   test_invalidz#CheckVariableNameTests.test_invalid  s_    -g66777-j99:::-j99:::::r   c                     |                      t          d                     |                      t          d                     |                      t          d                     d S )N   FOOr7      foo-bar)r   r   r   s    r   
test_validz!CheckVariableNameTests.test_valid  sY    ,V44555,V44555,Z8899999r   Nr   r   r   r   r   r   r   r   r   r     s2        ; ; ;
: : : : :r   r   c                       e Zd Zd Zd ZdS )CheckSectionNameTestsc                     |                      t          d                     |                      t          d                     d S )Nr   r   )r   r   r   s    r   r   z"CheckSectionNameTests.test_invalid  sB    ,W55666,Z8899999r   c                    |                      t          d                     |                      t          d                     |                      t          d                     |                      t          d                     d S )Nr   r7   r   r   )r   r   r   s    r   r   z CheckSectionNameTests.test_valid  st    +F33444+F33444+J77888+J7788888r   Nr   r   r   r   r   r     s2        : : :9 9 9 9 9r   r   c                       e Zd Zd ZdS )SubmodulesTestsc                     t          j        t          d                    }t          t	          |                    }|                     dg|           d S )NsX   [submodule "core/lib"]
	path = core/lib
	url = https://github.com/phhusson/QuasselC.git
)   core/libs(   https://github.com/phhusson/QuasselC.gitr   )r	   r   r   rJ   r   r   )r   r)   gots      r   testSubmoduleszSubmodulesTests.testSubmodules  so    ! 
 
 #B''(( 		
 		
 		
 		
 		
r   N)r   r   r   r   r   r   r   r   r     s#        
 
 
 
 
r   r   c                        e Zd Zd Zd Zd ZdS )ApplyInsteadOfTestsc                 j    t                      }|                     dt          |d                     d S )Nhttps://example.com/)r   r   r   r   r   s     r   	test_nonezApplyInsteadOfTests.test_none  sC    "$4V=S$T$T	V 	V 	V 	V 	Vr   c                     t                      }|                    ddd           |                     dt          |d                     d S )Nurlhttps://samba.org/	insteadOfr  r	  )r   rx   r   r   r  s     r   
test_applyzApplyInsteadOfTests.test_apply  s_    

);8N	P 	P 	P V%;<<	> 	> 	> 	> 	>r   c           	      8   t                      }|                    ddd           |                    ddd           |                     ddgt          |                    dd                               |                     dt          |d                     d S )Nr  r
  zhttps://blah.com/r  s   https://blah.com/s   https://example.com/r	  )r   rx   r   rJ   rK   r   r  s     r   test_apply_multiplez'ApplyInsteadOfTests.test_apply_multiple  s    

);8K	M 	M 	M

);8N	P 	P 	P!#:;$$%BKPPQQ	S 	S 	S 	 V%;<<	> 	> 	> 	> 	>r   N)r   r   r   r  r  r  r   r   r   r  r    sD        V V V
> > >> > > > >r   r  ) __doc__r   r   ior   unittestr   unittest.mockr   dulwich.testsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   <module>r     s  * 9 8 				 



                   " " " " " "( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (SM SM SM SM SMh SM SM SMl.= .= .= .= .=h .= .= .=b(
 (
 (
 (
 (
 (
 (
 (
V= = = = =x = = =A A A A A A A A@ @ @ @ @x @ @ @,	: 	: 	: 	: 	:X 	: 	: 	:	9 	9 	9 	9 	9H 	9 	9 	9
 
 
 
 
h 
 
 
0> > > > >( > > > > >r   