summaryrefslogtreecommitdiff
path: root/test/test_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_utils.py')
-rwxr-xr-xtest/test_utils.py213
1 files changed, 213 insertions, 0 deletions
diff --git a/test/test_utils.py b/test/test_utils.py
new file mode 100755
index 000000000..006495ac9
--- /dev/null
+++ b/test/test_utils.py
@@ -0,0 +1,213 @@
+#! /usr/bin/env python
+
+# Author: David Goodger
+# Contact: goodger@users.sourceforge.net
+# Revision: $Revision$
+# Date: $Date$
+# Copyright: This module has been placed in the public domain.
+
+"""
+Test module for utils.py.
+"""
+
+import unittest
+import StringIO
+import sys
+from DocutilsTestSupport import utils, nodes
+
+
+class ReporterTests(unittest.TestCase):
+
+ stream = StringIO.StringIO()
+ reporter = utils.Reporter('test data', 2, 4, stream, 1)
+
+ def setUp(self):
+ self.stream.seek(0)
+ self.stream.truncate()
+
+ def test_level0(self):
+ sw = self.reporter.system_message(0, 'debug output')
+ self.assertEquals(sw.pformat(), """\
+<system_message level="0" source="test data" type="DEBUG">
+ <paragraph>
+ debug output
+""")
+ self.assertEquals(self.stream.getvalue(),
+ 'test data:: (DEBUG/0) debug output\n')
+
+ def test_level1(self):
+ sw = self.reporter.system_message(1, 'a little reminder')
+ self.assertEquals(sw.pformat(), """\
+<system_message level="1" source="test data" type="INFO">
+ <paragraph>
+ a little reminder
+""")
+ self.assertEquals(self.stream.getvalue(), '')
+
+ def test_level2(self):
+ sw = self.reporter.system_message(2, 'a warning')
+ self.assertEquals(sw.pformat(), """\
+<system_message level="2" source="test data" type="WARNING">
+ <paragraph>
+ a warning
+""")
+ self.assertEquals(self.stream.getvalue(),
+ 'test data:: (WARNING/2) a warning\n')
+
+ def test_level3(self):
+ sw = self.reporter.system_message(3, 'an error')
+ self.assertEquals(sw.pformat(), """\
+<system_message level="3" source="test data" type="ERROR">
+ <paragraph>
+ an error
+""")
+ self.assertEquals(self.stream.getvalue(),
+ 'test data:: (ERROR/3) an error\n')
+
+ def test_level4(self):
+ self.assertRaises(utils.SystemMessage, self.reporter.system_message, 4,
+ 'a severe error, raises an exception')
+ self.assertEquals(self.stream.getvalue(), 'test data:: (SEVERE/4) '
+ 'a severe error, raises an exception\n')
+
+
+class QuietReporterTests(unittest.TestCase):
+
+ stream = StringIO.StringIO()
+ reporter = utils.Reporter('test data', 5, 5, stream, 0)
+
+ def setUp(self):
+ self.stream.seek(0)
+ self.stream.truncate()
+
+ def test_debug(self):
+ sw = self.reporter.debug('a debug message')
+ # None because debug is disabled.
+ self.assertEquals(sw, None)
+ self.assertEquals(self.stream.getvalue(), '')
+
+ def test_info(self):
+ sw = self.reporter.info('an informational message')
+ self.assertEquals(sw.pformat(), """\
+<system_message level="1" source="test data" type="INFO">
+ <paragraph>
+ an informational message
+""")
+ self.assertEquals(self.stream.getvalue(), '')
+
+ def test_warning(self):
+ sw = self.reporter.warning('a warning')
+ self.assertEquals(sw.pformat(), """\
+<system_message level="2" source="test data" type="WARNING">
+ <paragraph>
+ a warning
+""")
+ self.assertEquals(self.stream.getvalue(), '')
+
+ def test_error(self):
+ sw = self.reporter.error('an error')
+ self.assertEquals(sw.pformat(), """\
+<system_message level="3" source="test data" type="ERROR">
+ <paragraph>
+ an error
+""")
+ self.assertEquals(self.stream.getvalue(), '')
+
+ def test_severe(self):
+ sw = self.reporter.severe('a severe error')
+ self.assertEquals(sw.pformat(), """\
+<system_message level="4" source="test data" type="SEVERE">
+ <paragraph>
+ a severe error
+""")
+ self.assertEquals(self.stream.getvalue(), '')
+
+
+class NameValueTests(unittest.TestCase):
+
+ def test_extract_name_value(self):
+ self.assertRaises(utils.NameValueError, utils.extract_name_value,
+ 'hello')
+ self.assertRaises(utils.NameValueError, utils.extract_name_value,
+ 'hello')
+ self.assertRaises(utils.NameValueError, utils.extract_name_value,
+ '=hello')
+ self.assertRaises(utils.NameValueError, utils.extract_name_value,
+ 'hello=')
+ self.assertRaises(utils.NameValueError, utils.extract_name_value,
+ 'hello="')
+ self.assertRaises(utils.NameValueError, utils.extract_name_value,
+ 'hello="something')
+ self.assertRaises(utils.NameValueError, utils.extract_name_value,
+ 'hello="something"else')
+ output = utils.extract_name_value(
+ """att1=val1 att2=val2 att3="value number '3'" att4=val4""")
+ self.assertEquals(output, [('att1', 'val1'), ('att2', 'val2'),
+ ('att3', "value number '3'"),
+ ('att4', 'val4')])
+
+
+class ExtensionOptionTests(unittest.TestCase):
+
+ optionspec = {'a': int, 'bbb': float, 'cdef': (lambda x: x),
+ 'empty': (lambda x: x)}
+
+ def test_assemble_option_dict(self):
+ input = utils.extract_name_value('a=1 bbb=2.0 cdef=hol%s' % chr(224))
+ self.assertEquals(
+ utils.assemble_option_dict(input, self.optionspec),
+ {'a': 1, 'bbb': 2.0, 'cdef': ('hol%s' % chr(224))})
+ input = utils.extract_name_value('a=1 b=2.0 c=hol%s' % chr(224))
+ self.assertRaises(KeyError, utils.assemble_option_dict,
+ input, self.optionspec)
+ input = utils.extract_name_value('a=1 bbb=two cdef=hol%s' % chr(224))
+ self.assertRaises(ValueError, utils.assemble_option_dict,
+ input, self.optionspec)
+
+ def test_extract_extension_options(self):
+ field_list = nodes.field_list()
+ field_list += nodes.field(
+ '', nodes.field_name('', 'a'),
+ nodes.field_body('', nodes.paragraph('', '1')))
+ field_list += nodes.field(
+ '', nodes.field_name('', 'bbb'),
+ nodes.field_body('', nodes.paragraph('', '2.0')))
+ field_list += nodes.field(
+ '', nodes.field_name('', 'cdef'),
+ nodes.field_body('', nodes.paragraph('', 'hol%s' % chr(224))))
+ field_list += nodes.field(
+ '', nodes.field_name('', 'empty'), nodes.field_body())
+ self.assertEquals(
+ utils.extract_extension_options(field_list, self.optionspec),
+ {'a': 1, 'bbb': 2.0, 'cdef': ('hol%s' % chr(224)),
+ 'empty': None})
+ self.assertRaises(KeyError, utils.extract_extension_options,
+ field_list, {})
+ field_list += nodes.field(
+ '', nodes.field_name('', 'cdef'),
+ nodes.field_body('', nodes.paragraph('', 'one'),
+ nodes.paragraph('', 'two')))
+ self.assertRaises(utils.BadOptionDataError,
+ utils.extract_extension_options,
+ field_list, self.optionspec)
+ field_list[-1] = nodes.field(
+ '', nodes.field_name('', 'cdef bad'),
+ nodes.field_body('', nodes.paragraph('', 'no arguments')))
+ self.assertRaises(utils.BadOptionError,
+ utils.extract_extension_options,
+ field_list, self.optionspec)
+ field_list[-1] = nodes.field(
+ '', nodes.field_name('', 'cdef'),
+ nodes.field_body('', nodes.paragraph('', 'duplicate')))
+ self.assertRaises(utils.DuplicateOptionError,
+ utils.extract_extension_options,
+ field_list, self.optionspec)
+ field_list[-2] = nodes.field(
+ '', nodes.field_name('', 'unkown'),
+ nodes.field_body('', nodes.paragraph('', 'unknown')))
+ self.assertRaises(KeyError, utils.extract_extension_options,
+ field_list, self.optionspec)
+
+
+if __name__ == '__main__':
+ unittest.main()