summaryrefslogtreecommitdiff
path: root/test/test_argparse.py
blob: 6c3d76503847cc8710731503fa3490d91abc7bbd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# coding: utf-8
# Copyright Ruamel bvba 2007-2014

import pytest

from ruamel.std.argparse import argparse, CountAction, SmartFormatter
from textwrap import dedent


def exit(self=None, status=None, message=None):
    pass


def test_argparse(capsys):
    desc = dedent("""\
    Please do not mess up this text!
    --------------------------------
       I have indented it
       exactly the way
       I want it
    """)
    help_verbose = "add some verbosity to the output"
    help_list = """\
    choose one:
      1) red
      2) green
      3) blue
    """
    help_one = """one
    line
    help
    """
    parser = argparse.ArgumentParser(
        description=desc,
        formatter_class=SmartFormatter,
    )
    parser.exit = exit
    parser.add_argument('--verbose', action='store_true',
                        help=help_verbose)
    parser.add_argument('--list', help='R|' + dedent(help_list))
    parser.add_argument('--oneline', action='store_true', help=help_one)
    parser.parse_args(['--help'])
    out, err = capsys.readouterr()
    full_help = dedent("""\
    usage: py.test [-h] [--verbose] [--list LIST] [--oneline]

    {0}
    optional arguments:
      -h, --help   show this help message and exit
      --verbose    {1}
      --list LIST  {2}
      --oneline    one line help
    """).format(
        desc, help_verbose,
        help_list.lstrip().replace('\n  ', '\n             ').rstrip(),
    )
    assert full_help == out


def test_argparse_default(capsys):
    desc = dedent("""\
    Please do not mess up this text!
    --------------------------------
       I have indented it
       exactly the way
       I want it
    """)
    help_verbose = "add some verbosity to the output"
    help_list = """\
    choose one:
      1) red
      2) green
      3) blue
    """
    help_one = """one
    line
    help
    """
    parser = argparse.ArgumentParser(
        description=desc,
        formatter_class=SmartFormatter,
    )
    parser.exit = exit
    # add  "D|" to the first option
    parser.add_argument('--verbose', action='store_true',
                        help='D|' + help_verbose)
    parser.add_argument('--list', help='R|' + dedent(help_list))
    parser.add_argument('--oneline', action='store_true', help=help_one)
    parser.parse_args(['--help'])
    out, err = capsys.readouterr()
    full_help = dedent("""\
    usage: py.test [-h] [--verbose] [--list LIST] [--oneline]

    {0}
    optional arguments:
      -h, --help   show this help message and exit
      --verbose    {1} (default: False)
      --list LIST  {2}
                    (default: None)
      --oneline    one line help (default: False)
    """).format(
        desc, help_verbose,
        help_list.lstrip().replace('\n  ', '\n             ').rstrip(),
    )
    assert full_help == out