404
406
def test_post_hook_provided_exception(self):
407
class TestError(StandardError):
408
__doc__ = """A test exception."""
410
409
def post_command(cmd, e):
411
self.assertTrue(isinstance(e, TestError))
410
self.assertTrue(isinstance(e, self.TestError))
412
411
hook_calls.append('post')
415
414
hook_calls.append('run')
415
raise self.TestError()
418
417
self.overrideAttr(builtins.cmd_rocks, 'run', run)
419
418
commands.install_bzr_command_hooks()
421
420
"post_command", post_command, None)
423
422
self.assertEqual([], hook_calls)
425
self.run_bzr(['rocks', '-Oxx=12', '-Oyy=foo'])
426
self.fail('should have raised TestError')
423
self.assertRaises(self.TestError,
424
commands.run_bzr, [u'rocks'])
429
425
self.assertEqual(['run', 'post'], hook_calls)
427
def test_pre_exception(self):
428
"""Ensure an exception in pre_command does not abort the command"""
432
def pre_command(cmd):
433
hook_calls.append('pre')
434
raise self.TestError()
436
def post_command(cmd, e):
437
hook_calls.append('post')
440
hook_calls.append('run')
442
self.overrideAttr(builtins.cmd_rocks, 'run', run)
443
commands.install_bzr_command_hooks()
444
commands.Command.hooks.install_named_hook(
445
"pre_command", pre_command, None)
446
commands.Command.hooks.install_named_hook(
447
"post_command", post_command, None)
449
self.assertEqual([], hook_calls)
450
self.run_bzr(['rocks', '-Oxx=12', '-Oyy=foo'])
451
self.assertEqual(['pre', 'run', 'post'], hook_calls)
454
def test_pre_command_error(self):
455
"""Ensure an BzrCommandError in pre_command aborts the command"""
459
def pre_command(cmd):
460
hook_calls.append('pre')
461
# verify that all subclasses of BzrCommandError caught too
462
raise errors.BzrOptionError()
464
def post_command(cmd, e):
465
self.fail('post_command should not be called')
468
self.fail('command should not be called')
470
self.overrideAttr(builtins.cmd_rocks, 'run', run)
471
commands.install_bzr_command_hooks()
472
commands.Command.hooks.install_named_hook(
473
"pre_command", pre_command, None)
474
commands.Command.hooks.install_named_hook(
475
"post_command", post_command, None)
477
self.assertEqual([], hook_calls)
478
self.assertRaises(errors.BzrCommandError,
479
commands.run_bzr, [u'rocks'])
480
self.assertEqual(['pre'], hook_calls)