3 # Author: David Goodger
4 # Contact: goodger@users.sourceforge.net
7 # Copyright: This module has been placed in the public domain.
10 Test module for utils.py.
16 from DocutilsTestSupport
import utils
, nodes
19 class ReporterTests(unittest
.TestCase
):
21 stream
= StringIO
.StringIO()
22 reporter
= utils
.Reporter('test data', 2, 4, stream
, 1)
26 self
.stream
.truncate()
28 def test_level0(self
):
29 sw
= self
.reporter
.system_message(0, 'debug output')
30 self
.assertEquals(sw
.pformat(), """\
31 <system_message level="0" source="test data" type="DEBUG">
35 self
.assertEquals(self
.stream
.getvalue(),
36 'test data:: (DEBUG/0) debug output\n')
38 def test_level1(self
):
39 sw
= self
.reporter
.system_message(1, 'a little reminder')
40 self
.assertEquals(sw
.pformat(), """\
41 <system_message level="1" source="test data" type="INFO">
45 self
.assertEquals(self
.stream
.getvalue(), '')
47 def test_level2(self
):
48 sw
= self
.reporter
.system_message(2, 'a warning')
49 self
.assertEquals(sw
.pformat(), """\
50 <system_message level="2" source="test data" type="WARNING">
54 self
.assertEquals(self
.stream
.getvalue(),
55 'test data:: (WARNING/2) a warning\n')
57 def test_level3(self
):
58 sw
= self
.reporter
.system_message(3, 'an error')
59 self
.assertEquals(sw
.pformat(), """\
60 <system_message level="3" source="test data" type="ERROR">
64 self
.assertEquals(self
.stream
.getvalue(),
65 'test data:: (ERROR/3) an error\n')
67 def test_level4(self
):
68 self
.assertRaises(utils
.SystemMessage
, self
.reporter
.system_message
, 4,
69 'a severe error, raises an exception')
70 self
.assertEquals(self
.stream
.getvalue(), 'test data:: (SEVERE/4) '
71 'a severe error, raises an exception\n')
74 class QuietReporterTests(unittest
.TestCase
):
76 stream
= StringIO
.StringIO()
77 reporter
= utils
.Reporter('test data', 5, 5, stream
, 0)
81 self
.stream
.truncate()
84 sw
= self
.reporter
.debug('a debug message')
85 self
.assertEquals(sw
.pformat(), """\
86 <system_message level="0" source="test data" type="DEBUG">
90 self
.assertEquals(self
.stream
.getvalue(), '')
93 sw
= self
.reporter
.info('an informational message')
94 self
.assertEquals(sw
.pformat(), """\
95 <system_message level="1" source="test data" type="INFO">
97 an informational message
99 self
.assertEquals(self
.stream
.getvalue(), '')
101 def test_warning(self
):
102 sw
= self
.reporter
.warning('a warning')
103 self
.assertEquals(sw
.pformat(), """\
104 <system_message level="2" source="test data" type="WARNING">
108 self
.assertEquals(self
.stream
.getvalue(), '')
110 def test_error(self
):
111 sw
= self
.reporter
.error('an error')
112 self
.assertEquals(sw
.pformat(), """\
113 <system_message level="3" source="test data" type="ERROR">
117 self
.assertEquals(self
.stream
.getvalue(), '')
119 def test_severe(self
):
120 sw
= self
.reporter
.severe('a severe error')
121 self
.assertEquals(sw
.pformat(), """\
122 <system_message level="4" source="test data" type="SEVERE">
126 self
.assertEquals(self
.stream
.getvalue(), '')
129 class ReporterCategoryTests(unittest
.TestCase
):
131 stream
= StringIO
.StringIO()
135 self
.stream
.truncate()
136 self
.reporter
= utils
.Reporter('test data', 2, 4, self
.stream
, 1)
137 self
.reporter
.set_conditions('lemon', 1, 3, self
.stream
, 0)
139 def test_getset(self
):
140 self
.reporter
.set_conditions('test', 5, 5, None, 0)
141 self
.assertEquals(self
.reporter
.get_conditions('other').astuple(),
142 (1, 2, 4, self
.stream
))
143 self
.assertEquals(self
.reporter
.get_conditions('test').astuple(),
144 (0, 5, 5, sys
.stderr
))
145 self
.assertEquals(self
.reporter
.get_conditions('test.dummy').astuple(),
146 (0, 5, 5, sys
.stderr
))
147 self
.reporter
.set_conditions('test.dummy.spam', 1, 2, self
.stream
, 1)
149 self
.reporter
.get_conditions('test.dummy.spam').astuple(),
150 (1, 1, 2, self
.stream
))
151 self
.assertEquals(self
.reporter
.get_conditions('test.dummy').astuple(),
152 (0, 5, 5, sys
.stderr
))
154 self
.reporter
.get_conditions('test.dummy.spam.eggs').astuple(),
155 (1, 1, 2, self
.stream
))
156 self
.reporter
.unset_conditions('test.dummy.spam')
158 self
.reporter
.get_conditions('test.dummy.spam.eggs').astuple(),
159 (0, 5, 5, sys
.stderr
))
161 def test_debug(self
):
162 sw
= self
.reporter
.debug('debug output', category
='lemon.curry')
163 self
.assertEquals(self
.stream
.getvalue(), '')
164 sw
= self
.reporter
.debug('debug output')
165 self
.assertEquals(self
.stream
.getvalue(),
166 'test data:: (DEBUG/0) debug output\n')
169 sw
= self
.reporter
.info('some info')
170 self
.assertEquals(self
.stream
.getvalue(), '')
171 sw
= self
.reporter
.info('some info', category
='lemon.curry')
173 self
.stream
.getvalue(),
174 'test data:: (INFO/1) some info [lemon.curry]\n')
176 def test_warning(self
):
177 sw
= self
.reporter
.warning('a warning')
178 self
.assertEquals(self
.stream
.getvalue(),
179 'test data:: (WARNING/2) a warning\n')
180 sw
= self
.reporter
.warning('a warning', category
='lemon.curry')
181 self
.assertEquals(self
.stream
.getvalue(), """\
182 test data:: (WARNING/2) a warning
183 test data:: (WARNING/2) a warning [lemon.curry]
186 def test_error(self
):
187 sw
= self
.reporter
.error('an error')
188 self
.assertEquals(self
.stream
.getvalue(),
189 'test data:: (ERROR/3) an error\n')
190 self
.assertRaises(utils
.SystemMessage
, self
.reporter
.error
,
191 'an error', category
='lemon.curry')
192 self
.assertEquals(self
.stream
.getvalue(), """\
193 test data:: (ERROR/3) an error
194 test data:: (ERROR/3) an error [lemon.curry]
197 def test_severe(self
):
198 self
.assertRaises(utils
.SystemMessage
, self
.reporter
.severe
,
200 self
.assertEquals(self
.stream
.getvalue(),
201 'test data:: (SEVERE/4) a severe error\n')
202 self
.assertRaises(utils
.SystemMessage
, self
.reporter
.severe
,
203 'a severe error', category
='lemon.curry')
204 self
.assertEquals(self
.stream
.getvalue(), """\
205 test data:: (SEVERE/4) a severe error
206 test data:: (SEVERE/4) a severe error [lemon.curry]
210 class NameValueTests(unittest
.TestCase
):
212 def test_extract_name_value(self
):
213 self
.assertRaises(utils
.NameValueError
, utils
.extract_name_value
,
215 self
.assertRaises(utils
.NameValueError
, utils
.extract_name_value
,
217 self
.assertRaises(utils
.NameValueError
, utils
.extract_name_value
,
219 self
.assertRaises(utils
.NameValueError
, utils
.extract_name_value
,
221 self
.assertRaises(utils
.NameValueError
, utils
.extract_name_value
,
223 self
.assertRaises(utils
.NameValueError
, utils
.extract_name_value
,
225 self
.assertRaises(utils
.NameValueError
, utils
.extract_name_value
,
226 'hello="something"else')
227 output
= utils
.extract_name_value(
228 """att1=val1 att2=val2 att3="value number '3'" att4=val4""")
229 self
.assertEquals(output
, [('att1', 'val1'), ('att2', 'val2'),
230 ('att3', "value number '3'"),
234 class ExtensionOptionTests(unittest
.TestCase
):
236 optionspec
= {'a': int, 'bbb': float, 'cdef': (lambda x
: x
),
237 'empty': (lambda x
: x
)}
239 def test_assemble_option_dict(self
):
240 input = utils
.extract_name_value('a=1 bbb=2.0 cdef=hol%s' % chr(224))
242 utils
.assemble_option_dict(input, self
.optionspec
),
243 {'a': 1, 'bbb': 2.0, 'cdef': ('hol%s' % chr(224))})
244 input = utils
.extract_name_value('a=1 b=2.0 c=hol%s' % chr(224))
245 self
.assertRaises(KeyError, utils
.assemble_option_dict
,
246 input, self
.optionspec
)
247 input = utils
.extract_name_value('a=1 bbb=two cdef=hol%s' % chr(224))
248 self
.assertRaises(ValueError, utils
.assemble_option_dict
,
249 input, self
.optionspec
)
251 def test_extract_extension_options(self
):
252 field_list
= nodes
.field_list()
253 field_list
+= nodes
.field(
254 '', nodes
.field_name('', 'a'),
255 nodes
.field_body('', nodes
.paragraph('', '1')))
256 field_list
+= nodes
.field(
257 '', nodes
.field_name('', 'bbb'),
258 nodes
.field_body('', nodes
.paragraph('', '2.0')))
259 field_list
+= nodes
.field(
260 '', nodes
.field_name('', 'cdef'),
261 nodes
.field_body('', nodes
.paragraph('', 'hol%s' % chr(224))))
262 field_list
+= nodes
.field(
263 '', nodes
.field_name('', 'empty'), nodes
.field_body())
265 utils
.extract_extension_options(field_list
, self
.optionspec
),
266 {'a': 1, 'bbb': 2.0, 'cdef': ('hol%s' % chr(224)),
268 self
.assertRaises(KeyError, utils
.extract_extension_options
,
270 field_list
+= nodes
.field(
271 '', nodes
.field_name('', 'cdef'),
272 nodes
.field_body('', nodes
.paragraph('', 'one'),
273 nodes
.paragraph('', 'two')))
274 self
.assertRaises(utils
.BadOptionDataError
,
275 utils
.extract_extension_options
,
276 field_list
, self
.optionspec
)
277 field_list
[-1] = nodes
.field(
278 '', nodes
.field_name('', 'cdef bad'),
279 nodes
.field_body('', nodes
.paragraph('', 'no arguments')))
280 self
.assertRaises(utils
.BadOptionError
,
281 utils
.extract_extension_options
,
282 field_list
, self
.optionspec
)
283 field_list
[-1] = nodes
.field(
284 '', nodes
.field_name('', 'cdef'),
285 nodes
.field_body('', nodes
.paragraph('', 'duplicate')))
286 self
.assertRaises(utils
.DuplicateOptionError
,
287 utils
.extract_extension_options
,
288 field_list
, self
.optionspec
)
289 field_list
[-2] = nodes
.field(
290 '', nodes
.field_name('', 'unkown'),
291 nodes
.field_body('', nodes
.paragraph('', 'unknown')))
292 self
.assertRaises(KeyError, utils
.extract_extension_options
,
293 field_list
, self
.optionspec
)
296 if __name__
== '__main__':