370
371
cmds = list(commands.all_command_names())
371
372
self.assertEqual(['called'], hook_calls)
372
373
self.assertSubset(['foo', 'bar'], cmds)
375
class TestPreAndPostCommandHooks(tests.TestCase):
376
class TestError(StandardError):
377
__doc__ = """A test exception."""
379
def test_pre_and_post_hooks(self):
382
def pre_command(cmd):
383
self.assertEqual([], hook_calls)
384
hook_calls.append('pre')
386
def post_command(cmd):
387
self.assertEqual(['pre', 'run'], hook_calls)
388
hook_calls.append('post')
391
self.assertEqual(['pre'], hook_calls)
392
hook_calls.append('run')
394
self.overrideAttr(builtins.cmd_rocks, 'run', run)
395
commands.install_bzr_command_hooks()
396
commands.Command.hooks.install_named_hook(
397
"pre_command", pre_command, None)
398
commands.Command.hooks.install_named_hook(
399
"post_command", post_command, None)
401
self.assertEqual([], hook_calls)
402
self.run_bzr(['rocks', '-Oxx=12', '-Oyy=foo'])
403
self.assertEqual(['pre', 'run', 'post'], hook_calls)
405
def test_post_hook_provided_exception(self):
408
def post_command(cmd):
409
hook_calls.append('post')
412
hook_calls.append('run')
413
raise self.TestError()
415
self.overrideAttr(builtins.cmd_rocks, 'run', run)
416
commands.install_bzr_command_hooks()
417
commands.Command.hooks.install_named_hook(
418
"post_command", post_command, None)
420
self.assertEqual([], hook_calls)
421
self.assertRaises(self.TestError, commands.run_bzr, [u'rocks'])
422
self.assertEqual(['run', 'post'], hook_calls)
424
def test_pre_command_error(self):
425
"""Ensure an BzrCommandError in pre_command aborts the command"""
429
def pre_command(cmd):
430
hook_calls.append('pre')
431
# verify that all subclasses of BzrCommandError caught too
432
raise errors.BzrOptionError()
434
def post_command(cmd, e):
435
self.fail('post_command should not be called')
438
self.fail('command should not be called')
440
self.overrideAttr(builtins.cmd_rocks, 'run', run)
441
commands.install_bzr_command_hooks()
442
commands.Command.hooks.install_named_hook(
443
"pre_command", pre_command, None)
444
commands.Command.hooks.install_named_hook(
445
"post_command", post_command, None)
447
self.assertEqual([], hook_calls)
448
self.assertRaises(errors.BzrCommandError,
449
commands.run_bzr, [u'rocks'])
450
self.assertEqual(['pre'], hook_calls)