o
    HXh5                     @   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sBee	D ]ZedrAed	krAee	e q1ed
krLe  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                   @   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< q'd S )Nc                 S      g | ]}| d dd qS |Nsplit.0x r   9/opt/python-3.10.19/usr/lib/python3.10/test/test_shlex.py
<listcomp>       z#ShlexTest.setUp.<locals>.<listcomp>c                 S   r   r   r   r
   r   r   r   r      r   r   z\n
)data
splitlines
posix_datareplace)selfitemr   r   r   setUp   s   

zShlexTest.setUpc                 C   sd   t t|D ])}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   s:   g }t  t|}| }|r|| | }|s|S N)r   ioStringIO	get_tokenappend)r   sretZlextokr   r   r   oldSplit   s   
zShlexTest.oldSplitz	sys.stdinc                 C   s:   |  t td  W d    d S 1 sw   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 )NTr   )r#   r   r.   r   r   r   testSplitPosix   s   zShlexTest.testSplitPosixc                 C   sl   	 t t| jD ]+}| | j| d }| || j| dd  d| j| d || j| dd  f  qd S )Nr   r   r   )r   r   r   r,   r    )r   r!   r"   r   r   r   
testCompat   s    zShlexTest.testCompatc              	   C   sv   	 dD ]5}d| d| g}dd|ddg}t |dD ]\}}tj|dd	}||_t|}| ||d
||f  qqd S )N)
&&&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]	itertoolsproductr   whitespace_splitlistr    r   	delimitersrcrefsswsr)   resultr   r   r   testSyntaxSplitAmpersandAndPipe   s   
z)ShlexTest.testSyntaxSplitAmpersandAndPipec              	   C   s|   	 dD ]8}d| d| d| g}dd|ddg}t |dD ]\}}tj|d	d
}||_t|}| ||d||f  qqd S )N);z;;r4   r5   r7   zecho hi%s echo byer8   r9   r:   r;   r<   Tr=   r?   r@   rE   r   r   r   testSyntaxSplitSemicolon   s    
z"ShlexTest.testSyntaxSplitSemicolonc              	   C   st   	 dD ]4}d| d| d| g}dd|dg}t |dD ]\}}tj|d	d
}t|}| ||d||f  qqd S )N)<r   zecho hi %s outzecho hi%s outzecho hi%soutr9   r:   outr<   Tr=   r?   )rA   rB   r   rD   r    rE   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 )Nz( echo hi )z	(echo hi))(r9   r:   )r<   Tr=   r?   r@   )r   rG   rH   rI   rJ   r)   rK   r   r   r   testSyntaxSplitParen   s   
zShlexTest.testSyntaxSplitParenc                 C   sp   	 d}g d}t j |dd}t|}| ||d|  g d}t j |dd}d|_t|}| ||d|  d S )	Nz~/a&&b-c --color=auto||d *.py?)z~/ar3   r3   zb-c--color=autor6   d*.py?r   r=   zWhile splitting '%s' [ws=False])z~/a&&b-crU   r6   rV   rW   TzWhile splitting '%s' [ws=True])r   rD   r    rC   )r   rI   rH   r)   rK   r   r   r   testSyntaxSplitCustom   s   zShlexTest.testSyntaxSplitCustomc                 C   sz   	 dg dffD ]2\}}t j |dd}g }	 | }||jkr n|d |jv r*d}nd}|||f q| || qd S )Nza && b || c))arY   )r2   c)brY   )r6   rZ   )rZ   rY   Tr=   r   rZ   rY   )r   r'   eofr>   r(   r    )r   sourceexpectedr)   Zobservedtttr   r   r   testTokenTypes   s$   
	zShlexTest.testTokenTypesc                 C   s6   	 t j ddd}| d|j | t|g d d S )NZa_b__c_r=   )rY   rb   r[   __rZ   )r   ZassertNotInZ	wordcharsr    rD   r   r)   r   r   r   testPunctuationInWordChars  s   z$ShlexTest.testPunctuationInWordCharsc                 C   sP   	 t j ddd}| t|g d t j ddd}d|_| t|g d d S )Nza  && b  ||  cr3   r=   )rY   r2   r[   r   r   rZ   T)rY   r2   r[   r6   rZ   )r   r    rD   rC   rd   r   r   r   "testPunctuationWithWhitespaceSplit  s   z,ShlexTest.testPunctuationWithWhitespaceSplitc                 C   sN   	 t j dddd}| t|g d t j dddd}| t|g d d S )Nzf >"abc"Tposixr>   )f>abcz
f >\"abc\")ri   rj   z"abc")r   r    rD   rd   r   r   r   testPunctuationWithPosix&  s
   z"ShlexTest.testPunctuationWithPosixc                 C   sb   	 g d}dD ]}t j dd|d}t|}| || qg d}t j ddd}| t|| d S )N) rS   rk   r<   z'')abcTrg   )''rS   rk   r=   )r   rD   r    )r   r^   punctr)   Zslistr   r   r   testEmptyStringHandling.  s   z!ShlexTest.testEmptyStringHandlingc                 C   sZ   	 d}dg}t j |dd}d|_| t|| g d}t j |dd}| t|| d S )Nu   ℙƴ☂ℌøἤTr=   )u   ℙu   ƴu   ☂u   ℌ   øu   ἤ)r   rC   r    rD   )r   rI   rH   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	|  q+|D ]}| td
| d|  q=d S )Nz
@%_-+=:,./u   éàßz"`$\!rm   rn   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 |d t|}| || W d    n1 s6w   Y  qd S )Nza r[   z'a ' brY   z bza ' b')rY    r[   za ' ' bz"azb"z	'"a' 'b"'command)subTestr   joinr    )r   split_commandr{   joinedr   r   r   testJoinV  s   




zShlexTest.testJoinc              	   C   sj   | j | j }|D ]*^}}| j|d t|}t|}| || W d    n1 s-w   Y  qd S )Nrz   )r   r   r|   r   r}   r	   r    )r   Zall_datar{   r~   r   Zresplitr   r   r   testJoinRoundtripa  s   

zShlexTest.testJoinRoundtripc                 C   sT   d}t j |d}| |j| | t d|_W d    d S 1 s#w   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/   r0   r1   rL   rN   rQ   rT   rX   ra   re   rf   rl   rp   rr   rx   r   r   r   r   r   r   r   r      s.    
	
r   r	   testr1   __main__)r%   rA   r   rs   Zunittestr   r   r   ZTestCaser   getattrdirZmethname
startswithdelattrr   mainr   r   r   r   <module>   s$    ?@ i
