/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_script.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-04-13 23:16:57 UTC
  • mfrom: (1662.1.1 bzr.mbp.integration)
  • Revision ID: pqm@pqm.ubuntu.com-20060413231657-bce3d67d3e7a4f2b
(mbp/olaf) push/pull/merge --remember improvements

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
 
17
 
 
18
 
from bzrlib import (
19
 
    osutils,
20
 
    tests,
21
 
    )
22
 
from bzrlib.tests import script
23
 
 
24
 
 
25
 
class TestSyntax(tests.TestCase):
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):
34
 
        self.assertEquals([(['cd', 'trunk'], None, None, None)],
35
 
                           script._script_to_commands('$ cd trunk'))
36
 
 
37
 
    def test_command_with_single_quoted_param(self):
38
 
        story = """$ bzr commit -m 'two words'"""
39
 
        self.assertEquals([(['bzr', 'commit', '-m', "'two words'"],
40
 
                            None, None, None)],
41
 
                           script._script_to_commands(story))
42
 
 
43
 
    def test_command_with_double_quoted_param(self):
44
 
        story = """$ bzr commit -m "two words" """
45
 
        self.assertEquals([(['bzr', 'commit', '-m', '"two words"'],
46
 
                            None, None, None)],
47
 
                           script._script_to_commands(story))
48
 
 
49
 
    def test_command_with_input(self):
50
 
        self.assertEquals(
51
 
            [(['cat', '>file'], 'content\n', None, None)],
52
 
            script._script_to_commands('$ cat >file\n<content\n'))
53
 
 
54
 
    def test_command_with_output(self):
55
 
        story = """
56
 
$ bzr add
57
 
adding file
58
 
adding file2
59
 
"""
60
 
        self.assertEquals([(['bzr', 'add'], None,
61
 
                            'adding file\nadding file2\n', None)],
62
 
                          script._script_to_commands(story))
63
 
 
64
 
    def test_command_with_error(self):
65
 
        story = """
66
 
$ bzr branch foo
67
 
2>bzr: ERROR: Not a branch: "foo"
68
 
"""
69
 
        self.assertEquals([(['bzr', 'branch', 'foo'],
70
 
                            None, None, 'bzr: ERROR: Not a branch: "foo"\n')],
71
 
                          script._script_to_commands(story))
72
 
 
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
 
 
79
 
    def test_command_with_backquotes(self):
80
 
        story = """
81
 
$ foo = `bzr file-id toto`
82
 
"""
83
 
        self.assertEquals([(['foo', '=', '`bzr file-id toto`'],
84
 
                            None, None, None)],
85
 
                          script._script_to_commands(story))
86
 
 
87
 
 
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
 
 
121
 
class TestExecution(script.TestCaseWithTransportAndScript):
122
 
 
123
 
    def test_unknown_command(self):
124
 
        self.assertRaises(SyntaxError, self.run_script, 'foo')
125
 
 
126
 
    def test_stops_on_unexpected_output(self):
127
 
        story = """
128
 
$ mkdir dir
129
 
$ cd dir
130
 
The cd command ouputs nothing
131
 
"""
132
 
        self.assertRaises(AssertionError, self.run_script, story)
133
 
 
134
 
 
135
 
    def test_stops_on_unexpected_error(self):
136
 
        story = """
137
 
$ cat
138
 
<Hello
139
 
$ bzr not-a-command
140
 
"""
141
 
        self.assertRaises(AssertionError, self.run_script, story)
142
 
 
143
 
    def test_continue_on_expected_error(self):
144
 
        story = """
145
 
$ bzr not-a-command
146
 
2>..."not-a-command"
147
 
"""
148
 
        self.run_script(story)
149
 
 
150
 
    def test_continue_on_error_output(self):
151
 
        # The status matters, not the output
152
 
        story = """
153
 
$ bzr init
154
 
$ cat >file
155
 
<Hello
156
 
$ bzr add file
157
 
$ bzr commit -m 'adding file'
158
 
"""
159
 
        self.run_script(story)
160
 
 
161
 
    def test_ellipsis_output(self):
162
 
        story = """
163
 
$ cat
164
 
<first line
165
 
<second line
166
 
<last line
167
 
first line
168
 
...
169
 
last line
170
 
"""
171
 
        self.run_script(story)
172
 
        story = """
173
 
$ bzr not-a-command
174
 
2>..."not-a-command"
175
 
"""
176
 
        self.run_script(story)
