~bzr-pqm/bzr/bzr.dev

5597.1.1 by Vincent Ladeuil
Accept 0 to mean no limit for BZR_COLUMNS
1
# Copyright (C) 2006, 2007, 2009, 2010, 2011 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
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.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
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.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
16
17
18
"""Black-box tests for bzr help.
19
"""
20
21
6437.49.1 by Martin Packman
Add blackbox tests for display of translated help
22
from bzrlib import (
23
    config,
24
    i18n,
25
    tests,
26
    )
27
28
from bzrlib.tests.test_i18n import ZzzTranslations
29
30
31
class TestHelp(tests.TestCaseWithTransport):
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
32
33
    def test_help_basic(self):
1616.1.15 by Martin Pool
Handle 'bzr ?', etc.
34
        for cmd in ['--help', 'help', '-h', '-?']:
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
35
            output = self.run_bzr(cmd)[0]
1616.1.15 by Martin Pool
Handle 'bzr ?', etc.
36
            line1 = output.split('\n')[0]
1861.2.6 by Alexander Belchenko
branding: change Bazaar-NG to Bazaar
37
            if not line1.startswith('Bazaar'):
1616.1.15 by Martin Pool
Handle 'bzr ?', etc.
38
                self.fail("bad output from bzr %s:\n%r" % (cmd, output))
