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@160: def test_element_attribute_order(self): cmlenz@160: text = '' cmlenz@160: events = list(XMLParser(StringIO(text))) cmlenz@160: kind, data, pos = events[0] cmlenz@160: self.assertEqual(Stream.START, kind) cmlenz@160: tag, attrib = data cmlenz@160: self.assertEqual(u'elem', tag) cmlenz@160: self.assertEqual((u'title', u'baz'), attrib[0]) cmlenz@160: self.assertEqual((u'id', u'foo'), attrib[1]) cmlenz@160: self.assertEqual((u'class', u'bar'), attrib[2]) cmlenz@160: 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')