aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/18_test_Config.py
blob: 43513c2b4b887be7e8747ef5222593c59ebd89d8 (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# vim: set fileencoding=utf-8 :

import os
import unittest
from gbp.config import GbpOptionParser, GbpOptionGroup
from .testutils import GbpLogTester


class TestConfigParser(unittest.TestCase, GbpLogTester):
    def __init__(self, methodName='runTest'):
        unittest.TestCase.__init__(self, methodName)
        GbpLogTester.__init__(self)

    def setUp(self):
        self.conffiles_save = os.environ.get('GBP_CONF_FILES')
        self.confname = 'tests/data/test1.conf'
        self.assertTrue(os.stat(self.confname))
        os.environ['GBP_CONF_FILES'] = self.confname
        self._capture_log(True)

    def tearDown(self):
        if self.conffiles_save:
            os.environ['GBP_CONF_FILES'] = self.conffiles_save
        self._capture_log(False)

    def test_default(self):
        """
        A value only in the default section should be available in all commands
        """
        for n in range(1, 5):
            for prefix in ['', 'git-', 'gbp-']:
                parser = GbpOptionParser('%scmd%d' % (prefix, n))
                self.assertEqual(parser.config['default_option'], 'default_default1')

    def test_single_override(self):
        """
        A value in any command section should override the default
        """
        for prefix in ['', 'git-', 'gbp-']:
            parser = GbpOptionParser('%scmd1' % prefix)
            self.assertEqual(parser.config['single_override_option1'], 'single_override_value1')
        # No deprecation warning since the test1.conf section is [cmd1]
        self._check_log_empty()

    def test_single_git_override(self):
        """
        A value in any git-command section should override the default
        """
        for prefix in ['', 'git-']:
            parser = GbpOptionParser('%scmd2' % prefix)
            self.assertEqual(parser.config['single_git_override_option1'], 'single_git_override_value1')
        for line in range(0, 2):
            self._check_log(line, r'.*Old style config section \[git-cmd2\] found please rename to \[cmd2\]')

    def test_single_gbp_override(self):
        """
        A value in any gbp-command section should override the default
        """
        for prefix in ['', 'gbp-']:
            parser = GbpOptionParser('%scmd3' % prefix)
            self.assertEqual(parser.config['single_gbp_override_option1'], 'single_gbp_override_value1')
        for line in range(0, 2):
            self._check_log(line, r'.*Old style config section \[gbp-cmd3\] found please rename to \[cmd3\]')

    def test_single_git_override_disabled_deprecations(self):
        """
        With disabled deprecations we shouldn't see a log line
        """
        for prefix in ['', 'git-']:
            os.environ['GBP_DISABLE_SECTION_DEPRECATION'] = 'true'
            parser = GbpOptionParser('%scmd2' % prefix)
            self.assertEqual(parser.config['single_git_override_option1'], 'single_git_override_value1')
        for line in range(0, 2):
            self._check_log_empty()
        os.environ.pop('GBP_DISABLE_SECTION_DEPRECATION')

    def test_new_overrides_git(self):
        """
        A value in the cmd section should override the old git-cmd section independent from
        how we're invoked
        """
        for n in range(4, 6):
            for prefix in ['', 'git-']:
                cmd = '%scmd%d' % (prefix, n)
                parser = GbpOptionParser(cmd)
                actual = parser.config['new_overrides_git_option1']
                expected = 'new_overrides_git_value1'
                self.assertEqual(actual, expected, "%s != %s for %s" % (actual, expected, cmd))

    def test_get_config_file_value(self):
        """
        Read a single value from the parsed config
        """
        parser = GbpOptionParser('cmd4')
        self.assertEqual(parser.get_config_file_value('new_overrides_git_option1'),
                         'new_overrides_git_value1')
        self.assertEqual(parser.get_config_file_value('doesnotexist'), None)

    def test_param_list(self):
        parser = GbpOptionParser('cmd4')

        branch_group = GbpOptionGroup(parser, "branch options", "branch update and layout options")
        parser.add_option_group(branch_group)
        branch_group.add_config_file_option(option_name="upstream-branch", dest="upstream_branch")
        branch_group.add_config_file_option("debian-branch", dest="upstream_branch")
        parser.add_config_file_option(option_name="color", dest="color", type='tristate')

        params = parser.valid_options
        self.assertTrue('upstream-branch' in params)
        self.assertTrue('debian-branch' in params)
        self.assertTrue('color' in params)

    def test_short_option_with_prefix(self):
        """Options with short options can't have a prefix"""
        class TestOptonParser(GbpOptionParser):
            list_opts = []
            defaults = {'withshort': 'foo'}
            short_opts = {'withshort': '-S'}
        parser = TestOptonParser('cmd', prefix='p')
        with self.assertRaisesRegexp(ValueError, "Options with prefix cannot have a short option"):
            parser.add_config_file_option(option_name="withshort", dest="with_short", help="foo")

    def test_short_option(self):
        class TestOptionParser(GbpOptionParser):
            list_opts = []
            defaults = {'withshort': 'foo'}
            short_opts = {'withshort': '-S'}

        parser = TestOptionParser('cmd')
        parser.add_config_file_option(option_name="withshort", dest="with_short", help="foo")
        self.assertEquals('withshort', parser.valid_options[0])
        self.assertEquals(len(parser.valid_options), 1)
        self.assertTrue(parser.has_option("--withshort"))
        self.assertTrue(parser.has_option("-S"))