1616.1.13 by Martin Pool
Fix 'bzr -h' to show help (#35940)
39
        # see https://launchpad.net/products/bzr/+bug/35940, -h doesn't work
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
40
2023.1.1 by ghigo
add topics help
41
    def test_help_topics(self):
42
        """Smoketest for 'bzr help topics'"""
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
43
        out, err = self.run_bzr('help topics')
2023.1.1 by ghigo
add topics help
44
        self.assertContainsRe(out, 'basic')
45
        self.assertContainsRe(out, 'topics')
2070.4.7 by ghigo
Updates on the basis of the Richard Wilbur suggestions
46
        self.assertContainsRe(out, 'commands')
47
        self.assertContainsRe(out, 'revisionspec')
2023.1.1 by ghigo
add topics help
48
49
    def test_help_revisionspec(self):
50
        """Smoke test for 'bzr help revisionspec'"""
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
51
        out, err = self.run_bzr('help revisionspec')
2023.1.1 by ghigo
add topics help
52
        self.assertContainsRe(out, 'revno:')
53
        self.assertContainsRe(out, 'date:')
2070.4.7 by ghigo
Updates on the basis of the Richard Wilbur suggestions
54
        self.assertContainsRe(out, 'revid:')
55
        self.assertContainsRe(out, 'last:')
56
        self.assertContainsRe(out, 'before:')
57
        self.assertContainsRe(out, 'ancestor:')
58
        self.assertContainsRe(out, 'branch:')
2023.1.1 by ghigo
add topics help
59
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
60
    def test_help_checkouts(self):
61
        """Smoke test for 'bzr help checkouts'"""
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
62
        out, err = self.run_bzr('help checkouts')
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
63
        self.assertContainsRe(out, 'checkout')
64
        self.assertContainsRe(out, 'lightweight')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
65
2241.2.11 by ghigo
On the basis of Robert Collins and John Arbash Meinel
66
    def test_help_urlspec(self):
67
        """Smoke test for 'bzr help urlspec'"""
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
68
        out, err = self.run_bzr('help urlspec')
2241.2.11 by ghigo
On the basis of Robert Collins and John Arbash Meinel
69
        self.assertContainsRe(out, 'aftp://')
70
        self.assertContainsRe(out, 'bzr://')
71
        self.assertContainsRe(out, 'bzr\+ssh://')
72
        self.assertContainsRe(out, 'file://')
73
        self.assertContainsRe(out, 'ftp://')
74
        self.assertContainsRe(out, 'http://')
75
        self.assertContainsRe(out, 'https://')
76
        self.assertContainsRe(out, 'sftp://')
77
2401.2.1 by James Westby
Add a help topic for repositories.
78
    def test_help_repositories(self):
79
        """Smoke test for 'bzr help repositories'"""
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
80
        out, err = self.run_bzr('help repositories')
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
81
        from bzrlib.help_topics import help_as_plain_text, _repositories
82
        expected = help_as_plain_text(_repositories)
83
        self.assertEqual(expected, out)
2401.2.1 by James Westby
Add a help topic for repositories.
84
2401.2.2 by James Westby
Add a working-trees help topic.
85
    def test_help_working_trees(self):
86
        """Smoke test for 'bzr help working-trees'"""
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
87
        out, err = self.run_bzr('help working-trees')
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
88
        from bzrlib.help_topics import help_as_plain_text, _working_trees
89
        expected = help_as_plain_text(_working_trees)
90
        self.assertEqual(expected, out)
2401.2.2 by James Westby
Add a working-trees help topic.
91
2520.1.2 by Daniel Watkins
Added test for 'help status-flags'.
92
    def test_help_status_flags(self):
93
        """Smoke test for 'bzr help status-flags'"""
2571.1.2 by Ian Clatworthy
Fix PQM failure - use new test API
94
        out, err = self.run_bzr('help status-flags')
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
95
        from bzrlib.help_topics import help_as_plain_text, _status_flags
96
        expected = help_as_plain_text(_status_flags)
97
        self.assertEqual(expected, out)
2520.1.2 by Daniel Watkins
Added test for 'help status-flags'.
98
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
99
    def test_help_commands(self):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
100
        dash_help  = self.run_bzr('--help commands')[0]
101
        commands   = self.run_bzr('help commands')[0]
102
        hidden = self.run_bzr('help hidden-commands')[0]
103
        long_help  = self.run_bzr('help --long')[0]
104
        qmark_long = self.run_bzr('? --long')[0]
105
        qmark_cmds = self.run_bzr('? commands')[0]
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
106
        self.assertEquals(dash_help, commands)
107
        self.assertEquals(dash_help, long_help)
108
        self.assertEquals(dash_help, qmark_long)
109
        self.assertEquals(dash_help, qmark_cmds)
110
5582.7.1 by Neil Martinsen-Burrell
allow BZR_COLUMNS to be 0
111
    def test_help_width_zero(self):
112
        self.overrideEnv('BZR_COLUMNS', '0')
113
        self.run_bzr('help commands')
114
1551.9.13 by Aaron Bentley
add "hidden" topic
115
    def test_hidden(self):
4960.1.1 by Vincent Ladeuil
Fix brittle test.
116
        help_commands = self.run_bzr('help commands')[0]
117
        help_hidden = self.run_bzr('help hidden-commands')[0]
118
119
        def extract_cmd_names(help_output):
120
            # keep only the command names to avoid matching on help text (there
121
            # is a high risk to fail a test when a plugin get installed
122
            # otherwise)
123
            cmds = []
124
            for line in help_output.split('\n'):
125
                if line.startswith(' '):
126
                    continue # help on more than one line
127
                cmd = line.split(' ')[0]
128
                if line:
129
                    cmds.append(cmd)
130
            return cmds
131
        commands = extract_cmd_names(help_commands)
132
        hidden = extract_cmd_names(help_hidden)
1551.9.13 by Aaron Bentley
add "hidden" topic
133
        self.assertTrue('commit' in commands)
134
        self.assertTrue('commit' not in hidden)
135
        self.assertTrue('rocks' in hidden)
136
        self.assertTrue('rocks' not in commands)
137
3984.4.6 by Ian Clatworthy
Show usage on --usage, not -h
138
    def test_help_detail(self):
3984.4.5 by Ian Clatworthy
help xxx is full help; xxx -h is concise help
139
        dash_h  = self.run_bzr('diff -h')[0]
140
        help_x  = self.run_bzr('help diff')[0]
3984.4.6 by Ian Clatworthy
Show usage on --usage, not -h
141
        self.assertEquals(dash_h, help_x)
3984.4.5 by Ian Clatworthy
help xxx is full help; xxx -h is concise help
142
        self.assertContainsRe(help_x, "Purpose:")
143
        self.assertContainsRe(help_x, "Usage:")
144
        self.assertContainsRe(help_x, "Options:")
145
        self.assertContainsRe(help_x, "Description:")
146
        self.assertContainsRe(help_x, "Examples:")
147
        self.assertContainsRe(help_x, "See also:")
148
        self.assertContainsRe(help_x, "Aliases:")
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
149
3984.4.6 by Ian Clatworthy
Show usage on --usage, not -h
150
    def test_help_usage(self):
151
        usage  = self.run_bzr('diff --usage')[0]
152
        self.assertContainsRe(usage, "Purpose:")
153
        self.assertContainsRe(usage, "Usage:")
154
        self.assertContainsRe(usage, "Options:")
155
        self.assertNotContainsRe(usage, "Description:")
156
        self.assertNotContainsRe(usage, "Examples:")
157
        self.assertContainsRe(usage, "See also:")
158
        self.assertContainsRe(usage, "Aliases:")
159
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
160
    def test_help_help(self):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
161
        help = self.run_bzr('help help')[0]
162
        qmark = self.run_bzr('? ?')[0]
1553.4.3 by Michael Ellerman
Add custom description for help's --long option, this fixes bug #31217.
163
        self.assertEquals(help, qmark)
164
        for line in help.split('\n'):
165
            if '--long' in line:
2598.1.4 by Martin Pool
Fix up tests for option help cleanups
166
                self.assertContainsRe(line,
167
                    r'Show help on all commands\.')
2743.2.4 by Daniel Watkins
Added blackbox tests to ensure aliases are displayed in help correctly.
168
169
    def test_help_with_aliases(self):
170
        original = self.run_bzr('help cat')[0]
171
5345.1.26 by Vincent Ladeuil
Merge lockable-config-files into remove-gratuitous-ensure-config-dir-exist-calls resolving conflicts
172
        conf = config.GlobalConfig.from_string('''[ALIASES]
5345.1.14 by Vincent Ladeuil
Cleanup bb.test_help.
173
c=cat
174
cat=cat
5345.1.25 by Vincent Ladeuil
Move the '_save' parameter from '__init__' to 'from_bytes', fix fallouts.
175
''', save=True)
2743.2.4 by Daniel Watkins
Added blackbox tests to ensure aliases are displayed in help correctly.
176
177
        expected = original + "'bzr cat' is an alias for 'bzr cat'.\n"
178
        self.assertEqual(expected, self.run_bzr('help cat')[0])
179
180
        self.assertEqual("'bzr c' is an alias for 'bzr cat'.\n",
2743.2.6 by Daniel Watkins
Cleaned up indentation in test.
181
                         self.run_bzr('help c')[0])
6437.49.1 by Martin Packman
Add blackbox tests for display of translated help
182
183
184
class TestTranslatedHelp(tests.TestCaseWithTransport):
185
    """Tests for display of translated help topics"""
186
187
    def setUp(self):
188
        super(TestTranslatedHelp, self).setUp()
189
        self.overrideAttr(i18n, '_translations', ZzzTranslations())
190
191
    def test_help_command_utf8(self):
192
        out, err = self.run_bzr(["help", "push"], encoding="utf-8")
193
        self.assertContainsRe(out, "zz\xc3\xa5{{:See also:")
194
195
    def test_help_switch_utf8(self):
196
        out, err = self.run_bzr(["push", "--help"], encoding="utf-8")
197
        self.assertContainsRe(out, "zz\xc3\xa5{{:See also:")
198
199
    def test_help_command_ascii(self):
200
        out, err = self.run_bzr(["help", "push"], encoding="ascii")
201
        self.assertContainsRe(out, "zz\\?{{:See also:")
202
203
    def test_help_switch_ascii(self):
204
        out, err = self.run_bzr(["push", "--help"], encoding="ascii")
205
        self.assertContainsRe(out, "zz\\?{{:See also:")