~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_help.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-12-02 14:58:47 UTC
  • mfrom: (5554.1.3 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20101202145847-fw822sd3nyhvrwmi
(vila) Merge 2.2 into trunk including fix for bug #583667 and bug
        #681885 (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007-2012, 2016 Canonical Ltd
 
1
# Copyright (C) 2007-2010 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
 
import textwrap
 
19
from cStringIO import StringIO
20
20
 
21
21
from bzrlib import (
22
22
    builtins,
23
23
    commands,
24
 
    config,
25
24
    errors,
26
25
    help,
27
26
    help_topics,
28
 
    i18n,
29
27
    plugin,
30
28
    tests,
31
29
    )
32
30
 
33
 
from bzrlib.tests.test_i18n import ZzzTranslations
34
 
import re
 
31
 
 
32
class TestHelp(tests.TestCase):
 
33
 
 
34
    def setUp(self):
 
35
        tests.TestCase.setUp(self)
 
36
        commands.install_bzr_command_hooks()
35
37
 
36
38
 
37
39
class TestCommandHelp(tests.TestCase):
38
40
    """Tests for help on commands."""
39
41
 
40
 
    def assertCmdHelp(self, expected, cmd):
41
 
        self.assertEqualDiff(textwrap.dedent(expected), cmd.get_help_text())
42
 
 
43
42
    def test_command_help_includes_see_also(self):
44
43
        class cmd_WithSeeAlso(commands.Command):
45
44
            __doc__ = """A sample command."""
46
45
            _see_also = ['foo', 'bar']
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())
 
46
        cmd = cmd_WithSeeAlso()
 
47
        helptext = cmd.get_help_text()
 
48
        self.assertEndsWith(
 
49
            helptext,
 
50
            '  -v, --verbose  Display more information.\n'
 
51
            '  -q, --quiet    Only display errors and warnings.\n'
 
52
            '  -h, --help     Show help message.\n'
 
53
            '\n'
 
54
            'See also: bar, foo\n')
60
55
 
61
56
    def test_get_help_text(self):
62
57
        """Commands have a get_help_text method which returns their help."""
63
58
        class cmd_Demo(commands.Command):
64
59
            __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())
77
60
        cmd = cmd_Demo()
78
61
        helptext = cmd.get_help_text()
79
62
        self.assertStartsWith(helptext,
90
73
        helptext = cmd.get_help_text(['gam'])
91
74
        self.assertEndsWith(
92
75
            helptext,
 
76
            '  -v, --verbose  Display more information.\n'
93
77
            '  -q, --quiet    Only display errors and warnings.\n'
94
 
            '  -v, --verbose  Display more information.\n'
95
78
            '  -h, --help     Show help message.\n'
96
79
            '\n'
97
80
            'See also: bar, foo, gam\n')
103
86
        helptext = cmd.get_help_text(['gam'])
104
87
        self.assertEndsWith(
105
88
            helptext,
 
89
            '  -v, --verbose  Display more information.\n'
106
90
            '  -q, --quiet    Only display errors and warnings.\n'
107
 
            '  -v, --verbose  Display more information.\n'
108
91
            '  -h, --help     Show help message.\n'
109
92
            '\n'
110
93
            'See also: gam\n')
138
121
            """
139
122
        cmd = cmd_Demo()
140
123
        helptext = cmd.get_help_text()
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)
 
124
        self.assertEquals(
 
125
            helptext,
 
126
            'Purpose: A sample command.\n'
 
127
            'Usage:   bzr Demo\n'
 
128
            '\n'
 
129
            'Options:\n'
 
130
            '  --usage        Show usage message and options.\n'
 
131
            '  -v, --verbose  Display more information.\n'
 
132
            '  -q, --quiet    Only display errors and warnings.\n'
 
133
            '  -h, --help     Show help message.\n'
 
134
            '\n'
 
135
            'Examples:\n'
 
136
            '    Example 1:\n'
 
137
            '\n'
 
138
            '        cmd arg1\n'
 
139
            '\n'
 
140
            '    Example 2:\n'
 
141
            '\n'
 
142
            '        cmd arg2\n'
 
143
            '\n'
 
144
            '    A code block follows.\n'
 
145
            '\n'
 
146
            '        bzr Demo something\n'
 
147
            '\n')
166
148
        helptext = cmd.get_help_text(plain=False)
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)
 
149
        self.assertEquals(helptext,
 
150
            ':Purpose: A sample command.\n'
 
151
            ':Usage:   bzr Demo\n'
 
152
            '\n'
 
153
            ':Options:\n'
 
154
            '  --usage        Show usage message and options.\n'
 
155
            '  -v, --verbose  Display more information.\n'
 
156
            '  -q, --quiet    Only display errors and warnings.\n'
 
157
            '  -h, --help     Show help message.\n'
 
158
            '\n'
 
159
            ':Examples:\n'
 
160
            '    Example 1::\n'
 
161
            '\n'
 
162
            '        cmd arg1\n'
 
163
            '\n'
 
164
            '    Example 2::\n'
 
165
            '\n'
 
166
            '        cmd arg2\n'
 
167
            '\n'
 
168
            '    A code block follows.\n'
 
169
            '\n'
 
170
            '    ::\n'
 
171
            '\n'
 
172
            '        bzr Demo something\n'
 
173
            '\n')
194
174
 
195
175
    def test_concise_help_text(self):
196
176
        """Concise help text excludes the descriptive sections."""
206
186
            """
207
187
        cmd = cmd_Demo()
208
188
        helptext = cmd.get_help_text()
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)
 
