~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_commands.py

  • Committer: Tarmac
  • Author(s): Vincent Ladeuil
  • Date: 2017-01-30 14:42:05 UTC
  • mfrom: (6620.1.1 trunk)
  • Revision ID: tarmac-20170130144205-r8fh2xpmiuxyozpv
Merge  2.7 into trunk including fix for bug #1657238 [r=vila]

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011 Canonical Ltd
 
1
# Copyright (C) 2005-2012, 2016 Canonical Ltd
2
2
#
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
24
24
    config,
25
25
    errors,
26
26
    option,
27
 
    symbol_versioning,
28
27
    tests,
 
28
    trace,
29
29
    )
30
30
from bzrlib.commands import display_command
31
31
from bzrlib.tests import TestSkipped
91
91
        self.assertContainsRe(c.get_help_text(), '--foo')
92
92
 
93
93
 
 
94
class TestInsideCommand(tests.TestCaseInTempDir):
 
95
 
 
96
    def test_command_see_config_overrides(self):
 
97
        def run(cmd):
 
98
            # We override the run() command method so we can observe the
 
99
            # overrides from inside.
 
100
            c = config.GlobalStack()
 
101
            self.assertEqual('12', c.get('xx'))
 
102
            self.assertEqual('foo', c.get('yy'))
 
103
        self.overrideAttr(builtins.cmd_rocks, 'run', run)
 
104
        self.run_bzr(['rocks', '-Oxx=12', '-Oyy=foo'])
 
105
        c = config.GlobalStack()
 
106
        # Ensure that we don't leak outside of the command
 
107
        self.assertEqual(None, c.get('xx'))
 
108
        self.assertEqual(None, c.get('yy'))
 
109
 
 
110
 
94
111
class TestInvokedAs(tests.TestCase):
95
112
 
96
113
    def test_invoked_as(self):
100
117
        # get one from the real get_cmd_object.
101
118
        c = commands.get_cmd_object('ci')
102
119
        self.assertIsInstance(c, builtins.cmd_commit)
103
 
        self.assertEquals(c.invoked_as, 'ci')
 
120
        self.assertEqual(c.invoked_as, 'ci')
104
121
 
105
122
 
106
123
class TestGetAlias(tests.TestCase):
177
194
class TestRegisterLazy(tests.TestCase):
178
195
 
179
196
    def setUp(self):
180
 
        tests.TestCase.setUp(self)
 
197
        super(TestRegisterLazy, self).setUp()
181
198
        import bzrlib.tests.fake_command
182
199
        del sys.modules['bzrlib.tests.fake_command']
183
200
        global lazy_command_imported
355
372
        self.assertEqual(['called'], hook_calls)
356
373
        self.assertSubset(['foo', 'bar'], cmds)
357
374
 
358
 
 
359
 
class TestDeprecations(tests.TestCase):
360
 
 
361
 
    def test_shlex_split_unicode_deprecation(self):
362
 
        res = self.applyDeprecated(
363
 
                symbol_versioning.deprecated_in((2, 2, 0)),
364
 
                commands.shlex_split_unicode, 'whatever')
 
375
class TestPreAndPostCommandHooks(tests.TestCase):
 
376
    class TestError(StandardError):
 
377
        __doc__ = """A test exception."""
 
378
 
 
379
    def test_pre_and_post_hooks(self):
 
380
        hook_calls = []
 
381
 
 
382
        def pre_command(cmd):
 
383
            self.assertEqual([], hook_calls)
 
384
            hook_calls.append('pre')
 
385
 
 
386
        def post_command(cmd):
 
387
            self.assertEqual(['pre', 'run'], hook_calls)
 
388
            hook_calls.append('post')
 
389
 
 
390
        def run(cmd):
 
391
            self.assertEqual(['pre'], hook_calls)
 
392
            hook_calls.append('run')
 
393
 
 
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)
 
400
 
 
401
        self.assertEqual([], hook_calls)
 
402
        self.run_bzr(['rocks', '-Oxx=12', '-Oyy=foo'])
 
403
        self.assertEqual(['pre', 'run', 'post'], hook_calls)
 
404
 
 
405
    def test_post_hook_provided_exception(self):
 
406
        hook_calls = []
 
407
 
 
408
        def post_command(cmd):
 
409
            hook_calls.append('post')
 
410
 
 
411
        def run(cmd):
 
412
            hook_calls.append('run')
 
413
            raise self.TestError()
 
414
 
 
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)
 
419
 
 
420
        self.assertEqual([], hook_calls)
 
421
        self.assertRaises(self.TestError, commands.run_bzr, [u'rocks'])
 
422
        self.assertEqual(['run', 'post'], hook_calls)
 
423
 
 
424
    def test_pre_command_error(self):
 
425
        """Ensure an BzrCommandError in pre_command aborts the command"""
 
426
 
 
427
        hook_calls = []
 
428
 
 
429
        def pre_command(cmd):
 
430
            hook_calls.append('pre')
 
431
            # verify that all subclasses of BzrCommandError caught too
 
432
            raise errors.BzrOptionError()
 
433
 
 
434
        def post_command(cmd, e):
 
435
            self.fail('post_command should not be called')
 
436
 
 
437
        def run(cmd):
 
438
            self.fail('command should not be called')
 
439
 
 
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)
 
446
 
 
447
        self.assertEqual([], hook_calls)
 
448
        self.assertRaises(errors.BzrCommandError,
 
449
                          commands.run_bzr, [u'rocks'])
 
450
        self.assertEqual(['pre'], hook_calls)
 
451