a ze5@sddlZddlZddlZddlZddlZddlmZdZdZGdddejZ e eddse e D] Z e drbe d krbee e qbed kredS) N)mockux|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| :-) ;-)|:|-|)|;|-|)| áéíóú|á|é|í|ó|ú| u1x|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@seZdZddZddZddZede dd Z d d Z d d Z ddZ ddZddZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,S)- ShlexTestcCslddtD|_ddtD|_|jD]}|ddd|d<q.|jD]}|ddd|d<qNdS)NcSsg|]}|dddqS|Nsplit.0xr C/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_shlex.py sz#ShlexTest.setUp..cSsg|]}|dddqSrrr r r r rsrz\n )data splitlines posix_datareplace)selfitemr r r setUps  zShlexTest.setUpc Csdtt|D]R}tj||d|d}||||ddd||d|||ddfq dS)Nrcomments %s: %s != %s)rangelenshlexr assertEqual)rrrilr r r splitTestszShlexTest.splitTestcCs8g}tt|}|}|r4|||}q|SN)rioStringIO get_tokenappend)rsretZlextokr r r oldSplits  zShlexTest.oldSplitz sys.stdincCs8|ttdWdn1s*0YdSr")Z assertWarnsDeprecationWarningrrrr r r testSplitNoneDeprecations z"ShlexTest.testSplitNoneDeprecationcCs|j|jdddS)z%Test data splitting with posix parserTrN)r!rr,r r r testSplitPosixszShlexTest.testSplitPosixc Csjtt|jD]V}||j|d}|||j|ddd|j|d||j|ddfqdS)zTest compatibility interfacerrNr)rrrr*r)rrr r r r testCompats zShlexTest.testCompatc CstdD]j}d|d|g}dd|ddg}t|dD]:\}}tj|dd }||_t|}|||d ||fq2qd S) z)Test handling of syntax splitting of &, |) &&&z|&;&;;&||rz&|z;|z;;|echo hi %s echo byeecho hi%secho byeechohibyeFTTpunctuation_charsWhile splitting '%s' [ws=%s]N itertoolsproductrwhitespace_splitlistrr delimitersrcrefsswsr'resultr r r testSyntaxSplitAmpersandAndPipes z)ShlexTest.testSyntaxSplitAmpersandAndPipec CszdD]p}d|d|d|g}dd|ddg}t|dD]:\}}tj|d d }||_t|}|||d ||fq8qd S) z&Test handling of syntax splitting of ;);z;;r2r3r5zecho hi%s echo byer6r7r8r9r:Tr;r=Nr>rCr r r testSyntaxSplitSemicolons z"ShlexTest.testSyntaxSplitSemicolonc CsrdD]h}d|d|d|g}dd|dg}t|dD]4\}}tj|d d }t|}|||d ||fq6qd S) z&Test handling of syntax splitting of >))rrErFrGrHr'rIr r r testSyntaxSplitParens zShlexTest.testSyntaxSplitParencCsnd}gd}tj|dd}t|}|||d|gd}tj|dd}d|_t|}|||d|d S) z3Test handling of syntax splitting with custom charsz~/a&&b-c --color=auto||d *.py?)z~/ar1r1zb-c --color=autor4d*.py?rr;zWhile splitting '%s' [ws=False])z~/a&&b-crSr4rTrUTzWhile splitting '%s' [ws=True]N)rrBrrA)rrGrFr'rIr r r testSyntaxSplitCustomszShlexTest.testSyntaxSplitCustomcCsvdgdffD]b\}}tj|dd}g}|}||jkr"abc"Tposixr<)f>abcz f >\"abc\")rgrhz"abc"N)rrrBrbr r r testPunctuationWithPosix&sz"ShlexTest.testPunctuationWithPosixcCs`gd}dD](}tjdd|d}t|}|||q gd}tjddd}|t||dS) z8Test that parsing of empty strings is correctly handled.)rQrir:z'')abcTre)''rQrir;N)rrBr)rr\punctr'Zslistr r r testEmptyStringHandling.sz!ShlexTest.testEmptyStringHandlingcCsXd}dg}tj|dd}d|_|t||gd}tj|dd}|t||dS)z;Test punctuation_chars and whitespace_split handle unicode.uℙƴ☂ℌøἤTr;)uℙuƴu☂uℌøuἤN)rrArrB)rrGrFr'r r r testUnicodeHandling:szShlexTest.testUnicodeHandlingcCstjtjd}d}d|}|tdd|t|||tdd|D]}|td|d |qV|D]}|td |d |qzdS) Nz @%_-+=:,./uéàßz"`$\!rkrlztest file namez'test file name'z test%snamez 'test%sname'z test%s'name'z'test%s'"'"'name'"'"'')string ascii_lettersdigitsrrquote)rZ safeunquotedZunicode_sampleZunsafeur r r testQuoteGszShlexTest.testQuotec Cs|ddgdfddgdfgddfd d gd ffD]J\}}|j|d &t|}|||Wdq,1sl0Yq,dS) Nza rYz'a ' brWz bza ' b')rW rYza ' ' bz"azb"z '"a' 'b"'command)subTestrjoinr)r split_commandryjoinedr r r testJoinVs     zShlexTest.testJoinc Csj|j|j}|D]T^}}|j|d0t|}t|}|||Wdq1sZ0YqdS)Nrx)rrrzrr{rr)rZall_dataryr|r}Zresplitr r r testJoinRoundtripas     zShlexTest.testJoinRoundtripcCsRd}tj|d}||j||td|_Wdn1sD0YdS)Nz/|$%^r;F)rrr<Z assertRaisesAttributeError)rr<Zshlex_instancer r r testPunctuationCharsReadOnlyis   z&ShlexTest.testPunctuationCharsReadOnlyN)__name__ __module__ __qualname__rr!r*rZpatchr#r$r-r.r/rJrLrOrRrVr_rcrdrjrnrprvr~rrr r r r rs,         rrtestr/__main__)r#r?rrqZunittestrrrZTestCasergetattrdirZmethname startswithdelattrrmainr r r r s ?@i