
    <e5                        d dl Z d dlZd dlZd dlZd dlZd dlmZ dZdZ G d dej                  Z	 e
edd          s5 ee	          D ])Ze                    d          red	k    r ee	e           *ed
k    r ej                     dS dS )    N)mocku  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 ej        d ej	                              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 )	ShlexTestc                 J   d t                                           D             | _         d t                                          D             | _        | j         D ]!}|d                             dd          |d<   "| j        D ]!}|d                             dd          |d<   "d S )Nc                 H    g | ]}|                     d           dd          S |Nsplit.0xs     &/usr/lib/python3.11/test/test_shlex.py
<listcomp>z#ShlexTest.setUp.<locals>.<listcomp>   s;     1 1 1 WWS\\#2#& 1 1 1    c                 H    g | ]}|                     d           dd          S r   r   r   s     r   r   z#ShlexTest.setUp.<locals>.<listcomp>   s;     = = =  773<<, = = =r   r   z\n
)data
splitlines
posix_datareplace)selfitems     r   setUpzShlexTest.setUp   s    1 1"oo//1 1 1	= =$.$9$9$;$;= = =I 	3 	3D1gooeT22DGGO 	3 	3D1gooeT22DGG	3 	3r   c                    t          t          |                    D ]k}t          j        ||         d         |          }|                     |||         dd          ||         d         d|d||         dd                     ld S )Nr   comments   :  != )rangelenshlexr   assertEqual)r   r   r   ils        r   	splitTestzShlexTest.splitTest   s    s4yy!! 	; 	;ADGAJ:::AQQ"1gajjj!!!T!WQRR[[:; ; ; ;	; 	;r   c                     g }t          j         t          j        |                    }|                                }|r+|                    |           |                                }|+|S N)r$   ioStringIO	get_tokenappend)r   sretlextoks        r   oldSplitzShlexTest.oldSplit   s`    k"+a..))mmoo 	"JJsOOO--//C  	" 
r   z	sys.stdinc                     |                      t                    5  t          j        d            d d d            d S # 1 swxY w Y   d S r*   )assertWarnsDeprecationWarningr$   r   r   s    r   testSplitNoneDeprecationz"ShlexTest.testSplitNoneDeprecation   s    011 	 	K	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   =AAc                 >    |                      | j        d           dS )z%Test data splitting with posix parserTr   N)r(   r   r7   s    r   testSplitPosixzShlexTest.testSplitPosix   s     t66666r   c                 F   t          t          | j                            D ]~}|                     | j        |         d                   }|                     || j        |         dd         | j        |         d         d|d| j        |         dd                    dS )zTest compatibility interfacer   r   Nr    r!   )r"   r#   r   r3   r%   )r   r&   r'   s      r   
testCompatzShlexTest.testCompat   s    s49~~&& 	E 	EAdil1o..AQ	!QRR 0"il1oooqqq$)A,qrr2B2BDE E E E	E 	Er   c                     dD ]x}d|z  d|z  g}dd|ddg}t          j        |d          D ]O\  }}t          j        |d	          }||_        t	          |          }|                     ||d
|d|d           PydS )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 
	LI(94&24C4FE:C#+C?? L LBKd;;;%'"a  ffCE22rrr!JL L L L	L
	L 
	Lr   c                    dD ]|}d|z  d|z  d|z  g}dd|ddg}t          j        |d          D ]O\  }}t          j        |d	
          }||_        t	          |          }|                     ||d|d|d           P}dS )z&Test handling of syntax splitting of ;);z;;r@   rA   rC   zecho hi%s echo byerD   rE   rF   rG   rH   TrI   rK   rL   rM   NrN   rS   s           r   testSyntaxSplitSemicolonz"ShlexTest.testSyntaxSplitSemicolon   s     2 
	L 
	LI(94')3&24C 4FE:C#+C?? L LBKd;;;%'"a  ffCE22rrr!JL L L L	L
	L 
	Lr   c                     dD ]t}d|z  d|z  d|z  g}dd|dg}t          j        |d          D ]H\  }}t          j        |d	
          }t          |          }|                     ||d|d|d           IudS )z&Test handling of syntax splitting of >)<r	   zecho hi %s outzecho hi%s outzecho hi%soutrE   rF   outrH   TrI   rK   rL   rM   N)rO   rP   r$   rR   r%   rS   s           r   testSyntaxSplitRedirectz!ShlexTest.testSyntaxSplitRedirect   s     $ 		L 		LI#i/"Y.!I-/C 4E2C#+C?? L LBKd;;;a  ffCE22rrr!JL L L LL		L 		Lr   c           
          ddg}g d}t          j        |d          D ]O\  }}t          j        |d          }||_        t	          |          }|                     ||d|d|d	           Pd
S )z'Test handling of syntax splitting of ()z( echo hi )z	(echo hi))(rE   rF   )rH   TrI   rK   rL   rM   NrN   )r   rU   rV   rW   rX   r/   rY   s          r   testSyntaxSplitParenzShlexTest.testSyntaxSplitParen   s     &&&'];; 	H 	HFBB$777A!#A!WWFS&&?Arr222FH H H H		H 	Hr   c                 $   d}g d}t          j         |d          }t          |          }|                     ||d|z             g d}t          j         |d          }d|_        t          |          }|                     ||d|z             d	S )
z3Test handling of syntax splitting with custom charsz~/a&&b-c --color=auto||d *.py?)z~/ar?   r?   zb-c--color=autorB   d*.py?r	   rI   zWhile splitting '%s' [ws=False])z~/a&&b-crg   rB   rh   ri   TzWhile splitting '%s' [ws=True]N)r$   rR   r%   rQ   )r   rW   rV   r/   rY   s        r   testSyntaxSplitCustomzShlexTest.testSyntaxSplitCustom   s    -JJJKc222af&G"&LMMM>>>Kc222!af&F&KLLLLLr   c                    dg dffD ]\  }}t          j         |d          }g }	 |                                }||j        k    rn,|d         |j        v rd}nd}|                    ||f           L|                     ||           dS )	z2Test that tokens are split with types as expected.za && b || c))arl   )r>   c)brl   )rB   rm   )rm   rl   TrI   r   rm   rl   N)r$   r-   eofrJ   r.   r%   )r   sourceexpectedr/   observedttts          r   testTokenTypeszShlexTest.testTokenTypes   s     "/"; "; ";!<!  	1 	1FH
 Fd;;;AH)KKMM::Q41...BBBB((() Xx0000!	1 	1r   c                     t          j         dd          }|                     d|j                   |                     t	          |          g d           dS )z:Test that any punctuation chars are removed from wordcharsa_b__c_rI   )rl   rx   rn   __rm   N)r$   assertNotIn	wordcharsr%   rR   r   r/   s     r   testPunctuationInWordCharsz$ShlexTest.testPunctuationInWordChars  sW    KC888ak***a"<"<"<=====r   c                     t          j         dd          }|                     t          |          g d           t          j         dd          }d|_        |                     t          |          g d           dS )z9Test that with whitespace_split, behaviour is as expectedza  && b  ||  cr?   rI   )rl   r>   rn   r	   r	   rm   T)rl   r>   rn   rB   rm   N)r$   r%   rR   rQ   r|   s     r   "testPunctuationWithWhitespaceSplitz,ShlexTest.testPunctuationWithWhitespaceSplit  s    K(C@@@ 	a"A"A"ABBBK(C@@@! 	a"="="=>>>>>r   c                     t          j         ddd          }|                     t          |          g d           t          j         ddd          }|                     t          |          g d           dS )z@Test that punctuation_chars and posix behave correctly together.zf >"abc"TposixrJ   )f>abcz
f >\"abc\")r   r   z"abc"N)r$   r%   rR   r|   s     r   testPunctuationWithPosixz"ShlexTest.testPunctuationWithPosix&  s|     K
$$GGGa"3"3"3444KddKKKa"5"5"566666r   c                 
   g d}dD ]>}t          j         dd|          }t          |          }|                     ||           ?g d}t          j         dd          }|                     t          |          |           dS )	z8Test that parsing of empty strings is correctly handled.) rd   r   rH   z'')abcTr   )''rd   r   rI   N)r$   rR   r%   )r   rq   punctr/   slists        r   testEmptyStringHandlingz!ShlexTest.testEmptyStringHandling.  s     $##" 	. 	.EHDEJJJAGGEUH----%%%KD999a(+++++r   c                 
   d}dg}t          j         |d          }d|_        |                     t          |          |           g d}t          j         |d          }|                     t          |          |           dS )z;Test punctuation_chars and whitespace_split handle unicode.u   ℙƴ☂ℌøἤTrI   )u   ℙu   ƴu   ☂u   ℌ   øu   ἤN)r$   rQ   r%   rR   )r   rW   rV   r/   s       r   testUnicodeHandlingzShlexTest.testUnicodeHandling:  s    356Kd333!a#&&&JJJKd333a#&&&&&r   c                    t           j        t           j        z   dz   }d}d|z   }|                     t	          j        d          d           |                     t	          j        |          |           |                     t	          j        d          d           |D ]0}|                     t	          j        d|z            d	|z             1|D ]0}|                     t	          j        d
|z            d|z             1d S )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.testQuoteG  s   +fm;lJ'N*R$///\22LAAA%5668JKKK 	1 	1AU[)9::+a/1 1 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 ]]\  }}|                      |          5  t          j        |          }|                     ||           d d d            n# 1 swxY w Y   ^d S )Nza rn   z'a ' brl   z bza ' b')rl    rn   za ' ' bz"azb"z	'"a' 'b"'command)subTestr$   joinr%   )r   split_commandr   joineds       r   testJoinzShlexTest.testJoinV  s    C[(#4[(#__i(D\?+	'
 	2 	2"M7 g.. 2 2M22  1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	2 	2s   +A))A-	0A-	c                 
   | j         | j        z   }|D ]p^}}|                     |          5  t          j        |          }t          j        |          }|                     ||           d d d            n# 1 swxY w Y   qd S )Nr   )r   r   r   r$   r   r   r%   )r   all_datar   r   r   resplits         r   testJoinRoundtripzShlexTest.testJoinRoundtripa  s    9t.'/ 	9 	9#Gmg.. 9 9M22+f--  8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9s   ?A77A;	>A;	c                     d}t          j         |          }|                     |j        |           |                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S )Nz/|$%^rI   F)r$   r%   rJ   assertRaisesAttributeError)r   rJ   shlex_instances      r   testPunctuationCharsReadOnlyz&ShlexTest.testPunctuationCharsReadOnlyi  s    #7HIII9;LMMM~.. 	5 	5/4N,	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   A""A&)A&N)__name__
__module____qualname__r   r(   r3   r   patchr+   r,   r8   r:   r<   rZ   r]   ra   re   rj   ru   r}   r   r   r   r   r   r   r   r    r   r   r   r      s       3 3 3; ; ;   TZ[R[]]++  ,+7 7 7E E EL L L"L L L L L LH H HM M M1 1 1(> > >
? 
? 
?7 7 7
, 
, 
,' ' '? ? ?	2 	2 	29 9 95 5 5 5 5r   r   r   testr<   __main__)r+   rO   r$   r   unittestr   r   r   TestCaser   getattrdirmethname
startswithdelattrr   mainr   r   r   <module>r      s   				             
=~>
@d5 d5 d5 d5 d5! d5 d5 d5P wugt$$ )C	NN ) )v&& 	)8|+C+CGIx(((zHMOOOOO r   