/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_help.py

  • Committer: Vincent Ladeuil
  • Date: 2012-01-18 14:09:19 UTC
  • mto: This revision was merged to the branch mainline in revision 6468.
  • Revision ID: v.ladeuil+lp@free.fr-20120118140919-rlvdrhpc0nq1lbwi
Change set/remove to require a lock for the branch config files.

This means that tests (or any plugin for that matter) do not requires an
explicit lock on the branch anymore to change a single option. This also
means the optimisation becomes "opt-in" and as such won't be as
spectacular as it may be and/or harder to get right (nothing fails
anymore).

This reduces the diff by ~300 lines.

Code/tests that were updating more than one config option is still taking
a lock to at least avoid some IOs and demonstrate the benefits through
the decreased number of hpss calls.

The duplication between BranchStack and BranchOnlyStack will be removed
once the same sharing is in place for local config files, at which point
the Stack class itself may be able to host the changes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2006, 2007, 2009, 2010, 2011 Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
 
 
17
 
 
18
"""Black-box tests for bzr help.
 
19
"""
 
20
 
 
21
 
 
22
import bzrlib
 
23
from bzrlib import config
 
24
from bzrlib.tests import TestCaseWithTransport
 
25
 
 
26
 
 
27
class TestHelp(TestCaseWithTransport):
 
28
 
 
29
    def test_help_basic(self):
 
30
        for cmd in ['--help', 'help', '-h', '-?']:
 
31
            output = self.run_bzr(cmd)[0]
 
32
            line1 = output.split('\n')[0]
 
33
            if not line1.startswith('Bazaar'):
 
34
                self.fail("bad output from bzr %s:\n%r" % (cmd, output))
 
35
        # see https://launchpad.net/products/bzr/+bug/35940, -h doesn't work
 
36
 
 
37
    def test_help_topics(self):
 
38
        """Smoketest for 'bzr help topics'"""
 
39
        out, err = self.run_bzr('help topics')
 
40
        self.assertContainsRe(out, 'basic')
 
41
        self.assertContainsRe(out, 'topics')
 
42
        self.assertContainsRe(out, 'commands')
 
43
        self.assertContainsRe(out, 'revisionspec')
 
44
 
 
45
    def test_help_revisionspec(self):
 
46
        """Smoke test for 'bzr help revisionspec'"""
 
47
        out, err = self.run_bzr('help revisionspec')
 
48
        self.assertContainsRe(out, 'revno:')
 
49
        self.assertContainsRe(out, 'date:')
 
50
        self.assertContainsRe(out, 'revid:')
 
51
        self.assertContainsRe(out, 'last:')
 
52
        self.assertContainsRe(out, 'before:')
 
53
        self.assertContainsRe(out, 'ancestor:')
 
54
        self.assertContainsRe(out, 'branch:')
 
55
 
 
56
    def test_help_checkouts(self):
 
57
        """Smoke test for 'bzr help checkouts'"""
 
58
        out, err = self.run_bzr('help checkouts')
 
59
        self.assertContainsRe(out, 'checkout')
 
60
        self.assertContainsRe(out, 'lightweight')
 
61
 
 
62
    def test_help_urlspec(self):
 
63
        """Smoke test for 'bzr help urlspec'"""
 
64
        out, err = self.run_bzr('help urlspec')
 
65
        self.assertContainsRe(out, 'aftp://')
 
66
        self.assertContainsRe(out, 'bzr://')
 
67
        self.assertContainsRe(out, 'bzr\+ssh://')
 
68
        self.assertContainsRe(out, 'file://')
 
69
        self.assertContainsRe(out, 'ftp://')
 
70
        self.assertContainsRe(out, 'http://')
 
71
        self.assertContainsRe(out, 'https://')
 
72
        self.assertContainsRe(out, 'sftp://')
 
73
 
 
74
    def test_help_repositories(self):
 
75
        """Smoke test for 'bzr help repositories'"""
 
76
        out, err = self.run_bzr('help repositories')
 
77
        from bzrlib.help_topics import help_as_plain_text, _repositories
 
78
        expected = help_as_plain_text(_repositories)
 
79
        self.assertEqual(expected, out)
 
80
 
 
81
    def test_help_working_trees(self):
 
82
        """Smoke test for 'bzr help working-trees'"""
 
83
        out, err = self.run_bzr('help working-trees')
 
84
        from bzrlib.help_topics import help_as_plain_text, _working_trees
 
85
        expected = help_as_plain_text(_working_trees)
 
86
        self.assertEqual(expected, out)
 
87
 
 
88
    def test_help_status_flags(self):
 
