1
# Copyright (C) 2009, 2010 Canonical Ltd
1
# Copyright (C) 2009 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
30
27
def test_comment_is_ignored(self):
31
28
self.assertEquals([], script._script_to_commands('#comment\n'))
33
def test_comment_multiple_lines(self):
35
(['bar'], None, None, None),
37
script._script_to_commands("""
38
# this comment is ignored
44
def test_trim_blank_lines(self):
45
"""Blank lines are respected, but trimmed at the start and end.
47
Python triple-quoted syntax is going to give stubby/empty blank lines
48
right at the start and the end. These are cut off so that callers don't
49
need special syntax to avoid them.
51
However we do want to be able to match commands that emit blank lines.
54
(['bar'], None, '\n', None),
56
script._script_to_commands("""
30
def test_empty_line_is_ignored(self):
31
self.assertEquals([], script._script_to_commands('\n'))
61
33
def test_simple_command(self):
62
34
self.assertEquals([(['cd', 'trunk'], None, None, None)],
79
51
[(['cat', '>file'], 'content\n', None, None)],
80
52
script._script_to_commands('$ cat >file\n<content\n'))
82
def test_indented(self):
83
# scripts are commonly given indented within the test source code, and
84
# common indentation is stripped off
90
self.assertEquals([(['bzr', 'add'], None,
91
'adding file\nadding file2\n', None)],
92
script._script_to_commands(story))
94
54
def test_command_with_output(self):
161
121
class TestExecution(script.TestCaseWithTransportAndScript):
163
123
def test_unknown_command(self):
164
"""A clear error is reported for commands that aren't recognised
166
Testing the attributes of the SyntaxError instance is equivalent to
167
using traceback.format_exception_only and comparing with:
168
File "<string>", line 1
171
SyntaxError: Command not found "foo"
173
e = self.assertRaises(SyntaxError, self.run_script, "$ foo --frob")
174
self.assertContainsRe(e.msg, "not found.*foo")
175
self.assertEquals(e.text, "foo --frob")
177
def test_blank_output_mismatches_output(self):
178
"""If you give output, the output must actually be blank.
180
See <https://bugs.launchpad.net/bzr/+bug/637830>: previously blank
181
output was a wildcard. Now you must say ... if you want that.
183
self.assertRaises(AssertionError,
189
def test_null_output_matches_option(self):
190
"""If you want null output to be a wild card, you can pass
191
null_output_matches_anything to run_script"""
195
""", null_output_matches_anything=True)
197
def test_ellipsis_everything(self):
198
"""A simple ellipsis matches everything."""
204
def test_ellipsis_matches_empty(self):
124
self.assertRaises(SyntaxError, self.run_script, 'foo')
210
126
def test_stops_on_unexpected_output(self):
292
206
cat dog "chicken" 'dragon'
295
def test_verbosity_isolated(self):
296
"""Global verbosity is isolated from commands run in scripts.
298
# see also 656694; we should get rid of global verbosity
302
self.assertEquals(trace.is_quiet(), False)
305
210
class TestCat(script.TestCaseWithTransportAndScript):
386
self.assertPathExists('dir')
387
self.assertPathExists('dir2')
291
self.failUnlessExists('dir')
292
self.failUnlessExists('dir2')
390
295
class TestCd(script.TestCaseWithTransportAndScript):
412
317
class TestBzr(script.TestCaseWithTransportAndScript):
414
319
def test_bzr_smoke(self):
417
Created a standalone tree (format: ...)
419
self.assertPathExists('branch')
320
self.run_script('$ bzr init branch')
321
self.failUnlessExists('branch')
422
324
class TestEcho(script.TestCaseWithMemoryTransportAndScript):
463
365
self.assertEquals(None, err)
464
366
self.assertFileEqual('hello\nhappy\n', 'file')
466
def test_empty_line_in_output_is_respected(self):
475
369
class TestRm(script.TestCaseWithTransportAndScript):
481
375
def test_rm_file(self):
482
376
self.run_script('$ echo content >file')
483
self.assertPathExists('file')
377
self.failUnlessExists('file')
484
378
self.run_script('$ rm file')
485
self.assertPathDoesNotExist('file')
379
self.failIfExists('file')
487
381
def test_rm_file_force(self):
488
self.assertPathDoesNotExist('file')
382
self.failIfExists('file')
489
383
self.run_script('$ rm -f file')
490
self.assertPathDoesNotExist('file')
384
self.failIfExists('file')
492
386
def test_rm_files(self):
493
387
self.run_script("""
494
388
$ echo content >file
495
389
$ echo content >file2
497
self.assertPathExists('file2')
391
self.failUnlessExists('file2')
498
392
self.run_script('$ rm file file2')
499
self.assertPathDoesNotExist('file2')
393
self.failIfExists('file2')
501
395
def test_rm_dir(self):
502
396
self.run_script('$ mkdir dir')
503
self.assertPathExists('dir')
397
self.failUnlessExists('dir')
504
398
self.run_script("""
506
400
2>rm: cannot remove 'dir': Is a directory
508
self.assertPathExists('dir')
402
self.failUnlessExists('dir')
510
404
def test_rm_dir_recursive(self):
511
405
self.run_script("""
515
self.assertPathDoesNotExist('dir')
409
self.failIfExists('dir')
518
412
class TestMv(script.TestCaseWithTransportAndScript):
525
419
def test_move_file(self):
526
420
self.run_script('$ echo content >file')
527
self.assertPathExists('file')
421
self.failUnlessExists('file')
528
422
self.run_script('$ mv file new_name')
529
self.assertPathDoesNotExist('file')
530
self.assertPathExists('new_name')
423
self.failIfExists('file')
424
self.failUnlessExists('new_name')
532
426
def test_move_unknown_file(self):
533
427
self.assertRaises(AssertionError,
539
433
$ echo content >dir/file
541
435
self.run_script('$ mv dir new_name')
542
self.assertPathDoesNotExist('dir')
543
self.assertPathExists('new_name')
544
self.assertPathExists('new_name/file')
436
self.failIfExists('dir')
437
self.failUnlessExists('new_name')
438
self.failUnlessExists('new_name/file')
546
440
def test_move_file_into_dir(self):
547
441
self.run_script("""
549
443
$ echo content > file
551
445
self.run_script('$ mv file dir')
552
self.assertPathExists('dir')
553
self.assertPathDoesNotExist('file')
554
self.assertPathExists('dir/file')
557
class cmd_test_confirm(commands.Command):
560
if ui.ui_factory.get_boolean(
562
# 'bzrlib.tests.test_script.confirm',
565
self.outf.write('Do it!\n')
570
class TestUserInteraction(script.TestCaseWithMemoryTransportAndScript):
572
def test_confirm_action(self):
573
"""You can write tests that demonstrate user confirmation.
575
Specifically, ScriptRunner does't care if the output line for the prompt
576
isn't terminated by a newline from the program; it's implicitly terminated
579
commands.builtin_command_registry.register(cmd_test_confirm)
580
self.addCleanup(commands.builtin_command_registry.remove, 'test-confirm')
583
2>Really do it? [y/n]:
587
2>Really do it? [y/n]:
446
self.failUnlessExists('dir')
447
self.failIfExists('file')
448
self.failUnlessExists('dir/file')