/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
1
# Copyright (C) 2009 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
17
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
18
from bzrlib import (
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
19
    osutils,
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
20
    tests,
21
    )
22
from bzrlib.tests import script
23
24
4665.5.19 by Vincent Ladeuil
Implement globbing and enhance cat to accept multiple files.
25
class TestSyntax(tests.TestCase):
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
26
27
    def test_comment_is_ignored(self):
28
        self.assertEquals([], script._script_to_commands('#comment\n'))
29
30
    def test_empty_line_is_ignored(self):
31
        self.assertEquals([], script._script_to_commands('\n'))
32
33
    def test_simple_command(self):
4665.5.3 by Vincent Ladeuil
Separate error from normal output.
34
        self.assertEquals([(['cd', 'trunk'], None, None, None)],
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
35
                           script._script_to_commands('$ cd trunk'))
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
36
4665.5.2 by Vincent Ladeuil
Handle simple, double and back quotes.
37
    def test_command_with_single_quoted_param(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
38
        story = """$ bzr commit -m 'two words'"""
4665.5.19 by Vincent Ladeuil
Implement globbing and enhance cat to accept multiple files.
39
        self.assertEquals([(['bzr', 'commit', '-m', "'two words'"],
4665.5.3 by Vincent Ladeuil
Separate error from normal output.
40
                            None, None, None)],
4665.5.2 by Vincent Ladeuil
Handle simple, double and back quotes.
41
                           script._script_to_commands(story))
42
43
    def test_command_with_double_quoted_param(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
44
        story = """$ bzr commit -m "two words" """
4665.5.19 by Vincent Ladeuil
Implement globbing and enhance cat to accept multiple files.
45
        self.assertEquals([(['bzr', 'commit', '-m', '"two words"'],
4665.5.3 by Vincent Ladeuil
Separate error from normal output.
46
                            None, None, None)],
4665.5.2 by Vincent Ladeuil
Handle simple, double and back quotes.
47
                           script._script_to_commands(story))
48
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
49
    def test_command_with_input(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
50
        self.assertEquals(
51
            [(['cat', '>file'], 'content\n', None, None)],
52
            script._script_to_commands('$ cat >file\n<content\n'))
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
53
54
    def test_command_with_output(self):
55
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
56
$ bzr add
57
adding file
58
adding file2
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
59
"""
4665.5.7 by Vincent Ladeuil
Simplify output/errors handling.
60
        self.assertEquals([(['bzr', 'add'], None,
61
                            'adding file\nadding file2\n', None)],
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
62
                          script._script_to_commands(story))
63
4665.5.3 by Vincent Ladeuil
Separate error from normal output.
64
    def test_command_with_error(self):
65
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
66
$ bzr branch foo
4665.5.3 by Vincent Ladeuil
Separate error from normal output.
67
2>bzr: ERROR: Not a branch: "foo"
68
"""
69
        self.assertEquals([(['bzr', 'branch', 'foo'],
4665.5.7 by Vincent Ladeuil
Simplify output/errors handling.
70
                            None, None, 'bzr: ERROR: Not a branch: "foo"\n')],
4665.5.3 by Vincent Ladeuil
Separate error from normal output.
71
                          script._script_to_commands(story))
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
72
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
73
    def test_input_without_command(self):
74
        self.assertRaises(SyntaxError, script._script_to_commands, '<input')
75
76
    def test_output_without_command(self):
77
        self.assertRaises(SyntaxError, script._script_to_commands, '>input')
78
4665.5.2 by Vincent Ladeuil
Handle simple, double and back quotes.
79
    def test_command_with_backquotes(self):
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
80
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
81
$ foo = `bzr file-id toto`
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
82
"""
4665.5.3 by Vincent Ladeuil
Separate error from normal output.
83
        self.assertEquals([(['foo', '=', '`bzr file-id toto`'],
84
                            None, None, None)],
4665.5.1 by Vincent Ladeuil
Start some shell-like capability to write tests.
85
                          script._script_to_commands(story))
86
87
4665.5.18 by Vincent Ladeuil
Better redirection handling.
88
class TestRedirections(tests.TestCase):
89
90
    def _check(self, in_name, out_name, out_mode, remaining, args):
91
        self.assertEqual(script._scan_redirection_options(args),
92
                         (in_name, out_name, out_mode, remaining))
93
94
    def test_no_redirection(self):
95
        self._check(None, None, None, [], [])
96
        self._check(None, None, None, ['foo', 'bar'], ['foo', 'bar'])
97
98
    def test_input_redirection(self):
99
        self._check('foo', None, None, [], ['<foo'])
100
        self._check('foo', None, None, ['bar'], ['bar', '<foo'])
101
        self._check('foo', None, None, ['bar'], ['bar', '<', 'foo'])
102
        self._check('foo', None, None, ['bar'], ['<foo', 'bar'])
103
        self._check('foo', None, None, ['bar', 'baz'], ['bar', '<foo', 'baz'])
104
105
    def test_output_redirection(self):
106
        self._check(None, 'foo', 'wb+', [], ['>foo'])
107
        self._check(None, 'foo', 'wb+', ['bar'], ['bar', '>foo'])
108
        self._check(None, 'foo', 'wb+', ['bar'], ['bar', '>', 'foo'])
109
        self._check(None, 'foo', 'ab+', [], ['>>foo'])
110
        self._check(None, 'foo', 'ab+', ['bar'], ['bar', '>>foo'])
111
        self._check(None, 'foo', 'ab+', ['bar'], ['bar', '>>', 'foo'])
112
113
    def test_redirection_syntax_errors(self):
114
        self._check('', None, None, [], ['<'])
115
        self._check(None, '', 'wb+', [], ['>'])
116
        self._check(None, '', 'ab+', [], ['>>'])
117
        self._check('>', '', 'ab+', [], ['<', '>', '>>'])
118
119
120
4665.5.19 by Vincent Ladeuil
Implement globbing and enhance cat to accept multiple files.
121
class TestExecution(script.TestCaseWithTransportAndScript):
4665.5.4 by Vincent Ladeuil
Implement a 'cat' command.
122
123
    def test_unknown_command(self):
124
        self.assertRaises(SyntaxError, self.run_script, 'foo')
125
4665.5.13 by Vincent Ladeuil
Script execution must stop on unexpected errors.
126
    def test_stops_on_unexpected_output(self):
4665.5.6 by Vincent Ladeuil
Implement 'bzr' command.
127
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
128
$ mkdir dir
129
$ cd dir
130
The cd command ouputs nothing
4665.5.6 by Vincent Ladeuil
Implement 'bzr' command.
131
"""
132
        self.assertRaises(AssertionError, self.run_script, story)
133
4665.5.4 by Vincent Ladeuil
Implement a 'cat' command.
134
4665.5.13 by Vincent Ladeuil
Script execution must stop on unexpected errors.
135
    def test_stops_on_unexpected_error(self):
136
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
137
$ cat
4665.5.13 by Vincent Ladeuil
Script execution must stop on unexpected errors.
138
<Hello
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
139
$ bzr not-a-command
4665.5.13 by Vincent Ladeuil
Script execution must stop on unexpected errors.
140
"""
141
        self.assertRaises(AssertionError, self.run_script, story)
142
143
    def test_continue_on_expected_error(self):
144
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
145
$ bzr not-a-command
4665.5.13 by Vincent Ladeuil
Script execution must stop on unexpected errors.
146
2>..."not-a-command"
147
"""
148
        self.run_script(story)
149
4665.5.16 by Vincent Ladeuil
Continue script execution based on status not error output.
150
    def test_continue_on_error_output(self):
151
        # The status matters, not the output
152
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
153
$ bzr init
154
$ cat >file
4665.5.16 by Vincent Ladeuil
Continue script execution based on status not error output.
155
<Hello
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
156
$ bzr add file
157
$ bzr commit -m 'adding file'
4665.5.16 by Vincent Ladeuil
Continue script execution based on status not error output.
158
"""
159
        self.run_script(story)
160
4665.5.12 by Vincent Ladeuil
Support '...' in expected strings.
161
    def test_ellipsis_output(self):
162
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
163
$ cat
4665.5.12 by Vincent Ladeuil
Support '...' in expected strings.
164
<first line
165
<second line
166
<last line
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
167
first line
168
...
169
last line
4665.5.12 by Vincent Ladeuil
Support '...' in expected strings.
170
"""
171
        self.run_script(story)
172
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
173
$ bzr not-a-command
4665.5.12 by Vincent Ladeuil
Support '...' in expected strings.
174
2>..."not-a-command"
175
"""
176
        self.run_script(story)
177
178
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
179
$ bzr branch not-a-branch
4665.5.12 by Vincent Ladeuil
Support '...' in expected strings.
180
2>bzr: ERROR: Not a branch...not-a-branch/".
181
"""
182
        self.run_script(story)
183
184
4665.5.19 by Vincent Ladeuil
Implement globbing and enhance cat to accept multiple files.
185
class TestArgumentProcessing(script.TestCaseWithTransportAndScript):
186
187
    def test_globing(self):
188
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
189
$ echo cat >cat
190
$ echo dog >dog
191
$ cat *
192
cat
193
dog
4665.5.19 by Vincent Ladeuil
Implement globbing and enhance cat to accept multiple files.
194
""")
195
196
    def test_quoted_globbing(self):
197
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
198
$ echo cat >cat
199
$ cat '*'
4665.5.19 by Vincent Ladeuil
Implement globbing and enhance cat to accept multiple files.
200
2>*: No such file or directory
201
""")
202
203
    def test_quotes_removal(self):
204
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
205
$ echo 'cat' "dog" '"chicken"' "'dragon'"
206
cat dog "chicken" 'dragon'
4665.5.19 by Vincent Ladeuil
Implement globbing and enhance cat to accept multiple files.
207
""")
208
209
4665.5.11 by Vincent Ladeuil
Create a new test case based on TestCaseWithMemoryTransport.
210
class TestCat(script.TestCaseWithTransportAndScript):
4665.5.4 by Vincent Ladeuil
Implement a 'cat' command.
211
212
    def test_cat_usage(self):
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
213
        self.assertRaises(SyntaxError, self.run_script, 'cat foo <bar')
4665.5.4 by Vincent Ladeuil
Implement a 'cat' command.
214
215
    def test_cat_input_to_output(self):
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
216
        retcode, out, err = self.run_command(['cat'],
217
                                             'content\n', 'content\n', None)
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
218
        self.assertEquals('content\n', out)
219
        self.assertEquals(None, err)
4665.5.4 by Vincent Ladeuil
Implement a 'cat' command.
220
221
    def test_cat_file_to_output(self):
222
        self.build_tree_contents([('file', 'content\n')])
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
223
        retcode, out, err = self.run_command(['cat', 'file'],
224
                                             None, 'content\n', None)
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
225
        self.assertEquals('content\n', out)
226
        self.assertEquals(None, err)
4665.5.4 by Vincent Ladeuil
Implement a 'cat' command.
227
228
    def test_cat_input_to_file(self):
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
229
        retcode, out, err = self.run_command(['cat', '>file'],
230
                                             'content\n', None, None)
4665.5.4 by Vincent Ladeuil
Implement a 'cat' command.
231
        self.assertFileEqual('content\n', 'file')
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
232
        self.assertEquals(None, out)
233
        self.assertEquals(None, err)
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
234
        retcode, out, err = self.run_command(['cat', '>>file'],
235
                                             'more\n', None, None)
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
236
        self.assertFileEqual('content\nmore\n', 'file')
237
        self.assertEquals(None, out)
238
        self.assertEquals(None, err)
4665.5.4 by Vincent Ladeuil
Implement a 'cat' command.
239
240
    def test_cat_file_to_file(self):
241
        self.build_tree_contents([('file', 'content\n')])
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
242
        retcode, out, err = self.run_command(['cat', 'file', '>file2'],
243
                                             None, None, None)
4665.5.4 by Vincent Ladeuil
Implement a 'cat' command.
244
        self.assertFileEqual('content\n', 'file2')
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
245
4665.5.19 by Vincent Ladeuil
Implement globbing and enhance cat to accept multiple files.
246
    def test_cat_files_to_file(self):
247
        self.build_tree_contents([('cat', 'cat\n')])
248
        self.build_tree_contents([('dog', 'dog\n')])
249
        retcode, out, err = self.run_command(['cat', 'cat', 'dog', '>file'],
250
                                             None, None, None)
251
        self.assertFileEqual('cat\ndog\n', 'file')
252
4665.5.18 by Vincent Ladeuil
Better redirection handling.
253
    def test_cat_bogus_input_file(self):
254
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
255
$ cat <file
4665.5.18 by Vincent Ladeuil
Better redirection handling.
256
2>file: No such file or directory
257
""")
258
259
    def test_cat_bogus_output_file(self):
260
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
261
$ cat >
4665.5.18 by Vincent Ladeuil
Better redirection handling.
262
2>: No such file or directory
263
""")
264
265
    def test_echo_bogus_input_file(self):
266
        # We need a backing file sysytem for that test so it can't be in
267
        # TestEcho
268
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
269
$ echo <file
4665.5.18 by Vincent Ladeuil
Better redirection handling.
270
2>file: No such file or directory
271
""")
272
273
    def test_echo_bogus_output_file(self):
