
    daf5                         d dl Z d dlZd dlZd dlZd dlZdZdZ G d dej                        Z e	edd      s. e
e      D ]#  Zej                  d      sedk7  s eee       % ed	k(  r ej                          yy)
    Nu  x|x|
foo bar|foo|bar|
 foo bar|foo|bar|
 foo bar |foo|bar|
foo   bar    bla     fasel|foo|bar|bla|fasel|
x y  z              xxxx|x|y|z|xxxx|
\x bar|\|x|bar|
\ x bar|\|x|bar|
\ bar|\|bar|
foo \x bar|foo|\|x|bar|
foo \ x bar|foo|\|x|bar|
foo \ bar|foo|\|bar|
foo "bar" bla|foo|"bar"|bla|
"foo" "bar" "bla"|"foo"|"bar"|"bla"|
"foo" bar "bla"|"foo"|bar|"bla"|
"foo" bar bla|"foo"|bar|bla|
foo 'bar' bla|foo|'bar'|bla|
'foo' 'bar' 'bla'|'foo'|'bar'|'bla'|
'foo' bar 'bla'|'foo'|bar|'bla'|
'foo' bar bla|'foo'|bar|bla|
blurb foo"bar"bar"fasel" baz|blurb|foo"bar"bar"fasel"|baz|
blurb foo'bar'bar'fasel' baz|blurb|foo'bar'bar'fasel'|baz|
""|""|
''|''|
foo "" bar|foo|""|bar|
foo '' bar|foo|''|bar|
foo "" "" "" bar|foo|""|""|""|bar|
foo '' '' '' bar|foo|''|''|''|bar|
\""|\|""|
"\"|"\"|
"foo\ bar"|"foo\ bar"|
"foo\\ bar"|"foo\\ bar"|
"foo\\ bar\"|"foo\\ bar\"|
"foo\\" bar\""|"foo\\"|bar|\|""|
"foo\\ bar\" dfadf"|"foo\\ bar\"|dfadf"|
"foo\\\ bar\" dfadf"|"foo\\\ bar\"|dfadf"|
"foo\\\x bar\" dfadf"|"foo\\\x bar\"|dfadf"|
"foo\x bar\" dfadf"|"foo\x bar\"|dfadf"|
\''|\|''|
'foo\ bar'|'foo\ bar'|
'foo\\ bar'|'foo\\ bar'|
"foo\\\x bar\" df'a\ 'df'|"foo\\\x bar\"|df'a|\|'df'|
\"foo"|\|"foo"|
\"foo"\x|\|"foo"|\|x|
"foo\x"|"foo\x"|
"foo\ "|"foo\ "|
foo\ xx|foo|\|xx|
foo\ x\x|foo|\|x|\|x|
foo\ x\x\""|foo|\|x|\|x|\|""|
"foo\ x\x"|"foo\ x\x"|
"foo\ x\x\\"|"foo\ x\x\\"|
"foo\ x\x\\""foobar"|"foo\ x\x\\"|"foobar"|
"foo\ x\x\\"\''"foobar"|"foo\ x\x\\"|\|''|"foobar"|
"foo\ x\x\\"\'"fo'obar"|"foo\ x\x\\"|\|'"fo'|obar"|
"foo\ x\x\\"\'"fo'obar" 'don'\''t'|"foo\ x\x\\"|\|'"fo'|obar"|'don'|\|''|t'|
'foo\ bar'|'foo\ bar'|
'foo\\ bar'|'foo\\ bar'|
foo\ bar|foo|\|bar|
foo#bar\nbaz|foobaz|
:-) ;-)|:|-|)|;|-|)|
áéíóú|á|é|í|ó|ú|
u1  x|x|
foo bar|foo|bar|
 foo bar|foo|bar|
 foo bar |foo|bar|
