Mercurial > genshi > mirror
diff markup/tests/input.py @ 134:d681d2c3cd8d trunk
* Improve the accuracy of line numbers for text nodes, so that reported errors about syntax or evaluation errors in expressions point to the right line (not quite perfect yet, though).
* Evaluation errors in expressions now include the original expression code in the traceback.
author | cmlenz |
---|---|
date | Sun, 06 Aug 2006 18:07:21 +0000 |
parents | 59eb24184e9c |
children | 520a5b7dd6d2 |
line wrap: on
line diff
--- a/markup/tests/input.py +++ b/markup/tests/input.py @@ -12,15 +12,63 @@ # history and logs, available at http://markup.edgewall.org/log/. import doctest +from StringIO import StringIO +import sys import unittest from markup.core import Stream -from markup.input import XMLParser +from markup.input import XMLParser, HTMLParser + + +class XMLParserTestCase(unittest.TestCase): + + def test_text_node_pos_single_line(self): + text = '<elem>foo bar</elem>' + events = list(XMLParser(StringIO(text))) + kind, data, pos = events[1] + self.assertEqual(Stream.TEXT, kind) + self.assertEqual(u'foo bar', data) + if sys.version_info[:2] >= (2, 4): + self.assertEqual((None, 1, 6), pos) + + def test_text_node_pos_multi_line(self): + text = '''<elem>foo +bar</elem>''' + events = list(XMLParser(StringIO(text))) + kind, data, pos = events[1] + self.assertEqual(Stream.TEXT, kind) + self.assertEqual(u'foo\nbar', data) + if sys.version_info[:2] >= (2, 4): + self.assertEqual((None, 1, -1), pos) + + +class HTMLParserTestCase(unittest.TestCase): + + def test_text_node_pos_single_line(self): + text = '<elem>foo bar</elem>' + events = list(HTMLParser(StringIO(text))) + kind, data, pos = events[1] + self.assertEqual(Stream.TEXT, kind) + self.assertEqual(u'foo bar', data) + if sys.version_info[:2] >= (2, 4): + self.assertEqual((None, 1, 6), pos) + + def test_text_node_pos_multi_line(self): + text = '''<elem>foo +bar</elem>''' + events = list(HTMLParser(StringIO(text))) + kind, data, pos = events[1] + self.assertEqual(Stream.TEXT, kind) + self.assertEqual(u'foo\nbar', data) + if sys.version_info[:2] >= (2, 4): + self.assertEqual((None, 1, 6), pos) def suite(): suite = unittest.TestSuite() - suite.addTest(doctest.DocTestSuite(XMLParser.__module__)) + #suite.addTest(doctest.DocTestSuite(XMLParser.__module__)) + suite.addTest(unittest.makeSuite(XMLParserTestCase, 'test')) + suite.addTest(unittest.makeSuite(HTMLParserTestCase, 'test')) return suite if __name__ == '__main__':