11
11
# This software consists of voluntary contributions made by many
12
12
# individuals. For the exact contribution history, see the revision
13
13
# history and logs, available at http://trac.edgewall.org/log/.
15
# Author: Christopher Lenz <cmlenz@gmx.de>
17
from trac.config import *
18
from trac.test import TestConfiguration
21
16
from StringIO import StringIO
70
68
def test_default_int(self):
71
69
config = self._read()
72
70
self.assertRaises(ConfigurationError, config.getint, 'a', 'option', 'b')
73
self.assertEquals(None, config.getint('a', 'option'))
71
self.assertEquals(0, config.getint('a', 'option'))
74
72
self.assertEquals(1, config.getint('a', 'option', '1'))
75
73
self.assertEquals(1, config.getint('a', 'option', 1))
84
82
config = self._read()
85
83
self.assertEquals('x', config.get('a', 'option'))
86
84
self.assertEquals('x', config.get('a', 'option', 'y'))
85
self.assertEquals('y', config.get('b', 'option2', 'y'))
88
87
def test_read_and_getbool(self):
89
88
self._write(['[a]', 'option = yes'])
90
89
config = self._read()
91
90
self.assertEquals(True, config.getbool('a', 'option'))
92
91
self.assertEquals(True, config.getbool('a', 'option', False))
92
self.assertEquals(False, config.getbool('b', 'option2'))
93
self.assertEquals(False, config.getbool('b', 'option2', False))
94
self.assertEquals(False, config.getbool('b', 'option2', 'disabled'))
94
96
def test_read_and_getint(self):
95
97
self._write(['[a]', 'option = 42'])
96
98
config = self._read()
97
99
self.assertEquals(42, config.getint('a', 'option'))
98
100
self.assertEquals(42, config.getint('a', 'option', 25))
101
self.assertEquals(0, config.getint('b', 'option2'))
102
self.assertEquals(25, config.getint('b', 'option2', 25))
103
self.assertEquals(25, config.getint('b', 'option2', '25'))
100
105
def test_read_and_getlist(self):
101
106
self._write(['[a]', 'option = foo, bar, baz'])
102
107
config = self._read()
103
108
self.assertEquals(['foo', 'bar', 'baz'],
104
109
config.getlist('a', 'option'))
110
self.assertEquals([],
111
config.getlist('b', 'option2'))
112
self.assertEquals(['foo', 'bar', 'baz'],
113
config.getlist('b', 'option2', ['foo', 'bar', 'baz']))
114
self.assertEquals(['foo', 'bar', 'baz'],
115
config.getlist('b', 'option2', 'foo, bar, baz'))
106
117
def test_read_and_getlist_sep(self):
107
118
self._write(['[a]', 'option = foo | bar | baz'])
149
160
self.assertEquals(u"Voilà l'été", config2.get('a', 'option2'))
150
161
# self.assertEquals(u"Voilà l'été", config2.get('a', 'option3'))
163
def test_set_and_save_inherit(self):
165
config = self._read()
166
config.set('a', 'option2', "Voilà l'été") # UTF-8
167
config.set('a', 'option1', u"Voilà l'été") # unicode
168
self.assertEquals('x', config.get('a', 'option'))
169
self.assertEquals(u"Voilà l'été", config.get('a', 'option1'))
170
self.assertEquals(u"Voilà l'été", config.get('a', 'option2'))
173
configfile = open(self.filename, 'r')
174
self.assertEquals(['# -*- coding: utf-8 -*-\n',
177
"option1 = Voilà l'été\n",
178
"option2 = Voilà l'été\n",
181
"file = trac-site.ini\n",
183
configfile.readlines())
185
config2 = Configuration(self.filename)
186
self.assertEquals('x', config2.get('a', 'option'))
187
self.assertEquals(u"Voilà l'été", config2.get('a', 'option1'))
188
self.assertEquals(u"Voilà l'été", config2.get('a', 'option2'))
189
self._test_with_inherit(testcb)
152
191
def test_sections(self):
153
192
self._write(['[a]', 'option = x', '[b]', 'option = y'])
154
193
config = self._read()
155
194
self.assertEquals(['a', 'b'], config.sections())
156
config.site_parser.add_section('c')
157
self.assertEquals(['a', 'b', 'c'], config.sections())
159
196
def test_options(self):
160
197
self._write(['[a]', 'option = x', '[b]', 'option = y'])
163
200
self.assertEquals(('option', 'y'), iter(config.options('b')).next())
164
201
self.assertRaises(StopIteration, iter(config.options('c')).next)
203
def test_has_option(self):
204
config = self._read()
205
self.assertEquals(False, config.has_option('a', 'option'))
206
self._write(['[a]', 'option = x'])
207
config = self._read()
208
self.assertEquals(True, config.has_option('a', 'option'))
166
210
def test_reparse(self):
167
211
self._write(['[a]', 'option = x'])
168
212
config = self._read()
169
213
self.assertEquals('x', config.get('a', 'option'))
170
time.sleep(1) # needed because of low mtime granularity
214
time.sleep(2) # needed because of low mtime granularity,
215
# especially on fat filesystems
172
217
self._write(['[a]', 'option = y'])
173
218
config.parse_if_needed()
174
219
self.assertEquals('y', config.get('a', 'option'))
221
def test_inherit_one_level(self):
223
config = self._read()
224
self.assertEqual('x', config.get('a', 'option'))
225
self.assertEqual(['a', 'inherit'], config.sections())
226
config.remove('a', 'option') # Should *not* remove option in parent
227
self.assertEqual('x', config.get('a', 'option'))
228
self.assertEqual([('option', 'x')], list(config.options('a')))
229
self.assertEqual(True, 'a' in config)
230
self._test_with_inherit(testcb)
233
def _test_with_inherit(self, testcb):
234
sitename = os.path.join(tempfile.gettempdir(), 'trac-site.ini')
235
sitefile = open(sitename, 'w')
238
sitefile.write('[a]\noption = x\n')
242
self._write(['[inherit]', 'file = trac-site.ini'])
178
249
return unittest.makeSuite(ConfigurationTestCase, 'test')