~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_help.py

  • Committer: Patch Queue Manager
  • Date: 2014-02-12 18:22:22 UTC
  • mfrom: (6589.2.1 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20140212182222-beouo25gaf1cny76
(vila) The XDG Base Directory Specification uses the XDG_CACHE_HOME,
 not XDG_CACHE_DIR. (Andrew Starr-Bochicchio)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007 Canonical Ltd
 
1
# Copyright (C) 2007-2011 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
16
16
 
17
17
"""Unit tests for the bzrlib.help module."""
18
18
 
19
 
from cStringIO import StringIO
 
19
import textwrap
20
20
 
21
21
from bzrlib import (
22
22
    builtins,
23
23
    commands,
 
24
    config,
24
25
    errors,
25
26
    help,
26
27
    help_topics,
 
28
    i18n,
27
29
    plugin,
28
30
    tests,
29
31
    )
30
32
 
 
33
from bzrlib.tests.test_i18n import ZzzTranslations
 
34
import re
 
35
 
31
36
 
32
37
class TestCommandHelp(tests.TestCase):
33
38
    """Tests for help on commands."""
34
39
 
 
40
    def assertCmdHelp(self, expected, cmd):
 
41
        self.assertEqualDiff(textwrap.dedent(expected), cmd.get_help_text())
 
42
 
35
43
    def test_command_help_includes_see_also(self):
36
44
        class cmd_WithSeeAlso(commands.Command):
37
 
            """A sample command."""
 
45
            __doc__ = """A sample command."""
38
46
            _see_also = ['foo', 'bar']
39
 
        cmd = cmd_WithSeeAlso()
40
 
        helptext = cmd.get_help_text()
41
 
        self.assertEndsWith(
42
 
            helptext,
43
 
            '  -v, --verbose  Display more information.\n'
44
 
            '  -q, --quiet    Only display errors and warnings.\n'
45
 
            '  -h, --help     Show help message.\n'
46
 
            '\n'
47
 
            'See also: bar, foo\n')
 
47
        self.assertCmdHelp('''\
 
48
Purpose: A sample command.
 
49
Usage:   bzr WithSeeAlso
 
50
 
 
51
Options:
 
52
  --usage        Show usage message and options.
 
53
  -q, --quiet    Only display errors and warnings.
 
54
  -v, --verbose  Display more information.
 
55
  -h, --help     Show help message.
 
56
 
 
57
See also: bar, foo
 
58
''',
 
59
                           cmd_WithSeeAlso())
48
60
 
49
61
    def test_get_help_text(self):
50
62
        """Commands have a get_help_text method which returns their help."""
51
63
        class cmd_Demo(commands.Command):
52
 
            """A sample command."""
 
64
            __doc__ = """A sample command."""
 
65
        self.assertCmdHelp('''\
 
66
Purpose: A sample command.
 
67
Usage:   bzr Demo
 
68
 
 
69
Options:
 
70
  --usage        Show usage message and options.
 
71
  -q, --quiet    Only display errors and warnings.
 
72
  -v, --verbose  Display more information.
 
73
  -h, --help     Show help message.
 
74
 
 
75
''',
 
76
                           cmd_Demo())
53
77
        cmd = cmd_Demo()
54
78
        helptext = cmd.get_help_text()
55
79
        self.assertStartsWith(helptext,
60
84
 
61
85
    def test_command_with_additional_see_also(self):
62
86
        class cmd_WithSeeAlso(commands.Command):
63
 
            """A sample command."""
 
87
            __doc__ = """A sample command."""
64
88
            _see_also = ['foo', 'bar']
65
89
        cmd = cmd_WithSeeAlso()
66
90
        helptext = cmd.get_help_text(['gam'])
67
91
        self.assertEndsWith(
68
92
            helptext,
 
93
            '  -q, --quiet    Only display errors and warnings.\n'
69
94
            '  -v, --verbose  Display more information.\n'
70
 
            '  -q, --quiet    Only display errors and warnings.\n'
71
95
            '  -h, --help     Show help message.\n'
72
96
            '\n'
73
97
            'See also: bar, foo, gam\n')
74
98
 
75
99
    def test_command_only_additional_see_also(self):
76
100
        class cmd_WithSeeAlso(commands.Command):
77
 
            """A sample command."""
 
101
            __doc__ = """A sample command."""
78
102
        cmd = cmd_WithSeeAlso()
79
103
        helptext = cmd.get_help_text(['gam'])
80
104
        self.assertEndsWith(
81
105
            helptext,
 
106
            '  -q, --quiet    Only display errors and warnings.\n'
82
107
            '  -v, --verbose  Display more information.\n'
83
 
            '  -q, --quiet    Only display errors and warnings.\n'
84
108
            '  -h, --help     Show help message.\n'
85
109
            '\n'
86
110
            'See also: gam\n')
88
112
    def test_get_help_topic(self):
89
113
        """The help topic for a Command is its name()."""
90
114
        class cmd_foo_bar(commands.Command):
91
 
            """A sample command."""
 
115
            __doc__ = """A sample command."""
92
116
        cmd = cmd_foo_bar()
93
117
        self.assertEqual(cmd.name(), cmd.get_help_topic())
94
118
 
95
119
    def test_formatted_help_text(self):
96
120
        """Help text should be plain text by default."""
97
121
        class cmd_Demo(commands.Command):
98
 
            """A sample command.
 
122
            __doc__ = """A sample command.
99
123
 
100
124
            :Examples:
101
125
                Example 1::
105
129
                Example 2::
106
130
 
107
131
                    cmd arg2
 
132
 
 
133
                A code block follows.
 
134
 
 
135
                ::
 
136
 
 
137
                    bzr Demo something
108
138
            """
109
139
        cmd = cmd_Demo()
110
140
        helptext = cmd.get_help_text()
111
 
        self.assertEquals(
112
 
            helptext,
113
 
            'Purpose: A sample command.\n'
114
 
            'Usage:   bzr Demo\n'
115
 
            '\n'
116
 
            'Options:\n'
117
 
            '  --usage        Show usage message and options.\n'
118
 
            '  -v, --verbose  Display more information.\n'
119
 
            '  -q, --quiet    Only display errors and warnings.\n'
120
 
            '  -h, --help     Show help message.\n'
121
 
            '\n'
122
 
            'Examples:\n'
123
 
            '    Example 1:\n'
124
 
            '\n'
125
 
            '        cmd arg1\n'
126
 
            '\n'
127
 
            '    Example 2:\n'
128
 
            '\n'
129
 
            '        cmd arg2\n'
130
 
            '\n')
 
141
        self.assertEqualDiff('''\
 
142
Purpose: A sample command.
 
143
Usage:   bzr Demo
 
144
 
 
145
Options:
 
146
  --usage        Show usage message and options.
 
147
  -q, --quiet    Only display errors and warnings.
 
148
  -v, --verbose  Display more information.
 
149
  -h, --help     Show help message.
 
150
 
 
151
Examples:
 
152
    Example 1:
 
153
 
 
154
        cmd arg1
 
155
 
 
156
    Example 2:
 
157
 
 
158
        cmd arg2
 
159
 
 
160
    A code block follows.
 
161
 
 
162
        bzr Demo something
 
163
 
 
164
''',
 
165
                                         helptext)
131
166
        helptext = cmd.get_help_text(plain=False)
132
 
        self.assertEquals(helptext,
133
 
            ':Purpose: A sample command.\n'
134
 
            ':Usage:   bzr Demo\n'
135
 
            '\n'
136
 
            ':Options:\n'
137
 
            '  --usage        Show usage message and options.\n'
138
 
            '  -v, --verbose  Display more information.\n'
139
 
            '  -q, --quiet    Only display errors and warnings.\n'
140
 
            '  -h, --help     Show help message.\n'
141
 
            '\n'
142
 
            ':Examples:\n'
143
 
            '    Example 1::\n'
144
 
            '\n'
145
 
            '        cmd arg1\n'
146
 
            '\n'
147
 
            '    Example 2::\n'
148
 
            '\n'
149
 
            '        cmd arg2\n'
150
 
            '\n')
 
167
        self.assertEqualDiff('''\
 
168
:Purpose: A sample command.
 
169
:Usage:   bzr Demo
 
170
 
 
171
:Options:
 
172
  --usage        Show usage message and options.
 
173
  -q, --quiet    Only display errors and warnings.
 
174
  -v, --verbose  Display more information.
 
175
  -h, --help     Show help message.
 
176
 
 
177
:Examples:
 
178
    Example 1::
 
179
 
 
180
        cmd arg1
 
181
 
 
182
    Example 2::
 
183
 
 
184
        cmd arg2
 
185
 
 
186
    A code block follows.
 
187
 
 
188
    ::
 
189
 
 
190
        bzr Demo something
 
191
 
 
192
''',
 
193
                             helptext)
151
194
 
152
195
    def test_concise_help_text(self):
153
196
        """Concise help text excludes the descriptive sections."""
154
197
        class cmd_Demo(commands.Command):
155
 
            """A sample command.
 
198
            __doc__ = """A sample command.
156
199
 
157
200
            Blah blah blah.
158
201
 
163
206
            """
164
207
        cmd = cmd_Demo()
165
208
        helptext = cmd.get_help_text()
166
 
        self.assertEqualDiff(
167
 
            helptext,
168
 
            'Purpose: A sample command.\n'
169
 
            'Usage:   bzr Demo\n'
170
 
            '\n'
171
 
            'Options:\n'
172
 
            '  --usage        Show usage message and options.\n'
173
 
            '  -v, --verbose  Display more information.\n'
174
 
            '  -q, --quiet    Only display errors and warnings.\n'
175
 
            '  -h, --help     Show help message.\n'
176
 
            '\n'
177
 
            'Description:\n'
178
 
            '  Blah blah blah.\n'
179
 
            '\n'
180
 
            'Examples:\n'
181
 
            '    Example 1:\n'
182
 
            '\n'
183
 
            '        cmd arg1\n'
184
 
            '\n')
 
209
        self.assertEqualDiff('''\
 
210
Purpose: A sample command.
 
211
Usage:   bzr Demo
 
212
 
 
213
Options:
 
214
  --usage        Show usage message and options.
 
215
  -q, --quiet    Only display errors and warnings.
 
216
  -v, --verbose  Display more information.
 
217
  -h, --help     Show help message.
 
218
 
 
219
Description:
 
220
  Blah blah blah.
 
221
 
 
222
Examples:
 
223
    Example 1:
 
224
 
 
225
        cmd arg1
 
226
 
 
227
''',
 
228
                             helptext)
185
229
        helptext = cmd.get_help_text(verbose=False)
186
 
        self.assertEquals(helptext,
187
 
            'Purpose: A sample command.\n'
188
 
            'Usage:   bzr Demo\n'
189
 
            '\n'
190
 
            'Options:\n'
191
 
            '  --usage        Show usage message and options.\n'
192
 
            '  -v, --verbose  Display more information.\n'
193
 
            '  -q, --quiet    Only display errors and warnings.\n'
194
 
            '  -h, --help     Show help message.\n'
195
 
            '\n'
196
 
            'See bzr help Demo for more details and examples.\n'
197
 
            '\n')
198
 
 
199
 
    def test_help_custom_section_ordering(self):
200
 
        """Custom descriptive sections should remain in the order given."""
201
 
        class cmd_Demo(commands.Command):
202
 
            """A sample command.
 
230
        self.assertEqualDiff('''\
 
231
Purpose: A sample command.
 
232
Usage:   bzr Demo
 
233
 
 
234
Options:
 
235
  --usage        Show usage message and options.
 
236
  -q, --quiet    Only display errors and warnings.
 
237
  -v, --verbose  Display more information.
 
238
  -h, --help     Show help message.
 
239
 
 
240
See bzr help Demo for more details and examples.
 
241
 
 
242
''',
 
243
                             helptext)
 
244
 
 
245
    def test_help_custom_section_ordering(self):
 
246
        """Custom descriptive sections should remain in the order given."""
 
247
        class cmd_Demo(commands.Command):
 
248
            __doc__ = """\
 
249
A sample command.
 
250
 
 
251
Blah blah blah.
 
252
 
 
253
:Formats:
 
254
  Interesting stuff about formats.
 
255
 
 
256
:Examples:
 
257
  Example 1::
 
258
 
 
259
    cmd arg1
 
260
 
 
261
:Tips:
 
262
  Clever things to keep in mind.
 
263
"""
 
264
        cmd = cmd_Demo()
 
265
        helptext = cmd.get_help_text()
 
266
        self.assertEqualDiff('''\
 
267
Purpose: A sample command.
 
268
Usage:   bzr Demo
 
269
 
 
270
Options:
 
271
  --usage        Show usage message and options.
 
272
  -q, --quiet    Only display errors and warnings.
 
273
  -v, --verbose  Display more information.
 
274
  -h, --help     Show help message.
 
275
 
 
276
Description:
 
277
  Blah blah blah.
 
278
 
 
279
Formats:
 
280
  Interesting stuff about formats.
 
281
 
 
282
Examples:
 
283
  Example 1:
 
284
 
 
285
    cmd arg1
 
286
 
 
287
Tips:
 
288
  Clever things to keep in mind.
 
289
 
 
290
''',
 
291
                             helptext)
 
292
 
 
293
    def test_help_text_custom_usage(self):
 
294
        """Help text may contain a custom usage section."""
 
295
        class cmd_Demo(commands.Command):
 
296
            __doc__ = """A sample command.
 
297
 
 
298
            :Usage:
 
299
                cmd Demo [opts] args
 
300
 
 
301
                cmd Demo -h
 
302
 
 
303
            Blah blah blah.
 
304
            """
 
305
        cmd = cmd_Demo()
 
306
        helptext = cmd.get_help_text()
 
307
        self.assertEqualDiff('''\
 
308
Purpose: A sample command.
 
309
Usage:
 
310
    cmd Demo [opts] args
 
311
 
 
312
    cmd Demo -h
 
313
 
 
314
 
 
315
Options:
 
316
  --usage        Show usage message and options.
 
317
  -q, --quiet    Only display errors and warnings.
 
318
  -v, --verbose  Display more information.
 
319
  -h, --help     Show help message.
 
320
 
 
321
Description:
 
322
  Blah blah blah.
 
323
 
 
324
''',
 
325
                             helptext)
 
326
 
 
327
 
 
328
class ZzzTranslationsForDoc(ZzzTranslations):
 
329
 
 
330
    _section_pat = re.compile(':\w+:\\n\\s+')
 
331
    _indent_pat = re.compile('\\s+')
 
332
 
 
333
    def zzz(self, s):
 
334
        m = self._section_pat.match(s)
 
335
        if m is None:
 
336
            m = self._indent_pat.match(s)
 
337
        if m:
 
338
            return u'%szz{{%s}}' % (m.group(0), s[m.end():])
 
339
        return u'zz{{%s}}' % s
 
340
 
 
341
 
 
342
class TestCommandHelpI18n(tests.TestCase):
 
343
    """Tests for help on translated commands."""
 
344
 
 
345
    def setUp(self):
 
346
        super(TestCommandHelpI18n, self).setUp()
 
347
        self.overrideAttr(i18n, '_translations', ZzzTranslationsForDoc())
 
348
 
 
349
    def assertCmdHelp(self, expected, cmd):
 
350
        self.assertEqualDiff(textwrap.dedent(expected), cmd.get_help_text())
 
351
 
 
352
    def test_command_help_includes_see_also(self):
 
353
        class cmd_WithSeeAlso(commands.Command):
 
354
            __doc__ = """A sample command."""
 
355
            _see_also = ['foo', 'bar']
 
356
        self.assertCmdHelp('''\
 
357
zz{{:Purpose: zz{{A sample command.}}
 
358
}}zz{{:Usage:   bzr WithSeeAlso
 
359
}}
 
360
zz{{:Options:
 
361
  --usage        zz{{Show usage message and options.}}
 
362
  -q, --quiet    zz{{Only display errors and warnings.}}
 
363
  -v, --verbose  zz{{Display more information.}}
 
364
  -h, --help     zz{{Show help message.}}
 
365
}}
 
366
zz{{:See also: bar, foo}}
 
367
''',
 
368
                           cmd_WithSeeAlso())
 
369
 
 
370
    def test_get_help_text(self):
 
371
        """Commands have a get_help_text method which returns their help."""
 
372
        class cmd_Demo(commands.Command):
 
373
            __doc__ = """A sample command."""
 
374
        self.assertCmdHelp('''\
 
375
zz{{:Purpose: zz{{A sample command.}}
 
376
}}zz{{:Usage:   bzr Demo
 
377
}}
 
378
zz{{:Options:
 
379
  --usage        zz{{Show usage message and options.}}
 
380
  -q, --quiet    zz{{Only display errors and warnings.}}
 
381
  -v, --verbose  zz{{Display more information.}}
 
382
  -h, --help     zz{{Show help message.}}
 
383
}}
 
384
''',
 
385
                           cmd_Demo())
 
386
 
 
387
    def test_command_with_additional_see_also(self):
 
388
        class cmd_WithSeeAlso(commands.Command):
 
389
            __doc__ = """A sample command."""
 
390
            _see_also = ['foo', 'bar']
 
391
        cmd = cmd_WithSeeAlso()
 
392
        helptext = cmd.get_help_text(['gam'])
 
393
        self.assertEndsWith(
 
394
            helptext,'''\
 
395
  -q, --quiet    zz{{Only display errors and warnings.}}
 
396
  -v, --verbose  zz{{Display more information.}}
 
397
  -h, --help     zz{{Show help message.}}
 
398
}}
 
399
zz{{:See also: bar, foo, gam}}
 
400
''')
 
401
 
 
402
    def test_command_only_additional_see_also(self):
 
403
        class cmd_WithSeeAlso(commands.Command):
 
404
            __doc__ = """A sample command."""
 
405
        cmd = cmd_WithSeeAlso()
 
406
        helptext = cmd.get_help_text(['gam'])
 
407
        self.assertEndsWith(
 
408
            helptext, '''\
 
409
zz{{:Options:
 
410
  --usage        zz{{Show usage message and options.}}
 
411
  -q, --quiet    zz{{Only display errors and warnings.}}
 
412
  -v, --verbose  zz{{Display more information.}}
 
413
  -h, --help     zz{{Show help message.}}
 
414
}}
 
415
zz{{:See also: gam}}
 
416
''')
 
417
 
 
418
 
 
419
    def test_help_custom_section_ordering(self):
 
420
        """Custom descriptive sections should remain in the order given."""
 
421
        # The help formatter expect the class name to start with 'cmd_'
 
422
        class cmd_Demo(commands.Command):
 
423
            __doc__ = """A sample command.
203
424
 
204
425
            Blah blah blah.
205
426
 
214
435
            :Tips:
215
436
              Clever things to keep in mind.
216
437
            """
217
 
        cmd = cmd_Demo()
218
 
        helptext = cmd.get_help_text()
219
 
        self.assertEqualDiff(
220
 
            helptext,
221
 
            'Purpose: A sample command.\n'
222
 
            'Usage:   bzr Demo\n'
223
 
            '\n'
224
 
            'Options:\n'
225
 
            '  --usage        Show usage message and options.\n'
226
 
            '  -v, --verbose  Display more information.\n'
227
 
            '  -q, --quiet    Only display errors and warnings.\n'
228
 
            '  -h, --help     Show help message.\n'
229
 
            '\n'
230
 
            'Description:\n'
231
 
            '  Blah blah blah.\n'
232
 
            '\n'
233
 
            'Formats:\n'
234
 
            '  Interesting stuff about formats.\n'
235
 
            '\n'
236
 
            'Examples:\n'
237
 
            '  Example 1:\n'
238
 
            '\n'
239
 
            '    cmd arg1\n'
240
 
            '\n'
241
 
            'Tips:\n'
242
 
            '  Clever things to keep in mind.\n'
243
 
            '\n')
 
438
        self.assertCmdHelp('''\
 
439
zz{{:Purpose: zz{{A sample command.}}
 
440
}}zz{{:Usage:   bzr Demo
 
441
}}
 
442
zz{{:Options:
 
443
  --usage        zz{{Show usage message and options.}}
 
444
  -q, --quiet    zz{{Only display errors and warnings.}}
 
445
  -v, --verbose  zz{{Display more information.}}
 
446
  -h, --help     zz{{Show help message.}}
 
447
}}
 
448
Description:
 
449
  zz{{zz{{Blah blah blah.}}
 
450
 
 
451
}}:Formats:
 
452
  zz{{Interesting stuff about formats.}}
 
453
 
 
454
Examples:
 
455
  zz{{Example 1::}}
 
456
 
 
457
    zz{{cmd arg1}}
 
458
 
 
459
Tips:
 
460
  zz{{Clever things to keep in mind.}}
 
461
 
 
462
''',
 
463
                           cmd_Demo())
244
464
 
245
465
    def test_help_text_custom_usage(self):
246
466
        """Help text may contain a custom usage section."""
247
467
        class cmd_Demo(commands.Command):
248
 
            """A sample command.
 
468
            __doc__ = """A sample command.
249
469
 
250
470
            :Usage:
251
471
                cmd Demo [opts] args
254
474
 
255
475
            Blah blah blah.
256
476
            """
257
 
        cmd = cmd_Demo()
258
 
        helptext = cmd.get_help_text()
259
 
        self.assertEquals(helptext,
260
 
            'Purpose: A sample command.\n'
261
 
            'Usage:\n'
262
 
            '    cmd Demo [opts] args\n'
263
 
            '\n'
264
 
            '    cmd Demo -h\n'
265
 
            '\n'
266
 
            '\n'
267
 
            'Options:\n'
268
 
            '  --usage        Show usage message and options.\n'
269
 
            '  -v, --verbose  Display more information.\n'
270
 
            '  -q, --quiet    Only display errors and warnings.\n'
271
 
            '  -h, --help     Show help message.\n'
272
 
            '\n'
273
 
            'Description:\n'
274
 
            '  Blah blah blah.\n\n')
275
 
 
276
 
 
277
 
class TestRegisteredTopic(tests.TestCase):
 
477
        self.assertCmdHelp('''\
 
478
zz{{:Purpose: zz{{A sample command.}}
 
479
}}zz{{:Usage:
 
480
    zz{{cmd Demo [opts] args}}
 
481
 
 
482
    zz{{cmd Demo -h}}
 
483
 
 
484
}}
 
485
zz{{:Options:
 
486
  --usage        zz{{Show usage message and options.}}
 
487
  -q, --quiet    zz{{Only display errors and warnings.}}
 
488
  -v, --verbose  zz{{Display more information.}}
 
489
  -h, --help     zz{{Show help message.}}
 
490
}}
 
491
Description:
 
492
  zz{{zz{{Blah blah blah.}}
 
493
 
 
494
}}
 
495
''',
 
496
                           cmd_Demo())
 
497
 
 
498
 
 
499
class TestHelp(tests.TestCase):
 
500
 
 
501
    def setUp(self):
 
502
        super(TestHelp, self).setUp()
 
503
        commands.install_bzr_command_hooks()
 
504
 
 
505
 
 
506
class TestRegisteredTopic(TestHelp):
278
507
    """Tests for the RegisteredTopic class."""
279
508
 
280
509
    def test_contruct(self):
285
514
        self.assertEqual('basic', topic.topic)
286
515
 
287
516
    def test_get_help_text(self):
288
 
        """A RegisteredTopic returns the get_detail results for get_help_text."""
 
517
        """RegisteredTopic returns the get_detail results for get_help_text."""
289
518
        topic = help_topics.RegisteredTopic('commands')
290
519
        self.assertEqual(help_topics.topic_registry.get_detail('commands'),
291
 
            topic.get_help_text())
 
520
                         topic.get_help_text())
292
521
 
293
522
    def test_get_help_text_with_additional_see_also(self):
294
523
        topic = help_topics.RegisteredTopic('commands')
306
535
            '\n')
