98
97
# We override the run() command method so we can observe the
99
98
# overrides from inside.
100
99
c = config.GlobalStack()
101
self.assertEqual('12', c.get('xx'))
102
self.assertEqual('foo', c.get('yy'))
100
self.assertEquals('12', c.get('xx'))
101
self.assertEquals('foo', c.get('yy'))
103
102
self.overrideAttr(builtins.cmd_rocks, 'run', run)
104
103
self.run_bzr(['rocks', '-Oxx=12', '-Oyy=foo'])
105
104
c = config.GlobalStack()
106
105
# Ensure that we don't leak outside of the command
107
self.assertEqual(None, c.get('xx'))
108
self.assertEqual(None, c.get('yy'))
106
self.assertEquals(None, c.get('xx'))
107
self.assertEquals(None, c.get('yy'))
111
110
class TestInvokedAs(tests.TestCase):
371
370
cmds = list(commands.all_command_names())
372
371
self.assertEqual(['called'], hook_calls)
373
372
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)