274
        # We need a backing file sysytem for that test so it can't be in
275
        # TestEcho
276
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
277
$ echo >
4665.5.18 by Vincent Ladeuil
Better redirection handling.
278
2>: No such file or directory
279
""")
280
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
281
4665.5.11 by Vincent Ladeuil
Create a new test case based on TestCaseWithMemoryTransport.
282
class TestMkdir(script.TestCaseWithTransportAndScript):
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
283
284
    def test_mkdir_usage(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
285
        self.assertRaises(SyntaxError, self.run_script, '$ mkdir')
286
        self.assertRaises(SyntaxError, self.run_script, '$ mkdir foo bar')
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
287
288
    def test_mkdir_jailed(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
289
        self.assertRaises(ValueError, self.run_script, '$ mkdir /out-of-jail')
290
        self.assertRaises(ValueError, self.run_script, '$ mkdir ../out-of-jail')
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
291
292
    def test_mkdir_in_jail(self):
293
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
294
$ mkdir dir
295
$ cd dir
296
$ mkdir ../dir2
297
$ cd ..
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
298
""")
299
        self.failUnlessExists('dir')
300
        self.failUnlessExists('dir2')
301
302
4665.5.11 by Vincent Ladeuil
Create a new test case based on TestCaseWithMemoryTransport.
303
class TestCd(script.TestCaseWithTransportAndScript):
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
304
305
    def test_cd_usage(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
306
        self.assertRaises(SyntaxError, self.run_script, '$ cd foo bar')
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
307
308
    def test_cd_out_of_jail(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
309
        self.assertRaises(ValueError, self.run_script, '$ cd /out-of-jail')
310
        self.assertRaises(ValueError, self.run_script, '$ cd ..')
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
311
312
    def test_cd_dir_and_back_home(self):
313
        self.assertEquals(self.test_dir, osutils.getcwd())
314
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
315
$ mkdir dir
316
$ cd dir
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
317
""")
318
        self.assertEquals(osutils.pathjoin(self.test_dir, 'dir'),
319
                          osutils.getcwd())
320
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
321
        self.run_script('$ cd')
4665.5.5 by Vincent Ladeuil
Implement 'cd' and 'mkdir'.
322
        self.assertEquals(self.test_dir, osutils.getcwd())
4665.5.6 by Vincent Ladeuil
Implement 'bzr' command.
323
324
4665.5.11 by Vincent Ladeuil
Create a new test case based on TestCaseWithMemoryTransport.
325
class TestBzr(script.TestCaseWithTransportAndScript):
4665.5.6 by Vincent Ladeuil
Implement 'bzr' command.
326
327
    def test_bzr_smoke(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
328
        self.run_script('$ bzr init branch')
4665.5.6 by Vincent Ladeuil
Implement 'bzr' command.
329
        self.failUnlessExists('branch')
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
330
331
4665.5.11 by Vincent Ladeuil
Create a new test case based on TestCaseWithMemoryTransport.
332
class TestEcho(script.TestCaseWithMemoryTransportAndScript):
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
333
334
    def test_echo_usage(self):
335
        story = """
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
336
$ echo foo
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
337
<bar
338
"""
339
        self.assertRaises(SyntaxError, self.run_script, story)
340
341
    def test_echo_to_output(self):
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
342
        retcode, out, err = self.run_command(['echo'], None, '\n', None)
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
343
        self.assertEquals('\n', out)
344
        self.assertEquals(None, err)
345
346
    def test_echo_some_to_output(self):
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
347
        retcode, out, err = self.run_command(['echo', 'hello'],
348
                                             None, 'hello\n', None)
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
349
        self.assertEquals('hello\n', out)
350
        self.assertEquals(None, err)
351
352
    def test_echo_more_output(self):
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
353
        retcode, out, err = self.run_command(
354
            ['echo', 'hello', 'happy', 'world'],
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
355
            None, 'hello happy world\n', None)
356
        self.assertEquals('hello happy world\n', out)
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
357
        self.assertEquals(None, err)
358
359
    def test_echo_appended(self):
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
360
        retcode, out, err = self.run_command(['echo', 'hello', '>file'],
361
                                             None, None, None)
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
362
        self.assertEquals(None, out)
363
        self.assertEquals(None, err)
364
        self.assertFileEqual('hello\n', 'file')
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
365
        retcode, out, err = self.run_command(['echo', 'happy', '>>file'],
366
                                             None, None, None)
4665.5.8 by Vincent Ladeuil
Implement 'echo' command.
367
        self.assertEquals(None, out)
368
        self.assertEquals(None, err)
369
        self.assertFileEqual('hello\nhappy\n', 'file')
4665.5.15 by Vincent Ladeuil
Catch the retcode for all commands.
370
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
371
372
class TestRm(script.TestCaseWithTransportAndScript):
373
374
    def test_rm_usage(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
375
        self.assertRaises(SyntaxError, self.run_script, '$ rm')
376
        self.assertRaises(SyntaxError, self.run_script, '$ rm -ff foo')
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
377
378
    def test_rm_file(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
379
        self.run_script('$ echo content >file')
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
380
        self.failUnlessExists('file')
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
381
        self.run_script('$ rm file')
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
382
        self.failIfExists('file')
383
384
    def test_rm_file_force(self):
385
        self.failIfExists('file')
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
386
        self.run_script('$ rm -f file')
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
387
        self.failIfExists('file')
388
389
    def test_rm_files(self):
390
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
391
$ echo content >file
392
$ echo content >file2
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
393
""")
394
        self.failUnlessExists('file2')
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
395
        self.run_script('$ rm file file2')
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
396
        self.failIfExists('file2')
397
398
    def test_rm_dir(self):
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
399
        self.run_script('$ mkdir dir')
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
400
        self.failUnlessExists('dir')
401
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
402
$ rm dir
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
403
2>rm: cannot remove 'dir': Is a directory
404
""")
405
        self.failUnlessExists('dir')
406
407
    def test_rm_dir_recursive(self):
408
        self.run_script("""
4665.5.20 by Vincent Ladeuil
Fixed as per Martin's review.
409
$ mkdir dir
410
$ rm -r dir
4665.5.17 by Vincent Ladeuil
Implement 'rm' command.
411
""")
412
        self.failIfExists('dir')