307
536
 
308
537
    def test_get_help_topic(self):
309
 
        """The help topic for a RegisteredTopic is its topic from construction."""
 
538
        """The help topic for RegisteredTopic is its topic from construction."""
310
539
        topic = help_topics.RegisteredTopic('foobar')
311
540
        self.assertEqual('foobar', topic.get_help_topic())
312
541
        topic = help_topics.RegisteredTopic('baz')
313
542
        self.assertEqual('baz', topic.get_help_topic())
314
543
 
315
544
 
316
 
class TestTopicIndex(tests.TestCase):
 
545
class TestTopicIndex(TestHelp):
317
546
    """Tests for the HelpTopicIndex class."""
318
547
 
319
548
    def test_default_constructable(self):
346
575
        self.assertEqual('', index.prefix)
347
576
 
348
577
 
349
 
class TestCommandIndex(tests.TestCase):
 
578
class TestConfigOptionIndex(TestHelp):
 
579
    """Tests for the HelpCommandIndex class."""
 
580
 
 
581
    def setUp(self):
 
582
        super(TestConfigOptionIndex, self).setUp()
 
583
        self.index = help_topics.ConfigOptionHelpIndex()
 
584
 
 
585
    def test_get_topics_None(self):
 
586
        """Searching for None returns an empty list."""
 