foo   bar    bla     fasel|foo|bar|bla|fasel|
x y  z              xxxx|x|y|z|xxxx|
\x bar|x|bar|
\ x bar| x|bar|
\ bar| bar|
foo \x bar|foo|x|bar|
foo \ x bar|foo| x|bar|
foo \ bar|foo| bar|
foo "bar" bla|foo|bar|bla|
"foo" "bar" "bla"|foo|bar|bla|
"foo" bar "bla"|foo|bar|bla|
"foo" bar bla|foo|bar|bla|
foo 'bar' bla|foo|bar|bla|
'foo' 'bar' 'bla'|foo|bar|bla|
'foo' bar 'bla'|foo|bar|bla|
'foo' bar bla|foo|bar|bla|
blurb foo"bar"bar"fasel" baz|blurb|foobarbarfasel|baz|
blurb foo'bar'bar'fasel' baz|blurb|foobarbarfasel|baz|
""||
''||
foo "" bar|foo||bar|
foo '' bar|foo||bar|
foo "" "" "" bar|foo||||bar|
foo '' '' '' bar|foo||||bar|
\"|"|
"\""|"|
"foo\ bar"|foo\ bar|
"foo\\ bar"|foo\ bar|
"foo\\ bar\""|foo\ bar"|
"foo\\" bar\"|foo\|bar"|
"foo\\ bar\" dfadf"|foo\ bar" dfadf|
"foo\\\ bar\" dfadf"|foo\\ bar" dfadf|
"foo\\\x bar\" dfadf"|foo\\x bar" dfadf|
"foo\x bar\" dfadf"|foo\x bar" dfadf|
\'|'|
'foo\ bar'|foo\ bar|
'foo\\ bar'|foo\\ bar|
"foo\\\x bar\" df'a\ 'df"|foo\\x bar" df'a\ 'df|
\"foo|"foo|
\"foo\x|"foox|
"foo\x"|foo\x|
"foo\ "|foo\ |
foo\ xx|foo xx|
foo\ x\x|foo xx|
foo\ x\x\"|foo xx"|
"foo\ x\x"|foo\ x\x|
"foo\ x\x\\"|foo\ x\x\|
"foo\ x\x\\""foobar"|foo\ x\x\foobar|
"foo\ x\x\\"\'"foobar"|foo\ x\x\'foobar|
"foo\ x\x\\"\'"fo'obar"|foo\ x\x\'fo'obar|
"foo\ x\x\\"\'"fo'obar" 'don'\''t'|foo\ x\x\'fo'obar|don't|
"foo\ x\x\\"\'"fo'obar" 'don'\''t' \\|foo\ x\x\'fo'obar|don't|\|
'foo\ bar'|foo\ bar|
'foo\\ bar'|foo\\ bar|
foo\ bar|foo bar|
foo#bar\nbaz|foo|baz|
:-) ;-)|:-)|;-)|
áéíóú|áéíóú|
c                       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y)	ShlexTestc                    t         j                         D cg c]  }|j                  d      d d  c}| _         t        j                         D cg c]  }|j                  d      d d  c}| _        | j                   D ]  }|d   j	                  dd      |d<    | j                  D ]  }|d   j	                  dd      |d<    y c c}w c c}w )N|r   z\n
)data
splitlinessplit
posix_datareplace)selfxitems      */root/Python-3.12.4/Lib/test/test_shlex.pysetUpzShlexTest.setUp   s    "oo/1 WWS\#2& 1	 %/$9$9$;=  773<, =II 	3D1gooeT2DG	3OO 	3D1gooeT2DG	31=s   CCc                     t        t        |            D ]L  }t        j                  ||   d   |      }| j	                  |||   dd  ||   d   d|d||   dd         N y )Nr   comments   :  != )rangelenshlexr   assertEqual)r   r	   r   ils        r   	splitTestzShlexTest.splitTest   sl    s4y! 	;ADGAJ:AQQ"1gaj!T!WQR[:;	;    c                     g }t        j                   t        j                  |            }|j                         }|r$|j	                  |       |j                         }|r$|S N)r   ioStringIO	get_tokenappend)r   sretlextoks        r   oldSplitzShlexTest.oldSplit   sM    kk"++a.)mmoJJsO--/C  
r    c                     | j                  t              5  t        j                  d        d d d        y # 1 sw Y   y xY wr"   )assertRaises
ValueErrorr   r   r   s    r   testSplitNonezShlexTest.testSplitNone   s1    z* 	KK	 	 	s   5>c                 >    | j                  | j                  d       y)z%Test data splitting with posix parserTr   N)r   r   r/   s    r   testSplitPosixzShlexTest.testSplitPosix   s    t6r    c                 "   t        t        | j                              D ]n  }| j                  | j                  |   d         }| j	                  || j                  |   dd | j                  |   d   d|d| j                  |   dd        p y)zTest compatibility interfacer   r   Nr   r   )r   r   r	   r+   r   )r   r   r   s      r   
testCompatzShlexTest.testCompat   s    s499~& 	EAdiil1o.AQ		!QR 0"iil1oq$))A,qr2BDE	Er    c                     dD ]t  }d|z  d|z  g}dd|ddg}t        j                  |d      D ]H  \  }}t        j                  |d	      }||_        t	        |      }| j                  ||d
|d|d       J v y)z)Test handling of syntax splitting of &, |)
&&&z|&;&;;&||r   z&|z;|z;;|echo hi %s echo byeecho hi%secho byeechohibyeFTTpunctuation_charsWhile splitting '' [ws=]N	itertoolsproductr   whitespace_splitlistr   r   	delimitersrcrefsswsr'   results           r   testSyntaxSplitAmpersandAndPipez)ShlexTest.testSyntaxSplitAmpersandAndPipe   s    
8 
	LI(94&24C4FE:C#++C? LBKKd;%'"a  fCEr!JL	L
	Lr    c                     dD ]x  }d|z  d|z  d|z  g}dd|ddg}t        j                  |d      D ]H  \  }}t        j                  |d	
      }||_        t	        |      }| j                  ||d|d|d       J z y)z&Test handling of syntax splitting of ;);z;;r8   r9   r;   zecho hi%s echo byer<   r=   r>   r?   r@   TrA   rC   rD   rE   NrF   rK   s           r   testSyntaxSplitSemicolonz"ShlexTest.testSyntaxSplitSemicolon   s     2 
	LI(94')3&24C 4FE:C#++C? LBKKd;%'"a  fCEr!JL	L
	Lr    c                     dD ]p  }d|z  d|z  d|z  g}dd|dg}t        j                  |d      D ]A  \  }}t        j                  |d	
      }t        |      }| j	                  ||d|d|d       C r y)z&Test handling of syntax splitting of >)<r   zecho hi %s outzecho hi%s outzecho hi%soutr=   r>   outr@   TrA   rC   rD   rE   N)rG   rH   r   rJ   r   rK   s           r   testSyntaxSplitRedirectz!ShlexTest.testSyntaxSplitRedirect   s     $ 		LI#i/"Y.!I-/C 4E2C#++C? LBKKd;a  fCEr!JLL		Lr    c           
          ddg}g d}t        j                  |d      D ]H  \  }}t        j                  |d      }||_        t	        |      }| j                  ||d|d|d	       J y
)z'Test handling of syntax splitting of ()z( echo hi )z	(echo hi))(r=   r>   )r@   TrA   rC   rD   rE   NrF   )r   rM   rN   rO   rP   r'   rQ   s          r   testSyntaxSplitParenzShlexTest.testSyntaxSplitParen   st     &'']; 	HFBB$7A!#A!WFS&?A2FH		Hr    c                    d}g d}t        j                   |d      }t        |      }| j                  ||d|z         g d}t        j                   |d      }d|_        t        |      }| j                  ||d|z         y	)
z3Test handling of syntax splitting with custom charsz~/a&&b-c --color=auto||d *.py?)z~/ar7   r7   zb-c--color=autor:   d*.py?r   rA   zWhile splitting '%s' [ws=False])z~/a&&b-cr_   r:   r`   ra   TzWhile splitting '%s' [ws=True]N)r   rJ   r   rI   )r   rO   rN   r'   rQ   s        r   testSyntaxSplitCustomzShlexTest.testSyntaxSplitCustom   s{    -JKKc2af&G"&LM>KKc2!af&F&KLr    c                    dg dffD ]{  \  }}t        j                   |d      }g }	 |j                         }||j                  k(  rn*|d   |j                  v rd}nd}|j	                  ||f       J| j                  ||       } y)	z2Test that tokens are split with types as expected.za && b || c))ard   )r6   c)brd   )r:   re   )re   rd   TrA   r   re   rd   N)r   r%   eofrB   r&   r   )r   sourceexpectedr'   observedttts          r   testTokenTypeszShlexTest.testTokenTypes   s     "/";!<!  	1FH
 Fd;AHKKM:Q41...BBB(  Xx0!	1r    c                     t        j                   dd      }| j                  d|j                         | j                  t	        |      g d       y)z:Test that any punctuation chars are removed from wordcharsa_b__c_rA   )rd   rp   rf   __re   N)r   assertNotIn	wordcharsr   rJ   r   r'   s     r   testPunctuationInWordCharsz$ShlexTest.testPunctuationInWordChars  s;    KKC8akk*a"<=r    c                     t        j                   dd      }| j                  t        |      g d       t        j                   dd      }d|_        | j                  t        |      g d       y)z9Test that with whitespace_split, behaviour is as expectedza  && b  ||  cr7   rA   )rd   r6   rf   r   r   re   T)rd   r6   rf   r:   re   N)r   r   rJ   rI   rt   s     r   "testPunctuationWithWhitespaceSplitz,ShlexTest.testPunctuationWithWhitespaceSplit  sZ    KK(C@ 	a"ABKK(C@! 	a"=>r    c                     t        j                   ddd      }| j                  t        |      g d       t        j                   ddd      }| j                  t        |      g d       y)z@Test that punctuation_chars and posix behave correctly together.zf >"abc"TposixrB   )f>abcz
f >\"abc\")r{   r|   z"abc"N)r   r   rJ   rt   s     r   testPunctuationWithPosixz"ShlexTest.testPunctuationWithPosix$  sR     KK
$$Ga"34KKddKa"56r    c                     g d}dD ]7  }t        j                   dd|      }t        |      }| j                  ||       9 g d}t        j                   dd      }| j                  t        |      |       y)	z8Test that parsing of empty strings is correctly handled.) r\   r}   r@   z'')abcTry   )''r\   r}   rA   N)r   rJ   r   )r   ri   punctr'   slists        r   testEmptyStringHandlingz!ShlexTest.testEmptyStringHandling,  sn     $" 	.EHDEJAGEUH-	. &KKD9a(+r    c                     d}dg}t        j                   |d      }d|_        | j                  t        |      |       g d}t        j                   |d      }| j                  t        |      |       y)z;Test punctuation_chars and whitespace_split handle unicode.u   ℙƴ☂ℌøἤTrA   )u   ℙu   ƴu   ☂u   ℌ   øu   ἤN)r   rI   r   rJ   )r   rO   rN   r'   s       r   testUnicodeHandlingzShlexTest.testUnicodeHandling8  sd    356KKd3!a#&JKKd3a#&r    c                     t         j                  t         j                  z   dz   }d}d|z   }| j                  t	        j
                  d      d       | j                  t	        j
                  |      |       | j                  t	        j
                  d      d       |D ]-  }| j                  t	        j
                  d|z        d	|z         / |D ]-  }| j                  t	        j
                  d
|z        d|z         / y )Nz
@%_-+=:,./u   éàßz"`$\!r   r   ztest file namez'test file name'z
test%snamez'test%sname'ztest%s'name'z'test%s'"'"'name'"'"'')stringascii_lettersdigitsr   r   quote)r   safeunquotedunicode_sampleunsafeus        r   	testQuotezShlexTest.testQuoteE  s    ++fmm;lJ'N*R$/\2LA%568JK 	1AU[[)9:+a/1	1  	?AU[[!);<9A=?	?r    c                     ddgdfddgdfg ddfd	d
gdffD ]G  \  }}| j                  |      5  t        j                  |      }| j                  ||       d d d        I y # 1 sw Y   TxY w)Nza rf   z'a ' brd   z bza ' b')rd    rf   za ' ' bz"azb"z	'"a' 'b"'command)subTestr   joinr   )r   split_commandr   joineds       r   testJoinzShlexTest.testJoinT  s    C[(#4[(#i(D\?+	'
 	2"M7 g. 2M2  12 2	22 2s   (A""A+	c                    | j                   | j                  z   }|D ][  ^}}| j                  |      5  t        j                  |      }t        j
                  |      }| j                  ||       d d d        ] y # 1 sw Y   hxY w)Nr   )r	   r   r   r   r   r   r   )r   all_datar   r   r   resplits         r   testJoinRoundtripzShlexTest.testJoinRoundtrip_  s|    99t.'/ 	9#Gmg. 9M2++f-  89 9	99 9s   =A;;B	c                     d}t        j                   |      }| j                  |j                  |       | j                  t              5  d|_        d d d        y # 1 sw Y   y xY w)Nz/|$%^rA   F)r   r   rB   r-   AttributeError)r   rB   shlex_instances      r   testPunctuationCharsReadOnlyz&ShlexTest.testPunctuationCharsReadOnlyg  sY    #7HI99;LM~. 	5/4N,	5 	5 	5s   
AA$N)__name__
__module____qualname__r   r   r+   r0   r2   r4   rR   rU   rY   r]   rb   rm   ru   rw   r~   r   r   r   r   r   r    r    r   r   r      sq    3;7EL"L LHM1(>
?7
,'?	295r    r   r   testr4   __main__)r#   rG   r   r   unittestr	   r   TestCaser   getattrdirmethname
startswithdelattrr   mainr   r    r   <module>r      s    	    
=~>
@c5!! c5N ugt$	N )v&8|+CIx() zHMMO r    