a
    ze5                     @   s   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 dejZ	e
eddsee	D ] Zedrbed	krbee	e qbed
kre  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                   @   s   e Zd Zdd Zdd Zdd Zede	 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 )-	ShlexTestc                 C   sl   dd t  D | _ dd t D | _| j D ]}|d dd|d< q.| jD ]}|d dd|d< qNd S )Nc                 S   s   g | ]}| d dd qS |Nsplit.0x r   %/usr/lib/python3.9/test/test_shlex.py
<listcomp>   s   z#ShlexTest.setUp.<locals>.<listcomp>c                 S   s   g | ]}| d dd qS r   r   r	   r   r   r   r      s   r   z\n
)data
splitlines
posix_datareplace)selfitemr   r   r   setUp   s    

zShlexTest.setUpc                 C   sd   t t|D ]R}tj|| d |d}| ||| dd  d|| d ||| dd  f  qd S )Nr   comments   %s: %s != %s)rangelenshlexr   assertEqual)r   r   r   ilr   r   r   	splitTest   s    zShlexTest.splitTestc                 C   s8   g }t  t|}| }|r4|| | }q|S N)r   ioStringIO	get_tokenappend)r   sretZlextokr   r   r   oldSplit   s    

zShlexTest.oldSplitz	sys.stdinc                 C   s8   |  t td  W d    n1 s*0    Y  d S r"   )ZassertWarnsDeprecationWarningr   r   r   r   r   r   testSplitNoneDeprecation   s    z"ShlexTest.testSplitNoneDeprecationc                 C   s   | j | jdd dS )z%Test data splitting with posix parserTr   N)r!   r   r,   r   r   r   testSplitPosix   s    zShlexTest.testSplitPosixc                 C   sj   t t| jD ]V}| | j| d }| || j| dd d| j| d || j| dd f  qdS )zTest compatibility interfacer   r   Nr   )r   r   r   r*   r   )r   r   r    r   r   r   
testCompat   s     zShlexTest.testCompatc              	   C   st   dD ]j}d| d| g}dd|ddg}t |dD ]:\}}tj|dd	}||_t|}| ||d
||f  q2qd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 '%s' [ws=%s]N	itertoolsproductr   whitespace_splitlistr   r   	delimitersrcrefsswsr'   resultr   r   r   testSyntaxSplitAmpersandAndPipe   s    
z)ShlexTest.testSyntaxSplitAmpersandAndPipec              	   C   sz   dD ]p}d| d| d| g}dd|ddg}t |dD ]:\}}tj|d	d
}||_t|}| ||d||f  q8qdS )z&Test handling of syntax splitting of ;);z;;r2   r3   r5   zecho hi%s echo byer6   r7   r8   r9   r:   Tr;   r=   Nr>   rC   r   r   r   testSyntaxSplitSemicolon   s    
z"ShlexTest.testSyntaxSplitSemicolonc              	   C   sr   dD ]h}d| d| d| g}dd|dg}t |dD ]4\}}tj|d	d
}t|}| ||d||f  q6qdS )z&Test handling of syntax splitting of >)<r   zecho hi %s outzecho hi%s outzecho hi%soutr7   r8   outr:   Tr;   r=   N)r?   r@   r   rB   r   rC   r   r   r   testSyntaxSplitRedirect   s    
z!ShlexTest.testSyntaxSplitRedirectc                 C   s\   ddg}g d}t |dD ]:\}}tj|dd}||_t|}| ||d||f  qdS )	z'Test handling of syntax splitting of ()z( echo hi )z	(echo hi))(r7   r8   )r:   Tr;   r=   Nr>   )r   rE   rF   rG   rH   r'   rI   r   r   r   testSyntaxSplitParen   s    
zShlexTest.testSyntaxSplitParenc                 C   sn   d}g d}t j |dd}t|}| ||d|  g d}t j |dd}d|_t|}| ||d|  d	S )
z3Test handling of syntax splitting with custom charsz~/a&&b-c --color=auto||d *.py?)z~/ar1   r1   zb-c--color=autor4   d*.py?r   r;   zWhile splitting '%s' [ws=False])z~/a&&b-crS   r4   rT   rU   TzWhile splitting '%s' [ws=True]N)r   rB   r   rA   )r   rG   rF   r'   rI   r   r   r   testSyntaxSplitCustom   s    zShlexTest.testSyntaxSplitCustomc                 C   sv   dg dffD ]b\}}t j |dd}g }| }||jkr<qd|d |jv rPd}nd}|||f q(| || qdS )	z2Test that tokens are split with types as expected.za && b || c))arW   )r0   c)brW   )r4   rX   )rX   rW   Tr;   r   rX   rW   N)r   r%   eofr<   r&   r   )r   sourceexpectedr'   Zobservedtttr   r   r   testTokenTypes   s    
zShlexTest.testTokenTypesc                 C   s4   t j ddd}| d|j | t|g d dS )z:Test that any punctuation chars are removed from wordcharsZa_b__c_r;   )rW   r`   rY   __rX   N)r   ZassertNotInZ	wordcharsr   rB   r   r'   r   r   r   testPunctuationInWordChars  s    z$ShlexTest.testPunctuationInWordCharsc                 C   sN   t j ddd}| t|g d t j ddd}d|_| t|g d dS )z9Test that with whitespace_split, behaviour is as expectedza  && b  ||  cr1   r;   )rW   r0   rY   r   r   rX   T)rW   r0   rY   r4   rX   N)r   r   rB   rA   rb   r   r   r   "testPunctuationWithWhitespaceSplit  s
    z,ShlexTest.testPunctuationWithWhitespaceSplitc                 C   sL   t j dddd}| t|g d t j dddd}| t|g d dS )z@Test that punctuation_chars and posix behave correctly together.zf >"abc"Tposixr<   )f>abcz
f >\"abc\")rg   rh   z"abc"N)r   r   rB   rb   r   r   r   testPunctuationWithPosix&  s    z"ShlexTest.testPunctuationWithPosixc                 C   s`   g d}dD ](}t j dd|d}t|}| || qg d}t j ddd}| t|| dS )	z8Test that parsing of empty strings is correctly handled.) rQ   ri   r:   z'')abcTre   )''rQ   ri   r;   N)r   rB   r   )r   r\   punctr'   Zslistr   r   r   testEmptyStringHandling.  s    z!ShlexTest.testEmptyStringHandlingc                 C   sX   d}dg}t j |dd}d|_| t|| g d}t j |dd}| t|| dS )z;Test punctuation_chars and whitespace_split handle unicode.u   ℙƴ☂ℌøἤTr;   )u   ℙu   ƴu   ☂u   ℌ   øu   ἤN)r   rA   r   rB   )r   rG   rF   r'   r   r   r   testUnicodeHandling:  s    zShlexTest.testUnicodeHandlingc                 C   s   t jt j d }d}d| }| tdd | t|| | tdd |D ]}| td| d	|  qV|D ]}| td
| d|  qzd S )Nz
@%_-+=:,./u   éàßz"`$\!rk   rl   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   ZsafeunquotedZunicode_sampleZunsafeur   r   r   	testQuoteG  s    zShlexTest.testQuotec              	   C   s|   ddgdfddgdfg ddfd	d
gdffD ]J\}}| j |d& t|}| || W d    q,1 sl0    Y  q,d S )Nza rY   z'a ' brW   z bza ' b')rW    rY   za ' ' bz"azb"z	'"a' 'b"'command)subTestr   joinr   )r   split_commandry   joinedr   r   r   testJoinV  s    




zShlexTest.testJoinc              	   C   sj   | j | j }|D ]T^}}| j|d0 t|}t|}| || W d    q1 sZ0    Y  qd S )Nrx   )r   r   rz   r   r{   r   r   )r   Zall_datary   r|   r}   Zresplitr   r   r   testJoinRoundtripa  s    

zShlexTest.testJoinRoundtripc                 C   sR   d}t j |d}| |j| | t d|_W d    n1 sD0    Y  d S )Nz/|$%^r;   F)r   r   r<   ZassertRaisesAttributeError)r   r<   Zshlex_instancer   r   r   testPunctuationCharsReadOnlyi  s
    z&ShlexTest.testPunctuationCharsReadOnlyN)__name__
__module____qualname__r   r!   r*   r   Zpatchr#   r$   r-   r.   r/   rJ   rL   rO   rR   rV   r_   rc   rd   rj   rn   rp   rv   r~   r   r   r   r   r   r   r      s,   
	
r   r   testr/   __main__)r#   r?   r   rq   Zunittestr   r   r   ZTestCaser   getattrdirZmethname
startswithdelattrr   mainr   r   r   r   <module>   s   ?@ i