177
 
 
178
 
        story = """
179
 
$ bzr branch not-a-branch
180
 
2>bzr: ERROR: Not a branch...not-a-branch/".
181
 
"""
182
 
        self.run_script(story)
183
 
 
184
 
 
185
 
class TestArgumentProcessing(script.TestCaseWithTransportAndScript):
186
 
 
187
 
    def test_globing(self):
188
 
        self.run_script("""
189
 
$ echo cat >cat
190
 
$ echo dog >dog
191
 
$ cat *
192
 
cat
193
 
dog
194
 
""")
195
 
 
196
 
    def test_quoted_globbing(self):
197
 
        self.run_script("""
198
 
$ echo cat >cat
199
 
$ cat '*'
200
 
2>*: No such file or directory
201
 
""")
202
 
 
203
 
    def test_quotes_removal(self):
204
 
        self.run_script("""
205
 
$ echo 'cat' "dog" '"chicken"' "'dragon'"
206
 
cat dog "chicken" 'dragon'
207
 
""")
208
 
 
209
 
 
210
 
class TestCat(script.TestCaseWithTransportAndScript):
211
 
 
212
 
    def test_cat_usage(self):
213
 
        self.assertRaises(SyntaxError, self.run_script, 'cat foo <bar')
214
 
 
215
 
    def test_cat_input_to_output(self):
216
 
        retcode, out, err = self.run_command(['cat'],
217
 
                                             'content\n', 'content\n', None)
218
 
        self.assertEquals('content\n', out)
219
 
        self.assertEquals(None, err)
220
 
 
221
 
    def test_cat_file_to_output(self):
222
 
        self.build_tree_contents([('file', 'content\n')])
223
 
        retcode, out, err = self.run_command(['cat', 'file'],
224
 
                                             None, 'content\n', None)
225
 
        self.assertEquals('content\n', out)
226
 
        self.assertEquals(None, err)
227
 
 
228
 
    def test_cat_input_to_file(self):
229
 
        retcode, out, err = self.run_command(['cat', '>file'],
230
 
                                             'content\n', None, None)
231
 
        self.assertFileEqual('content\n', 'file')
232
 
        self.assertEquals(None, out)
233
 
        self.assertEquals(None, err)
234
 
        retcode, out, err = self.run_command(['cat', '>>file'],
235
 
                                             'more\n', None, None)
236
 
        self.assertFileEqual('content\nmore\n', 'file')
237
 
        self.assertEquals(None, out)
238
 
        self.assertEquals(None, err)
239
 
 
240
 
    def test_cat_file_to_file(self):
241
 
        self.build_tree_contents([('file', 'content\n')])
242
 
        retcode, out, err = self.run_command(['cat', 'file', '>file2'],
243
 
                                             None, None, None)
244
 
        self.assertFileEqual('content\n', 'file2')
245
 
 
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
 
 
253
 
    def test_cat_bogus_input_file(self):
254
 
        self.run_script("""
255
 
$ cat <file
256
 
2>file: No such file or directory
257
 
""")
258
 
 
259
 
    def test_cat_bogus_output_file(self):