89
        """Smoke test for 'bzr help status-flags'"""
 
90
        out, err = self.run_bzr('help status-flags')
 
91
        from bzrlib.help_topics import help_as_plain_text, _status_flags
 
92
        expected = help_as_plain_text(_status_flags)
 
93
        self.assertEqual(expected, out)
 
94
 
 
95
    def test_help_commands(self):
 
96
        dash_help  = self.run_bzr('--help commands')[0]
 
97
        commands   = self.run_bzr('help commands')[0]
 
98
        hidden = self.run_bzr('help hidden-commands')[0]
 
99
        long_help  = self.run_bzr('help --long')[0]
 
100
        qmark_long = self.run_bzr('? --long')[0]
 
101
        qmark_cmds = self.run_bzr('? commands')[0]
 
102
        self.assertEquals(dash_help, commands)
 
103
        self.assertEquals(dash_help, long_help)
 
104
        self.assertEquals(dash_help, qmark_long)
 
105
        self.assertEquals(dash_help, qmark_cmds)
 
106
 
 
107
    def test_help_width_zero(self):
 
108
        self.overrideEnv('BZR_COLUMNS', '0')
 
109
        self.run_bzr('help commands')
 
110
 
 
111
    def test_hidden(self):
 
112
        help_commands = self.run_bzr('help commands')[0]
 
113
        help_hidden = self.run_bzr('help hidden-commands')[0]
 
114
 
 
115
        def extract_cmd_names(help_output):
 
116
            # keep only the command names to avoid matching on help text (there
 
117
            # is a high risk to fail a test when a plugin get installed
 
118
            # otherwise)
 
119
            cmds = []
 
120
            for line in help_output.split('\n'):
 
121
                if line.startswith(' '):
 
122
                    continue # help on more than one line
 
123
                cmd = line.split(' ')[0]
 
124
                if line:
 
125
                    cmds.append(cmd)
 
126
            return cmds
 
127
        commands = extract_cmd_names(help_commands)
 
128
        hidden = extract_cmd_names(help_hidden)
 
129
        self.assertTrue('commit' in commands)
 
130
        self.assertTrue('commit' not in hidden)
 
131
        self.assertTrue('rocks' in hidden)
 
132
        self.assertTrue('rocks' not in commands)
 
133
 
 
134
    def test_help_detail(self):
 
135
        dash_h  = self.run_bzr('diff -h')[0]
 
136
        help_x  = self.run_bzr('help diff')[0]
 
137
        self.assertEquals(dash_h, help_x)
 
138
        self.assertContainsRe(help_x, "Purpose:")
 
139
        self.assertContainsRe(help_x, "Usage:")
 
140
        self.assertContainsRe(help_x, "Options:")
 
141
        self.assertContainsRe(help_x, "Description:")
 
142
        self.assertContainsRe(help_x, "Examples:")
 
143
        self.assertContainsRe(help_x, "See also:")
 
144
        self.assertContainsRe(help_x, "Aliases:")
 
145
 
 
146
    def test_help_usage(self):
 
147
        usage  = self.run_bzr('diff --usage')[0]
 
148
        self.assertContainsRe(usage, "Purpose:")
 
149
        self.assertContainsRe(usage, "Usage:")
 
150
        self.assertContainsRe(usage, "Options:")
 
151
        self.assertNotContainsRe(usage, "Description:")
 
152
        self.assertNotContainsRe(usage, "Examples:")
 
153
        self.assertContainsRe(usage, "See also:")
 
154
        self.assertContainsRe(usage, "Aliases:")
 
155
 
 
156
    def test_help_help(self):
 
157
        help = self.run_bzr('help help')[0]
 
158
        qmark = self.run_bzr('? ?')[0]
 
159
        self.assertEquals(help, qmark)
 
160
        for line in help.split('\n'):
 
161
            if '--long' in line:
 
162
                self.assertContainsRe(line,
 
163
                    r'Show help on all commands\.')
 
164
 
 
165
    def test_help_with_aliases(self):
 
166
        original = self.run_bzr('help cat')[0]
 
167
 
 
168
        conf = config.GlobalConfig.from_string('''[ALIASES]
 
169
c=cat
 
170
cat=cat
 
171
''', save=True)
 
172
 
 
173
        expected = original + "'bzr cat' is an alias for 'bzr cat'.\n"
 
174
        self.assertEqual(expected, self.run_bzr('help cat')[0])
 
175
 
 
176
        self.assertEqual("'bzr c' is an alias for 'bzr cat'.\n",
 
177
                         self.run_bzr('help c')[0])