27
30
def test_comment_is_ignored(self):
28
31
self.assertEquals([], script._script_to_commands('#comment\n'))
30
def test_empty_line_is_ignored(self):
31
self.assertEquals([], script._script_to_commands('\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("""
33
61
def test_simple_command(self):
34
62
self.assertEquals([(['cd', 'trunk'], None, None, None)],
51
79
[(['cat', '>file'], 'content\n', None, None)],
52
80
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))
54
94
def test_command_with_output(self):
121
161
class TestExecution(script.TestCaseWithTransportAndScript):
123
163
def test_unknown_command(self):
124
self.assertRaises(SyntaxError, self.run_script, 'foo')
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):
126
210
def test_stops_on_unexpected_output(self):
206
292
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)
210
305
class TestCat(script.TestCaseWithTransportAndScript):
291
self.failUnlessExists('dir')
292
self.failUnlessExists('dir2')
386
self.assertPathExists('dir')
387
self.assertPathExists('dir2')
295
390
class TestCd(script.TestCaseWithTransportAndScript):
317
412
class TestBzr(script.TestCaseWithTransportAndScript):
319
414
def test_bzr_smoke(self):
320
self.run_script('$ bzr init branch')
321
self.failUnlessExists('branch')
417
Created a standalone tree (format: ...)
419
self.assertPathExists('branch')
324
422
class TestEcho(script.TestCaseWithMemoryTransportAndScript):
365
463
self.assertEquals(None, err)
366
464
self.assertFileEqual('hello\nhappy\n', 'file')
466
def test_empty_line_in_output_is_respected(self):
369
475
class TestRm(script.TestCaseWithTransportAndScript):
375
481
def test_rm_file(self):
376
482
self.run_script('$ echo content >file')
377
self.failUnlessExists('file')
483
self.assertPathExists('file')
378
484
self.run_script('$ rm file')
379
self.failIfExists('file')
485
self.assertPathDoesNotExist('file')
381
487
def test_rm_file_force(self):
382
self.failIfExists('file')
488
self.assertPathDoesNotExist('file')
383
489
self.run_script('$ rm -f file')
384
self.failIfExists('file')
490
self.assertPathDoesNotExist('file')
386
492
def test_rm_files(self):
387
493
self.run_script("""
388
494
$ echo content >file
389
495
$ echo content >file2
391
self.failUnlessExists('file2')
497
self.assertPathExists('file2')
392
498
self.run_script('$ rm file file2')
393
self.failIfExists('file2')
499
self.assertPathDoesNotExist('file2')
395
501
def test_rm_dir(self):
396
502
self.run_script('$ mkdir dir')
397
self.failUnlessExists('dir')
503
self.assertPathExists('dir')
398
504
self.run_script("""
400
506
2>rm: cannot remove 'dir': Is a directory
402
self.failUnlessExists('dir')
508
self.assertPathExists('dir')
404
510
def test_rm_dir_recursive(self):
405
511
self.run_script("""
409
self.failIfExists('dir')
515
self.assertPathDoesNotExist('dir')
412
518
class TestMv(script.TestCaseWithTransportAndScript):
419
525
def test_move_file(self):
420
526
self.run_script('$ echo content >file')
421
self.failUnlessExists('file')
527
self.assertPathExists('file')
422
528
self.run_script('$ mv file new_name')
423
self.failIfExists('file')
424
self.failUnlessExists('new_name')
529
self.assertPathDoesNotExist('file')
530
self.assertPathExists('new_name')
426
532
def test_move_unknown_file(self):
427
533
self.assertRaises(AssertionError,
433
539
$ echo content >dir/file
435
541
self.run_script('$ mv dir new_name')
436
self.failIfExists('dir')
437
self.failUnlessExists('new_name')
438
self.failUnlessExists('new_name/file')
542
self.assertPathDoesNotExist('dir')
543
self.assertPathExists('new_name')
544
self.assertPathExists('new_name/file')
440
546
def test_move_file_into_dir(self):
441
547
self.run_script("""
443
549
$ echo content > file
445
551
self.run_script('$ mv file dir')
446
self.failUnlessExists('dir')
447
self.failIfExists('file')
448
self.failUnlessExists('dir/file')
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
576
prompt isn't terminated by a newline from the program; it's implicitly
577
terminated by the input.
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]es, [n]o): yes
587
2>Really do it? ([y]es, [n]o): no
592
class TestShelve(script.TestCaseWithTransportAndScript):
595
super(TestShelve, self).setUp()
598
Created a standalone tree (format: 2a)
603
$ bzr commit -m 'file added'
604
2>Committing to:...test/
606
2>Committed revision 1.
610
def test_shelve(self):
612
$ bzr shelve -m 'shelve bar'
613
2>Shelve? ([y]es, [N]o, [f]inish, [q]uit): yes
617
2>Shelve 1 change(s)? ([y]es, [N]o, [f]inish, [q]uit): yes
619
2>Changes shelved with id "1".
621
null_output_matches_anything=True)
627
def test_dont_shelve(self):
628
# We intentionally provide no input here to test EOF
630
$ bzr shelve -m 'shelve bar'
631
2>Shelve? ([y]es, [N]o, [f]inish, [q]uit):
632
2>No changes to shelve.
634
null_output_matches_anything=True)