260
 
        self.run_script("""
261
 
$ cat >
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("""
269
 
$ echo <file
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("""
277
 
$ echo >
278
 
2>: No such file or directory
279
 
""")
280
 
 
281
 
 
282
 
class TestMkdir(script.TestCaseWithTransportAndScript):
283
 
 
284
 
    def test_mkdir_usage(self):
285
 
        self.assertRaises(SyntaxError, self.run_script, '$ mkdir')
286
 
        self.assertRaises(SyntaxError, self.run_script, '$ mkdir foo bar')
287
 
 
288
 
    def test_mkdir_jailed(self):
289
 
        self.assertRaises(ValueError, self.run_script, '$ mkdir /out-of-jail')
290
 
        self.assertRaises(ValueError, self.run_script, '$ mkdir ../out-of-jail')
291
 
 
292
 
    def test_mkdir_in_jail(self):
293
 
        self.run_script("""
294
 
$ mkdir dir
295
 
$ cd dir
296
 
$ mkdir ../dir2
297
 
$ cd ..
298
 
""")
299
 
        self.failUnlessExists('dir')
300
 
        self.failUnlessExists('dir2')
301
 
 
302
 
 
303
 
class TestCd(script.TestCaseWithTransportAndScript):
304
 
 
305
 
    def test_cd_usage(self):
306
 
        self.assertRaises(SyntaxError, self.run_script, '$ cd foo bar')
307
 
 
308
 
    def test_cd_out_of_jail(self):
309
 
        self.assertRaises(ValueError, self.run_script, '$ cd /out-of-jail')
310
 
        self.assertRaises(ValueError, self.run_script, '$ cd ..')
311
 
 
312
 
    def test_cd_dir_and_back_home(self):
313
 
        self.assertEquals(self.test_dir, osutils.getcwd())
314
 
        self.run_script("""
315
 
$ mkdir dir
316
 
$ cd dir
317
 
""")
318
 
        self.assertEquals(osutils.pathjoin(self.test_dir, 'dir'),
319
 
                          osutils.getcwd())
320
 
 
321
 
        self.run_script('$ cd')
322
 
        self.assertEquals(self.test_dir, osutils.getcwd())
323
 
 
324
 
 
325
 
class TestBzr(script.TestCaseWithTransportAndScript):
326
 
 
327
 
    def test_bzr_smoke(self):
328
 
        self.run_script('$ bzr init branch')
329
 
        self.failUnlessExists('branch')
330
 
 
331
 
 
332
 
class TestEcho(script.TestCaseWithMemoryTransportAndScript):
333
 
 
334
 
    def test_echo_usage(self):
335
 
        story = """
336
 
$ echo foo
337
 
<bar
338
 
"""
339
 
        self.assertRaises(SyntaxError, self.run_script, story)
340
 
 
341
 
    def test_echo_to_output(self):
342
 
        retcode, out, err = self.run_command(['echo'], None, '\n', None)
343
 
        self.assertEquals('\n', out)
344
 
        self.assertEquals(None, err)
345
 
 
346
 
    def test_echo_some_to_output(self):
347
 
        retcode, out, err = self.run_command(['echo', 'hello'],
348
 
                                             None, 'hello\n', None)
349
 
        self.assertEquals('hello\n', out)
350
 
        self.assertEquals(None, err)
351
 
 
352
 
    def test_echo_more_output(self):
353
 
        retcode, out, err = self.run_command(
354
 
            ['echo', 'hello', 'happy', 'world'],
355
 
            None, 'hello happy world\n', None)
356
 
        self.assertEquals('hello happy world\n', out)
357
 
        self.assertEquals(None, err)
358
 
 
359
 
    def test_echo_appended(self):
360
 
        retcode, out, err = self.run_command(['echo', 'hello', '>file'],
361
 
                                             None, None, None)
362
 
        self.assertEquals(None, out)
363
 
        self.assertEquals(None, err)
364
 
        self.assertFileEqual('hello\n', 'file')
365
 
        retcode, out, err = self.run_command(['echo', 'happy', '>>file'],
366
 
                                             None, None, None)
367
 
        self.assertEquals(None, out)
368
 
        self.assertEquals(None, err)
369
 
        self.assertFileEqual('hello\nhappy\n', 'file')
370
 
 
371
 
 
372
 
class TestRm(script.TestCaseWithTransportAndScript):
373
 
 
374
 
    def test_rm_usage(self):
375
 
        self.assertRaises(SyntaxError, self.run_script, '$ rm')
376
 
        self.assertRaises(SyntaxError, self.run_script, '$ rm -ff foo')
377
 
 
378
 
    def test_rm_file(self):
379
 
        self.run_script('$ echo content >file')
380
 
        self.failUnlessExists('file')
381
 
        self.run_script('$ rm file')
382
 
        self.failIfExists('file')
383
 
 
384
 
    def test_rm_file_force(self):
385
 
        self.failIfExists('file')
386
 
        self.run_script('$ rm -f file')
387
 
        self.failIfExists('file')
388
 
 
389
 
    def test_rm_files(self):
390
 
        self.run_script("""
391
 
$ echo content >file
392
 
$ echo content >file2
393
 
""")
394
 
        self.failUnlessExists('file2')
395
 
        self.run_script('$ rm file file2')
396
 
        self.failIfExists('file2')
397
 
 
398
 
    def test_rm_dir(self):
399
 
        self.run_script('$ mkdir dir')
400
 
        self.failUnlessExists('dir')
401
 
        self.run_script("""
402
 
$ rm dir
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("""
409
 
$ mkdir dir
410
 
$ rm -r dir
411
 
""")
412
 
        self.failIfExists('dir')