189
        self.assertEqualDiff(
 
190
            helptext,
 
191
            'Purpose: A sample command.\n'
 
192
            'Usage:   bzr Demo\n'
 
193
            '\n'
 
194
            'Options:\n'
 
195
            '  --usage        Show usage message and options.\n'
 
196
            '  -v, --verbose  Display more information.\n'
 
197
            '  -q, --quiet    Only display errors and warnings.\n'
 
198
            '  -h, --help     Show help message.\n'
 
199
            '\n'
 
200
            'Description:\n'
 
201
            '  Blah blah blah.\n'
 
202
            '\n'
 
203
            'Examples:\n'
 
204
            '    Example 1:\n'
 
205
            '\n'
 
206
            '        cmd arg1\n'
 
207
            '\n')
229
208
        helptext = cmd.get_help_text(verbose=False)
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_'
 
209
        self.assertEquals(helptext,
 
210
            'Purpose: A sample command.\n'
 
211
            'Usage:   bzr Demo\n'
 
212
            '\n'
 
213
            'Options:\n'
 
214
            '  --usage        Show usage message and options.\n'
 
215
            '  -v, --verbose  Display more information.\n'
 
216
            '  -q, --quiet    Only display errors and warnings.\n'
 
217
            '  -h, --help     Show help message.\n'
 
218
            '\n'
 
219
            'See bzr help Demo for more details and examples.\n'
 
220
            '\n')
 
221
 
 
222
    def test_help_custom_section_ordering(self):
 
223
        """Custom descriptive sections should remain in the order given."""
422
224
        class cmd_Demo(commands.Command):
423
225
            __doc__ = """A sample command.
424
226
 
435
237
            :Tips:
436
238
              Clever things to keep in mind.
437
239
            """
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())
 
240
        cmd = cmd_Demo()
 
241
        helptext = cmd.get_help_text()
 
242
        self.assertEqualDiff(
 
243
            helptext,
 
244
            'Purpose: A sample command.\n'
 
245
            'Usage:   bzr Demo\n'
 
246
            '\n'
 
247
            'Options:\n'
 
248
            '  --usage        Show usage message and options.\n'
 
249
            '  -v, --verbose  Display more information.\n'
 
250
            '  -q, --quiet    Only display errors and warnings.\n'
 
251
            '  -h, --help     Show help message.\n'
 
252
            '\n'
 
253
            'Description:\n'
 
254
            '  Blah blah blah.\n'
 
255
            '\n'
 
256
            'Formats:\n'
 
257
            '  Interesting stuff about formats.\n'
 
258
            '\n'
 
259
            'Examples:\n'
 
260
            '  Example 1:\n'
 
261
            '\n'
 
262
            '    cmd arg1\n'
 
263
            '\n'
 
264
            'Tips:\n'
 
265
            '  Clever things to keep in mind.\n'
 
266
            '\n')
