cmlenz@1: # -*- coding: utf-8 -*-
cmlenz@1: #
cmlenz@66: # Copyright (C) 2006 Edgewall Software
cmlenz@1: # All rights reserved.
cmlenz@1: #
cmlenz@1: # This software is licensed as described in the file COPYING, which
cmlenz@1: # you should have received as part of this distribution. The terms
cmlenz@66: # are also available at http://markup.edgewall.org/wiki/License.
cmlenz@1: #
cmlenz@1: # This software consists of voluntary contributions made by many
cmlenz@1: # individuals. For the exact contribution history, see the revision
cmlenz@66: # history and logs, available at http://markup.edgewall.org/log/.
cmlenz@1:
cmlenz@26: import doctest
cmlenz@134: from StringIO import StringIO
cmlenz@134: import sys
cmlenz@1: import unittest
cmlenz@1:
cmlenz@1: from markup.core import Stream
cmlenz@134: from markup.input import XMLParser, HTMLParser
cmlenz@134:
cmlenz@134:
cmlenz@134: class XMLParserTestCase(unittest.TestCase):
cmlenz@134:
cmlenz@134: def test_text_node_pos_single_line(self):
cmlenz@134: text = 'foo bar'
cmlenz@134: events = list(XMLParser(StringIO(text)))
cmlenz@134: kind, data, pos = events[1]
cmlenz@134: self.assertEqual(Stream.TEXT, kind)
cmlenz@134: self.assertEqual(u'foo bar', data)
cmlenz@134: if sys.version_info[:2] >= (2, 4):
cmlenz@134: self.assertEqual((None, 1, 6), pos)
cmlenz@134:
cmlenz@134: def test_text_node_pos_multi_line(self):
cmlenz@134: text = '''foo
cmlenz@134: bar'''
cmlenz@134: events = list(XMLParser(StringIO(text)))
cmlenz@134: kind, data, pos = events[1]
cmlenz@134: self.assertEqual(Stream.TEXT, kind)
cmlenz@134: self.assertEqual(u'foo\nbar', data)
cmlenz@134: if sys.version_info[:2] >= (2, 4):
cmlenz@134: self.assertEqual((None, 1, -1), pos)
cmlenz@134:
cmlenz@134:
cmlenz@134: class HTMLParserTestCase(unittest.TestCase):
cmlenz@134:
cmlenz@134: def test_text_node_pos_single_line(self):
cmlenz@134: text = 'foo bar'
cmlenz@134: events = list(HTMLParser(StringIO(text)))
cmlenz@134: kind, data, pos = events[1]
cmlenz@134: self.assertEqual(Stream.TEXT, kind)
cmlenz@134: self.assertEqual(u'foo bar', data)
cmlenz@134: if sys.version_info[:2] >= (2, 4):
cmlenz@134: self.assertEqual((None, 1, 6), pos)
cmlenz@134:
cmlenz@134: def test_text_node_pos_multi_line(self):
cmlenz@134: text = '''foo
cmlenz@134: bar'''
cmlenz@134: events = list(HTMLParser(StringIO(text)))
cmlenz@134: kind, data, pos = events[1]
cmlenz@134: self.assertEqual(Stream.TEXT, kind)
cmlenz@134: self.assertEqual(u'foo\nbar', data)
cmlenz@134: if sys.version_info[:2] >= (2, 4):
cmlenz@134: self.assertEqual((None, 1, 6), pos)
cmlenz@1:
cmlenz@1:
cmlenz@1: def suite():
cmlenz@1: suite = unittest.TestSuite()
cmlenz@141: suite.addTest(doctest.DocTestSuite(XMLParser.__module__))
cmlenz@134: suite.addTest(unittest.makeSuite(XMLParserTestCase, 'test'))
cmlenz@134: suite.addTest(unittest.makeSuite(HTMLParserTestCase, 'test'))
cmlenz@1: return suite
cmlenz@1:
cmlenz@1: if __name__ == '__main__':
cmlenz@1: unittest.main(defaultTest='suite')