~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Lib/test/test_shlex.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
Import upstream version 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: iso-8859-1 -*-
 
2
import unittest
 
3
import os, sys, io
 
4
import shlex
 
5
 
 
6
from test import support
 
7
 
 
8
 
 
9
# The original test data set was from shellwords, by Hartmut Goebel.
 
10
 
 
11
data = r"""x|x|
 
12
foo bar|foo|bar|
 
13
 foo bar|foo|bar|
 
14
 foo bar |foo|bar|
 
15
foo   bar    bla     fasel|foo|bar|bla|fasel|
 
16
x y  z              xxxx|x|y|z|xxxx|
 
17
\x bar|\|x|bar|
 
18
\ x bar|\|x|bar|
 
19
\ bar|\|bar|
 
20
foo \x bar|foo|\|x|bar|
 
21
foo \ x bar|foo|\|x|bar|
 
22
foo \ bar|foo|\|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|
 
33
""|""|
 
34
''|''|
 
35
foo "" bar|foo|""|bar|
 
36
foo '' bar|foo|''|bar|
 
37
foo "" "" "" bar|foo|""|""|""|bar|
 
38
foo '' '' '' bar|foo|''|''|''|bar|
 
39
\""|\|""|
 
40
"\"|"\"|
 
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"|
 
49
\''|\|''|
 
50
'foo\ bar'|'foo\ bar'|
 
51
'foo\\ bar'|'foo\\ bar'|
 
52
"foo\\\x bar\" df'a\ 'df'|"foo\\\x bar\"|df'a|\|'df'|
 
53
\"foo"|\|"foo"|
 
54
\"foo"\x|\|"foo"|\|x|
 
55
"foo\x"|"foo\x"|
 
56
"foo\ "|"foo\ "|
 
57
foo\ xx|foo|\|xx|
 
58
foo\ x\x|foo|\|x|\|x|
 
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'|
 
68
foo\ bar|foo|\|bar|
 
69
foo#bar\nbaz|foobaz|
 
70
:-) ;-)|:|-|)|;|-|)|
 
71
�����|�|�|�|�|�|
 
72
"""
 
73
 
 
74
posix_data = r"""x|x|
 
75
foo bar|foo|bar|
 
76
 foo bar|foo|bar|
 
77
 foo bar |foo|bar|
 
78
foo   bar    bla     fasel|foo|bar|bla|fasel|
 
79
x y  z              xxxx|x|y|z|xxxx|
 
80
\x bar|x|bar|
 
81
\ x bar| x|bar|
 
82
\ bar| bar|
 
83
foo \x bar|foo|x|bar|
 
84
foo \ x bar|foo| x|bar|
 
85
foo \ bar|foo| 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|
 
96
""||
 
97
''||
 
98
foo "" bar|foo||bar|
 
99
foo '' bar|foo||bar|
 
100
foo "" "" "" bar|foo||||bar|
 
101
foo '' '' '' bar|foo||||bar|
 
102
\"|"|
 
103
"\""|"|
 
104
"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|
 
112
\'|'|
 
113
'foo\ bar'|foo\ bar|
 
114
'foo\\ bar'|foo\\ bar|
 
115
"foo\\\x bar\" df'a\ 'df"|foo\\x bar" df'a\ 'df|
 
116
\"foo|"foo|
 
117
\"foo\x|"foox|
 
118
"foo\x"|foo\x|
 
119
"foo\ "|foo\ |
 
120
foo\ xx|foo xx|
 
121
foo\ x\x|foo xx|
 
122
foo\ x\x\"|foo xx"|
 
123
"foo\ x\x"|foo\ x\x|
 
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|\|
 
130
'foo\ bar'|foo\ bar|
 
131
'foo\\ bar'|foo\\ bar|
 
132
foo\ bar|foo bar|
 
133
foo#bar\nbaz|foo|baz|
 
134
:-) ;-)|:-)|;-)|
 
135
�����|�����|
 
136
"""
 
137
 
 
138
class ShlexTest(unittest.TestCase):
 
139
    def setUp(self):
 
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")
 
148
 
 
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:],
 
153
                             "%s: %s != %s" %
 
154
                             (data[i][0], l, data[i][1:]))
 
155
 
 
156
    def oldSplit(self, s):
 
157
        ret = []
 
158
        lex = shlex.shlex(io.StringIO(s))
 
159
        tok = lex.get_token()
 
160
        while tok:
 
161
            ret.append(tok)
 
162
            tok = lex.get_token()
 
163
        return ret
 
164
 
 
165
    def testSplitPosix(self):
 
166
        """Test data splitting with posix parser"""
 
167
        self.splitTest(self.posix_data, comments=True)
 
168
 
 
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:],
 
174
                             "%s: %s != %s" %
 
175
                             (self.data[i][0], l, self.data[i][1:]))
 
176
 
 
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)
 
182
 
 
183
def test_main():
 
184
    support.run_unittest(ShlexTest)
 
185
 
 
186
if __name__ == "__main__":
 
187
    test_main()