~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: 2011-06-28 11:39:48 UTC
  • mfrom: (5993.1.2 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20110628113948-nrljydmsqi6kf01c
(vila) Start implementing command help text localization (Inada Naoki)

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Unit tests for the bzrlib.help module."""
18
18
 
 
19
import textwrap
 
20
 
19
21
from bzrlib import (
20
22
    builtins,
21
23
    commands,
22
24
    errors,
23
25
    help,
24
26
    help_topics,
 
27
    i18n,
25
28
    plugin,
26
29
    tests,
27
30
    )
28
31
 
29
 
 
30
 
class TestHelp(tests.TestCase):
31
 
 
32
 
    def setUp(self):
33
 
        tests.TestCase.setUp(self)
34
 
        commands.install_bzr_command_hooks()
 
32
from bzrlib.tests.test_i18n import ZzzTranslations
 
33
import re
35
34
 
36
35
 
37
36
class TestCommandHelp(tests.TestCase):
38
37
    """Tests for help on commands."""
39
38
 
 
39
    def assertCmdHelp(self, expected, cmd):
 
40
        self.assertEqualDiff(textwrap.dedent(expected), cmd.get_help_text())
 
41
 
40
42
    def test_command_help_includes_see_also(self):
41
43
        class cmd_WithSeeAlso(commands.Command):
42
44
            __doc__ = """A sample command."""
43
45
            _see_also = ['foo', 'bar']
44
 
        cmd = cmd_WithSeeAlso()
45
 
        helptext = cmd.get_help_text()
46
 
        self.assertEndsWith(
47
 
            helptext,
48
 
            '  -v, --verbose  Display more information.\n'
49
 
            '  -q, --quiet    Only display errors and warnings.\n'
50
 
            '  -h, --help     Show help message.\n'
51
 
            '\n'
52
 
            'See also: bar, foo\n')
 
46
        self.assertCmdHelp('''\
 
47
            Purpose: A sample command.
 
48
            Usage:   bzr WithSeeAlso
 
49
            
 
50
            Options:
 
51
              --usage        Show usage message and options.
 
52
              -v, --verbose  Display more information.
 
53
              -q, --quiet    Only display errors and warnings.
 
54
              -h, --help     Show help message.
 
55
            
 
56
            See also: bar, foo
 
57
            ''',
 
58
                           cmd_WithSeeAlso())
53
59
 
54
60
    def test_get_help_text(self):
55
61
        """Commands have a get_help_text method which returns their help."""
56
62
        class cmd_Demo(commands.Command):
57
63
            __doc__ = """A sample command."""
 
64
        self.assertCmdHelp('''\
 
65
            Purpose: A sample command.
 
66
            Usage:   bzr Demo
 
67
            
 
68
            Options:
 
69
              --usage        Show usage message and options.
 
70
              -v, --verbose  Display more information.
 
71
              -q, --quiet    Only display errors and warnings.
 
72
              -h, --help     Show help message.
 
73
 
 
74
            ''',
 
75
                           cmd_Demo())
58
76
        cmd = cmd_Demo()
59
77
        helptext = cmd.get_help_text()
60
78
        self.assertStartsWith(helptext,
295
313
            '  Blah blah blah.\n\n')
296
314
 
297
315
 
 
316
class ZzzTranslationsForDoc(ZzzTranslations):
 
317
 
 
318
    _section_pat = re.compile(':\w+:\\n\\s+')
 
319
    _indent_pat = re.compile('\\s+')
 
320
 
 
321
    def zzz(self, s):
 
322
        m = self._section_pat.match(s)
 
323
        if m is None:
 
324
            m = self._indent_pat.match(s)
 
325
        if m:
 
326
            return u'%szz{{%s}}' % (m.group(0), s[m.end():])
 
327
        return u'zz{{%s}}' % s
 
328
 
 
329
 
 
330
class TestCommandHelpI18n(tests.TestCase):
 
331
    """Tests for help on translated commands."""
 
332
 
 
333
    def setUp(self):
 
334
        super(TestCommandHelpI18n, self).setUp()
 
335
        self.overrideAttr(i18n, '_translations', ZzzTranslationsForDoc())
 
336
 
 
337
    def assertCmdHelp(self, expected, cmd):
 
338
        self.assertEqualDiff(textwrap.dedent(expected), cmd.get_help_text())
 
339
 
 
340
    def test_command_help_includes_see_also(self):
 
341
        class cmd_WithSeeAlso(commands.Command):
 
342
            __doc__ = """A sample command."""
 
343
            _see_also = ['foo', 'bar']
 
344
        self.assertCmdHelp('''\
 
345
            zz{{:Purpose: zz{{A sample command.}}
 
346
            }}zz{{:Usage:   bzr WithSeeAlso
 
347
            }}
 
348
            zz{{:Options:
 
349
              --usage        Show usage message and options.
 
350
              -v, --verbose  Display more information.
 
351
              -q, --quiet    Only display errors and warnings.
 
352
              -h, --help     Show help message.
 
353
            }}
 
354
            zz{{:See also: bar, foo}}
 
355
            ''',
 
356
                           cmd_WithSeeAlso())
 
357
 
 
358
    def test_get_help_text(self):
 
359
        """Commands have a get_help_text method which returns their help."""
 
360
        class cmd_Demo(commands.Command):
 
361
            __doc__ = """A sample command."""
 
362
        self.assertCmdHelp('''\
 
363
            zz{{:Purpose: zz{{A sample command.}}
 
364
            }}zz{{:Usage:   bzr Demo
 
365
            }}
 
366
            zz{{:Options:
 
367
              --usage        Show usage message and options.
 
368
              -v, --verbose  Display more information.
 
369
              -q, --quiet    Only display errors and warnings.
 
370
              -h, --help     Show help message.
 
371
            }}
 
372
            ''',
 
373
                           cmd_Demo())
 
374
 
 
375
    def test_command_with_additional_see_also(self):
 
376
        class cmd_WithSeeAlso(commands.Command):
 
377
            __doc__ = """A sample command."""
 
378
            _see_also = ['foo', 'bar']
 
379
        cmd = cmd_WithSeeAlso()
 
380
        helptext = cmd.get_help_text(['gam'])
 
381
        self.assertEndsWith(
 
382
            helptext,
 
383
            '  -v, --verbose  Display more information.\n'
 
384
            '  -q, --quiet    Only display errors and warnings.\n'
 
385
            '  -h, --help     Show help message.\n'
 
386
            '}}\n'
 
387
            'zz{{:See also: bar, foo, gam}}\n')
 
388
 
 
389
    def test_command_only_additional_see_also(self):
 
390
        class cmd_WithSeeAlso(commands.Command):
 
391
            __doc__ = """A sample command."""
 
392
        cmd = cmd_WithSeeAlso()
 
393
        helptext = cmd.get_help_text(['gam'])
 
394
        self.assertEndsWith(
 
395
            helptext,
 
396
            'zz{{:Options:\n'
 
397
            '  --usage        Show usage message and options.\n'
 
398
            '  -v, --verbose  Display more information.\n'
 
399
            '  -q, --quiet    Only display errors and warnings.\n'
 
400
            '  -h, --help     Show help message.\n'
 
401
            '}}\n'
 
402
            'zz{{:See also: gam}}\n')
 
403
 
 
404
 
 
405
    def test_help_custom_section_ordering(self):
 
406
        """Custom descriptive sections should remain in the order given."""
 
407
        # The help formatter expect the class name to start with 'cmd_'
 
408
        class cmd_Demo(commands.Command):
 
409
            __doc__ = """A sample command.
 
410
 
 
411
            Blah blah blah.
 
412
 
 
413
            :Formats:
 
414
              Interesting stuff about formats.
 
415
 
 
416
            :Examples:
 
417
              Example 1::
 
418
 
 
419
                cmd arg1
 
420
 
 
421
            :Tips:
 
422
              Clever things to keep in mind.
 
423
            """
 
424
        self.assertCmdHelp('''\
 
425
            zz{{:Purpose: zz{{A sample command.}}
 
426
            }}zz{{:Usage:   bzr Demo
 
427
            }}
 
428
            zz{{:Options:
 
429
              --usage        Show usage message and options.
 
430
              -v, --verbose  Display more information.
 
431
              -q, --quiet    Only display errors and warnings.
 
432
              -h, --help     Show help message.
 
433
            }}
 
434
            Description:
 
435
              zz{{zz{{Blah blah blah.}}
 
436
            
 
437
            }}:Formats:
 
438
              zz{{Interesting stuff about formats.}}
 
439
            
 
440
            Examples:
 
441
              zz{{Example 1::}}
 
442
            
 
443
                zz{{cmd arg1}}
 
444
            
 
445
            Tips:
 
446
              zz{{Clever things to keep in mind.}}
 
447
 
 
448
            ''',
 
449
                           cmd_Demo())
 
450
 
 
451
    def test_help_text_custom_usage(self):
 
452
        """Help text may contain a custom usage section."""
 
453
        class cmd_Demo(commands.Command):
 
454
            __doc__ = """A sample command.
 
455
 
 
456
            :Usage:
 
457
                cmd Demo [opts] args
 
458
 
 
459
                cmd Demo -h
 
460
 
 
461
            Blah blah blah.
 
462
            """
 
463
        self.assertCmdHelp('''\
 
464
            zz{{:Purpose: zz{{A sample command.}}
 
465
            }}zz{{:Usage:
 
466
                zz{{cmd Demo [opts] args}}
 
467
            
 
468
                zz{{cmd Demo -h}}
 
469
 
 
470
            }}
 
471
            zz{{:Options:
 
472
              --usage        Show usage message and options.
 
473
              -v, --verbose  Display more information.
 
474
              -q, --quiet    Only display errors and warnings.
 
475
              -h, --help     Show help message.
 
476
            }}
 
477
            Description:
 
478
              zz{{zz{{Blah blah blah.}}
 
479
 
 
480
            }}
 
481
            ''',
 
482
                           cmd_Demo())
 
483
 
 
484
 
 
485
class TestHelp(tests.TestCase):
 
486
 
 
487
    def setUp(self):
 
488
        tests.TestCase.setUp(self)
 
489
        commands.install_bzr_command_hooks()
 
490
 
 
491
 
298
492
class TestRegisteredTopic(TestHelp):
299
493
    """Tests for the RegisteredTopic class."""
300
494
 
306
500
        self.assertEqual('basic', topic.topic)
307
501
 
308
502
    def test_get_help_text(self):
309
 
        """A RegisteredTopic returns the get_detail results for get_help_text."""
 
503
        """RegisteredTopic returns the get_detail results for get_help_text."""
310
504
        topic = help_topics.RegisteredTopic('commands')
311
505
        self.assertEqual(help_topics.topic_registry.get_detail('commands'),
312
 
            topic.get_help_text())
 
506
                         topic.get_help_text())
313
507
 
314
508
    def test_get_help_text_with_additional_see_also(self):
315
509
        topic = help_topics.RegisteredTopic('commands')
327
521
            '\n')
328
522
 
329
523
    def test_get_help_topic(self):
330
 
        """The help topic for a RegisteredTopic is its topic from construction."""
 
524
        """The help topic for RegisteredTopic is its topic from construction."""
331
525
        topic = help_topics.RegisteredTopic('foobar')
332
526
        self.assertEqual('foobar', topic.get_help_topic())
333
527
        topic = help_topics.RegisteredTopic('baz')