464
267
 
465
268
    def test_help_text_custom_usage(self):
466
269
        """Help text may contain a custom usage section."""
474
277
 
475
278
            Blah blah blah.
476
279
            """
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()
 
280
        cmd = cmd_Demo()
 
281
        helptext = cmd.get_help_text()
 
282
        self.assertEquals(helptext,
 
283
            'Purpose: A sample command.\n'
 
284
            'Usage:\n'
 
285
            '    cmd Demo [opts] args\n'
 
286
            '\n'
 
287
            '    cmd Demo -h\n'
 
288
            '\n'
 
289
            '\n'
 
290
            'Options:\n'
 
291
            '  --usage        Show usage message and options.\n'
 
292
            '  -v, --verbose  Display more information.\n'
 
293
            '  -q, --quiet    Only display errors and warnings.\n'
 
294
            '  -h, --help     Show help message.\n'
 
295
            '\n'
 
296
            'Description:\n'
 
297
            '  Blah blah blah.\n\n')
504
298
 
505
299
 
506
300
class TestRegisteredTopic(TestHelp):
514
308
        self.assertEqual('basic', topic.topic)
515
309
 
516
310
    def test_get_help_text(self):
517
 
        """RegisteredTopic returns the get_detail results for get_help_text."""
 
311
        """A RegisteredTopic returns the get_detail results for get_help_text."""
518
312
        topic = help_topics.RegisteredTopic('commands')
519
313
        self.assertEqual(help_topics.topic_registry.get_detail('commands'),
520
 
                         topic.get_help_text())
 
314
            topic.get_help_text())
521
315
 
522
316
    def test_get_help_text_with_additional_see_also(self):
523
317
        topic = help_topics.RegisteredTopic('commands')
535
329
            '\n')
536
330
 
537
331
    def test_get_help_topic(self):
538
 
        """The help topic for RegisteredTopic is its topic from construction."""
 
332
        """The help topic for a RegisteredTopic is its topic from construction."""
539
333
        topic = help_topics.RegisteredTopic('foobar')
540
334
        self.assertEqual('foobar', topic.get_help_topic())
541
335
        topic = help_topics.RegisteredTopic('baz')
575
369
        self.assertEqual('', index.prefix)
576
370
 
577
371
 
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.assertEqual('default_format', opt.name)
601
 
 
602
 
 
603
372
class TestCommandIndex(TestHelp):
604
373
    """Tests for the HelpCommandIndex class."""
605
374
 
642
411
    def test_default_search_path(self):
643
412
        """The default search path should include internal indexs."""
644
413
        indices = help.HelpIndices()
645
 
        self.assertEqual(4, len(indices.search_path))
 
414
        self.assertEqual(3, len(indices.search_path))
646
415
        # help topics should be searched in first.
647
416
        self.assertIsInstance(indices.search_path[0],
648
 
                              help_topics.HelpTopicIndex)
 
417
            help_topics.HelpTopicIndex)
649
418
        # with commands being search second.
650
419
        self.assertIsInstance(indices.search_path[1],
651
 
                              commands.HelpCommandIndex)
652
 
        # plugins are a third index.
 
420
            commands.HelpCommandIndex)
 
421
        # and plugins are a third index.
653
422
        self.assertIsInstance(indices.search_path[2],
654
 
                              plugin.PluginsHelpIndex)
655
 
        # config options are a fourth index
656
 
        self.assertIsInstance(indices.search_path[3],
657
 
                              help_topics.ConfigOptionHelpIndex)
 
423
            plugin.PluginsHelpIndex)
658
424
 
659
425
    def test_search_for_unknown_topic_raises(self):
660
426
        """Searching for an unknown topic should raise NoHelpTopic."""