587
        self.assertEqual([], self.index.get_topics(None))
 
588
 
 
589
    def test_get_topics_no_topic(self):
 
590
        self.assertEqual([], self.index.get_topics('nothing by this name'))
 
591
 
 
592
    def test_prefix(self):
 
593
        self.assertEqual('configuration/', self.index.prefix)
 
594
 
 
595
    def test_get_topic_with_prefix(self):
 
596
        topics = self.index.get_topics('configuration/default_format')
 
597
        self.assertLength(1, topics)
 
598
        opt = topics[0]
 
599
        self.assertIsInstance(opt, config.Option)
 
600
        self.assertEquals('default_format', opt.name)
 
601
 
 
602
 
 
603
class TestCommandIndex(TestHelp):
350
604
    """Tests for the HelpCommandIndex class."""
351
605
 
352
606
    def test_default_constructable(self):
388
642
    def test_default_search_path(self):
389
643
        """The default search path should include internal indexs."""
390
644
        indices = help.HelpIndices()
391
 
        self.assertEqual(3, len(indices.search_path))
 
645
        self.assertEqual(4, len(indices.search_path))
392
646
        # help topics should be searched in first.
393
647
        self.assertIsInstance(indices.search_path[0],
394
 
            help_topics.HelpTopicIndex)
 
648
                              help_topics.HelpTopicIndex)
395
649
        # with commands being search second.
396
650
        self.assertIsInstance(indices.search_path[1],
397
 
            commands.HelpCommandIndex)
398
 
        # and plugins are a third index.
 
651
                              commands.HelpCommandIndex)
 
652
        # plugins are a third index.
399
653
        self.assertIsInstance(indices.search_path[2],
400
 
            plugin.PluginsHelpIndex)
 
654
                              plugin.PluginsHelpIndex)
 
655
        # config options are a fourth index
 
656
        self.assertIsInstance(indices.search_path[3],
 
657
                              help_topics.ConfigOptionHelpIndex)
401
658
 
402
659
    def test_search_for_unknown_topic_raises(self):
403
660
        """Searching for an unknown topic should raise NoHelpTopic."""