1 # -*- coding: iso-8859-1 -*-
6 from test
import test_support
9 from cStringIO
import StringIO
11 from StringIO
import StringIO
14 # The original test data set was from shellwords, by Hartmut Goebel.
20 foo bar bla fasel|foo|bar|bla|fasel|
21 x y z xxxx|x|y|z|xxxx|
25 foo \x bar|foo|\|x|bar|
26 foo \ x bar|foo|\|x|bar|
28 foo "bar" bla|foo|"bar"|bla|
29 "foo" "bar" "bla"|"foo"|"bar"|"bla"|
30 "foo" bar "bla"|"foo"|bar|"bla"|
31 "foo" bar bla|"foo"|bar|bla|
32 foo 'bar' bla|foo|'bar'|bla|
33 'foo' 'bar' 'bla'|'foo'|'bar'|'bla'|
34 'foo' bar 'bla'|'foo'|bar|'bla'|
35 'foo' bar bla|'foo'|bar|bla|
36 blurb foo"bar"bar"fasel" baz|blurb|foo"bar"bar"fasel"|baz|
37 blurb foo'bar'bar'fasel' baz|blurb|foo'bar'bar'fasel'|baz|
40 foo "" bar|foo|""|bar|
41 foo '' bar|foo|''|bar|
42 foo "" "" "" bar|foo|""|""|""|bar|
43 foo '' '' '' bar|foo|''|''|''|bar|
46 "foo\ bar
"|"foo\ bar
"|
47 "foo
\\ bar
"|"foo
\\ bar
"|
48 "foo
\\ bar
\"|
"foo\\ bar\"|
49 "foo
\\" bar\""|
"foo\\"|bar|\|
""|
50 "foo\\ bar\" dfadf"|
"foo\\ bar\"|dfadf"|
51 "foo\\\ bar\" dfadf"|
"foo\\\ bar\"|dfadf"|
52 "foo\\\x bar\" dfadf"|
"foo\\\x bar\"|dfadf"|
53 "foo\x bar\" dfadf"|
"foo\x bar\"|dfadf"|
55 'foo\ bar
'|'foo\ bar
'|
56 'foo
\\ bar
'|'foo
\\ bar
'|
57 "foo\\\x bar\" df'a\
'df'|
"foo\\\x bar\"|df'a|\|'df'|
64 foo\ x\x\""|foo|\|x|\|x|\|
""|
65 "foo\ x\x"|
"foo\ x\x"|
66 "foo\ x\x\\"|
"foo\ x\x\\"|
67 "foo\ x\x\\""foobar"|
"foo\ x\x\\"|
"foobar"|
68 "foo\ x\x\\"\''"foobar"|"foo\ x\x\\"|\|''|"foobar"|
69 "foo\ x\x\\"\'"fo'obar
"|"foo\ x\x
\\"|\|'"fo
'|obar"|
70 "foo\ x\x\\"\'"fo'obar
" 'don'\''t'|"foo\ x\x
\\"|\|'"fo
'|obar"|'don
'|\|''|t'|
71 'foo\ bar'|
'foo\ bar'|
72 'foo\\ bar'|
'foo\\ bar'|
83 foo bar bla fasel|foo|bar|bla|fasel|
84 x y z xxxx|x|y|z|xxxx|
89 foo \ x bar|foo| x|bar|
91 foo
"bar" bla|foo|bar|bla|
92 "foo" "bar" "bla"|foo|bar|bla|
93 "foo" bar
"bla"|foo|bar|bla|
94 "foo" bar bla|foo|bar|bla|
95 foo
'bar' bla|foo|bar|bla|
96 'foo' 'bar' 'bla'|foo|bar|bla|
97 'foo' bar
'bla'|foo|bar|bla|
98 'foo' bar bla|foo|bar|bla|
99 blurb foo
"bar"bar
"fasel" baz|blurb|foobarbarfasel|baz|
100 blurb foo
'bar'bar
'fasel' baz|blurb|foobarbarfasel|baz|
105 foo
"" "" "" bar|foo||||bar|
106 foo
'' '' '' bar|foo||||bar|
110 "foo\\ bar"|foo\ bar|
111 "foo\\ bar\""|foo\ bar
"|
112 "foo
\\" bar\"|foo\|bar"|
113 "foo\\ bar\" dfadf"|foo\ bar
" dfadf|
114 "foo
\\\ bar
\" dfadf
"|foo\\ bar" dfadf|
115 "foo\\\x bar\" dfadf"|foo
\\x bar
" dfadf|
116 "foo\x bar
\" dfadf
"|foo\x bar" dfadf|
119 'foo
\\ bar
'|foo\\ bar|
120 "foo\\\x bar\" df'a\
'df"|foo\\x bar" df'a\
'df|
129 "foo\ x\x\\"|foo\ x\x\|
130 "foo\ x\x\\""foobar"|foo\ x\x\foobar|
131 "foo\ x\x\\"\'"foobar"|foo\ x\x\'foobar|
132 "foo\ x\x\\"\'"fo'obar
"|foo\ x\x\'fo'obar|
133 "foo\ x\x
\\"\'"fo
'obar" 'don
'\''t
'|foo\ x\x\'fo'obar|don
't|
134 "foo\ x\x\\"\'"fo'obar
" 'don'\''t' \\|foo\ x\x\'fo'obar|don't|\|
136 'foo\\ bar'|foo\\ bar|
138 foo#bar\nbaz|foo|baz|
143 class ShlexTest(unittest.TestCase):
145 self.data = [x.split("|
")[:-1]
146 for x in data.splitlines()]
147 self.posix_data = [x.split("|
")[:-1]
148 for x in posix_data.splitlines()]
149 for item in self.data:
150 item[0] = item[0].replace(r"\n", "\n")
151 for item in self.posix_data:
152 item[0] = item[0].replace(r"\n", "\n")
154 def splitTest(self, data, comments):
155 for i in range(len(data)):
156 l = shlex.split(data[i][0], comments=comments)
157 self.assertEqual(l, data[i][1:],
159 (data[i][0], l, data[i][1:]))
161 def oldSplit(self, s):
163 lex = shlex.shlex(StringIO(s))
164 tok = lex.get_token()
167 tok = lex.get_token()
170 def testSplitPosix(self):
171 """Test data splitting with posix parser"""
172 self.splitTest(self.posix_data, comments=True)
174 def testCompat(self):
175 """Test compatibility interface"""
176 for i in range(len(self.data)):
177 l = self.oldSplit(self.data[i][0])
178 self.assertEqual(l, self.data[i][1:],
180 (self.data[i][0], l, self.data[i][1:]))
182 # Allow this test to be used with old shlex.py
183 if not getattr(shlex, "split
", None):
184 for methname in dir(ShlexTest):
185 if methname.startswith("test
") and methname != "testCompat
":
186 delattr(ShlexTest, methname)
189 test_support.run_unittest(ShlexTest)
191 if __name__ == "__main__
":