1
# -*- coding: iso-8859-1 -*-
6
from test import support
9
# The original test data set was from shellwords, by Hartmut Goebel.
15
foo bar bla fasel|foo|bar|bla|fasel|
16
x y z xxxx|x|y|z|xxxx|
20
foo \x bar|foo|\|x|bar|
21
foo \ x bar|foo|\|x|bar|
23
foo "bar" bla|foo|"bar"|bla|
24
"foo" "bar" "bla"|"foo"|"bar"|"bla"|
25
"foo" bar "bla"|"foo"|bar|"bla"|
26
"foo" bar bla|"foo"|bar|bla|
27
foo 'bar' bla|foo|'bar'|bla|
28
'foo' 'bar' 'bla'|'foo'|'bar'|'bla'|
29
'foo' bar 'bla'|'foo'|bar|'bla'|
30
'foo' bar bla|'foo'|bar|bla|
31
blurb foo"bar"bar"fasel" baz|blurb|foo"bar"bar"fasel"|baz|
32
blurb foo'bar'bar'fasel' baz|blurb|foo'bar'bar'fasel'|baz|
35
foo "" bar|foo|""|bar|
36
foo '' bar|foo|''|bar|
37
foo "" "" "" bar|foo|""|""|""|bar|
38
foo '' '' '' bar|foo|''|''|''|bar|
41
"foo\ bar"|"foo\ bar"|
42
"foo\\ bar"|"foo\\ bar"|
43
"foo\\ bar\"|"foo\\ bar\"|
44
"foo\\" bar\""|"foo\\"|bar|\|""|
45
"foo\\ bar\" dfadf"|"foo\\ bar\"|dfadf"|
46
"foo\\\ bar\" dfadf"|"foo\\\ bar\"|dfadf"|
47
"foo\\\x bar\" dfadf"|"foo\\\x bar\"|dfadf"|
48
"foo\x bar\" dfadf"|"foo\x bar\"|dfadf"|
50
'foo\ bar'|'foo\ bar'|
51
'foo\\ bar'|'foo\\ bar'|
52
"foo\\\x bar\" df'a\ 'df'|"foo\\\x bar\"|df'a|\|'df'|
59
foo\ x\x\""|foo|\|x|\|x|\|""|
60
"foo\ x\x"|"foo\ x\x"|
61
"foo\ x\x\\"|"foo\ x\x\\"|
62
"foo\ x\x\\""foobar"|"foo\ x\x\\"|"foobar"|
63
"foo\ x\x\\"\''"foobar"|"foo\ x\x\\"|\|''|"foobar"|
64
"foo\ x\x\\"\'"fo'obar"|"foo\ x\x\\"|\|'"fo'|obar"|
65
"foo\ x\x\\"\'"fo'obar" 'don'\''t'|"foo\ x\x\\"|\|'"fo'|obar"|'don'|\|''|t'|
66
'foo\ bar'|'foo\ bar'|
67
'foo\\ bar'|'foo\\ bar'|
78
foo bar bla fasel|foo|bar|bla|fasel|
79
x y z xxxx|x|y|z|xxxx|
84
foo \ x bar|foo| x|bar|
86
foo "bar" bla|foo|bar|bla|
87
"foo" "bar" "bla"|foo|bar|bla|
88
"foo" bar "bla"|foo|bar|bla|
89
"foo" bar bla|foo|bar|bla|
90
foo 'bar' bla|foo|bar|bla|
91
'foo' 'bar' 'bla'|foo|bar|bla|
92
'foo' bar 'bla'|foo|bar|bla|
93
'foo' bar bla|foo|bar|bla|
94
blurb foo"bar"bar"fasel" baz|blurb|foobarbarfasel|baz|
95
blurb foo'bar'bar'fasel' baz|blurb|foobarbarfasel|baz|
100
foo "" "" "" bar|foo||||bar|
101
foo '' '' '' bar|foo||||bar|
105
"foo\\ bar"|foo\ bar|
106
"foo\\ bar\""|foo\ bar"|
107
"foo\\" bar\"|foo\|bar"|
108
"foo\\ bar\" dfadf"|foo\ bar" dfadf|
109
"foo\\\ bar\" dfadf"|foo\\ bar" dfadf|
110
"foo\\\x bar\" dfadf"|foo\\x bar" dfadf|
111
"foo\x bar\" dfadf"|foo\x bar" dfadf|
114
'foo\\ bar'|foo\\ bar|
115
"foo\\\x bar\" df'a\ 'df"|foo\\x bar" df'a\ 'df|
124
"foo\ x\x\\"|foo\ x\x\|
125
"foo\ x\x\\""foobar"|foo\ x\x\foobar|
126
"foo\ x\x\\"\'"foobar"|foo\ x\x\'foobar|
127
"foo\ x\x\\"\'"fo'obar"|foo\ x\x\'fo'obar|
128
"foo\ x\x\\"\'"fo'obar" 'don'\''t'|foo\ x\x\'fo'obar|don't|
129
"foo\ x\x\\"\'"fo'obar" 'don'\''t' \\|foo\ x\x\'fo'obar|don't|\|
131
'foo\\ bar'|foo\\ bar|
133
foo#bar\nbaz|foo|baz|
138
class ShlexTest(unittest.TestCase):
140
self.data = [x.split("|")[:-1]
141
for x in data.splitlines()]
142
self.posix_data = [x.split("|")[:-1]
143
for x in posix_data.splitlines()]
144
for item in self.data:
145
item[0] = item[0].replace(r"\n", "\n")
146
for item in self.posix_data:
147
item[0] = item[0].replace(r"\n", "\n")
149
def splitTest(self, data, comments):
150
for i in range(len(data)):
151
l = shlex.split(data[i][0], comments=comments)
152
self.assertEqual(l, data[i][1:],
154
(data[i][0], l, data[i][1:]))
156
def oldSplit(self, s):
158
lex = shlex.shlex(io.StringIO(s))
159
tok = lex.get_token()
162
tok = lex.get_token()
165
def testSplitPosix(self):
166
"""Test data splitting with posix parser"""
167
self.splitTest(self.posix_data, comments=True)
169
def testCompat(self):
170
"""Test compatibility interface"""
171
for i in range(len(self.data)):
172
l = self.oldSplit(self.data[i][0])
173
self.assertEqual(l, self.data[i][1:],
175
(self.data[i][0], l, self.data[i][1:]))
177
# Allow this test to be used with old shlex.py
178
if not getattr(shlex, "split", None):
179
for methname in dir(ShlexTest):
180
if methname.startswith("test") and methname != "testCompat":
181
delattr(ShlexTest, methname)
184
support.run_unittest(ShlexTest)
186
if __name__ == "__main__":