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__':
Copyright (C) 2012-2017 Edgewall Software