
    <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 )NTr   )r(   r   r7   s    r   testSplitPosixzShlexTest.testSplitPosix   s#    3t66666r   c                 H   	 t          t          | j                            D ]~}|                     | j        |         d                   }|                     || j        |         dd          | j        |         d         d|d| j        |         dd                     d S )Nr   r   r    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 )N)
&&&z|&;&;;&||r	   z&|z;|z;;|echo hi %s echo byeecho hi%secho byeechohibyeFTTpunctuation_charsWhile splitting '' [ws=]	itertoolsproductr$   whitespace_splitlistr%   r   	delimitersrcrefsswsr/   results           r   testSyntaxSplitAmpersandAndPipez)ShlexTest.testSyntaxSplitAmpersandAndPipe   s    7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 )N);z;;r@   rA   rC   zecho hi%s echo byerD   rE   rF   rG   rH   TrI   rK   rL   rM   rN   rS   s           r   testSyntaxSplitSemicolonz"ShlexTest.testSyntaxSplitSemicolon   s    4 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 )N)<r	   zecho hi %s outzecho hi%s outzecho hi%soutrE   rF   outrH   TrI   rK   rL   rM   )rO   rP   r$   rR   r%   rS   s           r   testSyntaxSplitRedirectz!ShlexTest.testSyntaxSplitRedirect   s    4 $ 		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 )
Nz( echo hi )z	(echo hi))(rE   rF   )rH   TrI   rK   rL   rM   rN   )r   rU   rV   rW   rX   r/   rY   s          r   testSyntaxSplitParenzShlexTest.testSyntaxSplitParen   s    5&&&'];; 	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 )	Nz~/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])r$   rR   r%   rQ   )r   rW   rV   r/   rY   s        r   testSyntaxSplitCustomzShlexTest.testSyntaxSplitCustom   s    A-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 )Nza && b || c))arl   )r>   c)brl   )rB   rm   )rm   rl   TrI   r   rm   rl   )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 )Na_b__c_rI   )rl   rx   rn   __rm   )r$   assertNotIn	wordcharsr%   rR   r   r/   s     r   testPunctuationInWordCharsz$ShlexTest.testPunctuationInWordChars  sZ    H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 )Nza  && b  ||  cr?   rI   )rl   r>   rn   r	   r	   rm   T)rl   r>   rn   rB   rm   )r$   r%   rR   rQ   r|   s     r   "testPunctuationWithWhitespaceSplitz,ShlexTest.testPunctuationWithWhitespaceSplit  s    G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 )Nzf >"abc"TposixrJ   )f>abcz
f >\"abc\")r   r   z"abc")r$   r%   rR   r|   s     r   testPunctuationWithPosixz"ShlexTest.testPunctuationWithPosix&  s}    N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 )N) rd   r   rH   z'')abcTr   )''rd   r   rI   )r$   rR   r%   )r   rq   punctr/   slists        r   testEmptyStringHandlingz!ShlexTest.testEmptyStringHandling.  s    F###" 	. 	.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 )Nu   ℙƴ☂ℌøἤTrI   )u   ℙu   ƴu   ☂u   ℌ   øu   ἤ)r$   rQ   r%   rR   )r   rW   rV   r/   s       r   testUnicodeHandlingzShlexTest.testUnicodeHandling:  s    I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   