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@230: # are also available at http://genshi.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@230: # history and logs, available at http://genshi.edgewall.org/log/.
cmlenz@1:
cmlenz@1: import doctest
cmlenz@279: import pickle
cmlenz@279: from StringIO import StringIO
aflett@703: try:
aflett@703: from cStringIO import StringIO as cStringIO
aflett@703: except ImportError:
aflett@703: cStringIO = StringIO
cmlenz@1: import unittest
cmlenz@1:
cmlenz@279: from genshi import core
aflett@718: from genshi.core import Markup, Attrs, Namespace, QName, escape, unescape
cmlenz@230: from genshi.input import XML, ParseError
cmlenz@147:
cmlenz@147:
cmlenz@147: class StreamTestCase(unittest.TestCase):
cmlenz@147:
cmlenz@147: def test_render_utf8(self):
cmlenz@147: xml = XML('
Über uns')
cmlenz@147: self.assertEqual('Über uns', xml.render())
cmlenz@147:
cmlenz@147: def test_render_unicode(self):
cmlenz@147: xml = XML('Über uns')
cmlenz@147: self.assertEqual(u'Über uns', xml.render(encoding=None))
cmlenz@147:
cmlenz@147: def test_render_ascii(self):
cmlenz@147: xml = XML('Über uns')
cmlenz@147: self.assertEqual('Über uns', xml.render(encoding='ascii'))
cmlenz@1:
aflett@703: def test_render_output_stream_utf8(self):
aflett@703: xml = XML('Über uns')
aflett@703: strio = cStringIO()
aflett@703: self.assertEqual(None, xml.render(out=strio))
aflett@703: self.assertEqual('Über uns', strio.getvalue())
aflett@703:
aflett@703: def test_render_output_stream_unicode(self):
aflett@703: xml = XML('Über uns')
aflett@703: strio = StringIO()
aflett@703: self.assertEqual(None, xml.render(encoding=None, out=strio))
aflett@703: self.assertEqual(u'Über uns', strio.getvalue())
aflett@703:
cmlenz@279: def test_pickle(self):
cmlenz@279: xml = XML('Foo')
cmlenz@279: buf = StringIO()
cmlenz@279: pickle.dump(xml, buf, 2)
cmlenz@279: buf.seek(0)
cmlenz@279: xml = pickle.load(buf)
cmlenz@279: self.assertEquals('Foo', xml.render())
cmlenz@279:
cmlenz@1:
cmlenz@1: class MarkupTestCase(unittest.TestCase):
cmlenz@1:
aflett@718: def test_new_with_encoding(self):
aflett@718: markup = Markup('Döner', encoding='utf-8')
aflett@718: self.assertEquals("", repr(markup))
aflett@718:
cmlenz@116: def test_repr(self):
cmlenz@116: markup = Markup('foo')
cmlenz@382: self.assertEquals("", repr(markup))
cmlenz@116:
cmlenz@1: def test_escape(self):
cmlenz@1: markup = escape('"&"')
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('<b>"&"</b>', markup)
cmlenz@1:
cmlenz@1: def test_escape_noquotes(self):
cmlenz@1: markup = escape('"&"', quotes=False)
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('<b>"&"</b>', markup)
cmlenz@1:
cmlenz@1: def test_unescape_markup(self):
cmlenz@1: string = '"&"'
cmlenz@1: markup = Markup.escape(string)
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals(string, unescape(markup))
cmlenz@1:
cmlenz@1: def test_add_str(self):
cmlenz@1: markup = Markup('foo') + '
'
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('foo<br/>', markup)
cmlenz@1:
cmlenz@1: def test_add_markup(self):
cmlenz@1: markup = Markup('foo') + Markup('
')
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('foo
', markup)
cmlenz@1:
cmlenz@1: def test_add_reverse(self):
cmlenz@204: markup = '
' + Markup('bar')
cmlenz@212: assert type(markup) is Markup
cmlenz@204: self.assertEquals('<br/>bar', markup)
cmlenz@1:
cmlenz@1: def test_mod(self):
cmlenz@1: markup = Markup('%s') % '&'
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('&', markup)
cmlenz@1:
cmlenz@1: def test_mod_multi(self):
cmlenz@1: markup = Markup('%s %s') % ('&', 'boo')
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('& boo', markup)
cmlenz@1:
aflett@718: def test_mod_mapping(self):
aflett@718: markup = Markup('%(foo)s') % {'foo': '&'}
aflett@718: assert type(markup) is Markup
aflett@718: self.assertEquals('&', markup)
aflett@718:
aflett@718: def test_mod_noescape(self):
aflett@718: markup = Markup('%(amp)s') % {'amp': Markup('&')}
aflett@718: assert type(markup) is Markup
aflett@718: self.assertEquals('&', markup)
aflett@718:
cmlenz@1: def test_mul(self):
cmlenz@1: markup = Markup('foo') * 2
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('foofoo', markup)
cmlenz@1:
cmlenz@204: def test_mul_reverse(self):
cmlenz@204: markup = 2 * Markup('foo')
cmlenz@212: assert type(markup) is Markup
cmlenz@204: self.assertEquals('foofoo', markup)
cmlenz@204:
cmlenz@1: def test_join(self):
cmlenz@1: markup = Markup('
').join(['foo', '', Markup('')])
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('foo
<bar />
', markup)
cmlenz@1:
cmlenz@1: def test_stripentities_all(self):
cmlenz@1: markup = Markup('& j').stripentities()
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('& j', markup)
cmlenz@1:
cmlenz@1: def test_stripentities_keepxml(self):
cmlenz@116: markup = Markup('& j').stripentities(keepxmlentities=True)
cmlenz@212: assert type(markup) is Markup
cmlenz@116: self.assertEquals('& j', markup)
cmlenz@1:
cmlenz@1: def test_striptags_empty(self):
cmlenz@1: markup = Markup('
').striptags()
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('', markup)
cmlenz@1:
cmlenz@1: def test_striptags_mid(self):
cmlenz@1: markup = Markup('fo
o').striptags()
cmlenz@212: assert type(markup) is Markup
cmlenz@1: self.assertEquals('foo', markup)
cmlenz@1:
cmlenz@279: def test_pickle(self):
cmlenz@279: markup = Markup('foo')
cmlenz@279: buf = StringIO()
cmlenz@279: pickle.dump(markup, buf, 2)
cmlenz@279: buf.seek(0)
cmlenz@382: self.assertEquals("", repr(pickle.load(buf)))
cmlenz@279:
cmlenz@279:
aflett@718: class AttrsTestCase(unittest.TestCase):
aflett@718:
aflett@718: def test_pickle(self):
aflett@718: attrs = Attrs([("attr1", "foo"), ("attr2", "bar")])
aflett@718: buf = StringIO()
aflett@718: pickle.dump(attrs, buf, 2)
aflett@718: buf.seek(0)
aflett@718: unpickled = pickle.load(buf)
aflett@718: self.assertEquals("Attrs([('attr1', 'foo'), ('attr2', 'bar')])",
aflett@718: repr(unpickled))
aflett@718:
aflett@718:
cmlenz@279: class NamespaceTestCase(unittest.TestCase):
cmlenz@279:
cmlenz@279: def test_pickle(self):
cmlenz@279: ns = Namespace('http://www.example.org/namespace')
cmlenz@279: buf = StringIO()
cmlenz@279: pickle.dump(ns, buf, 2)
cmlenz@279: buf.seek(0)
cmlenz@279: unpickled = pickle.load(buf)
cmlenz@279: self.assertEquals('',
cmlenz@279: repr(unpickled))
cmlenz@279: self.assertEquals('http://www.example.org/namespace', unpickled.uri)
cmlenz@279:
cmlenz@279:
cmlenz@279: class QNameTestCase(unittest.TestCase):
cmlenz@279:
cmlenz@279: def test_pickle(self):
cmlenz@279: qname = QName('http://www.example.org/namespace}elem')
cmlenz@279: buf = StringIO()
cmlenz@279: pickle.dump(qname, buf, 2)
cmlenz@279: buf.seek(0)
cmlenz@279: unpickled = pickle.load(buf)
cmlenz@279: self.assertEquals('{http://www.example.org/namespace}elem', unpickled)
cmlenz@279: self.assertEquals('http://www.example.org/namespace',
cmlenz@279: unpickled.namespace)
cmlenz@279: self.assertEquals('elem', unpickled.localname)
cmlenz@279:
cmlenz@326: def test_repr(self):
cmlenz@326: self.assertEqual("QName(u'elem')", repr(QName('elem')))
cmlenz@326: self.assertEqual("QName(u'http://www.example.org/namespace}elem')",
cmlenz@326: repr(QName('http://www.example.org/namespace}elem')))
cmlenz@326:
cmlenz@666: def test_leading_curly_brace(self):
cmlenz@666: qname = QName('{http://www.example.org/namespace}elem')
cmlenz@666: self.assertEquals('http://www.example.org/namespace', qname.namespace)
cmlenz@666: self.assertEquals('elem', qname.localname)
cmlenz@666:
cmlenz@1:
cmlenz@1: def suite():
cmlenz@1: suite = unittest.TestSuite()
cmlenz@147: suite.addTest(unittest.makeSuite(StreamTestCase, 'test'))
cmlenz@1: suite.addTest(unittest.makeSuite(MarkupTestCase, 'test'))
cmlenz@279: suite.addTest(unittest.makeSuite(NamespaceTestCase, 'test'))
aflett@718: suite.addTest(unittest.makeSuite(AttrsTestCase, 'test'))
cmlenz@279: suite.addTest(unittest.makeSuite(QNameTestCase, 'test'))
cmlenz@279: suite.addTest(doctest.DocTestSuite(core))
cmlenz@1: return suite
cmlenz@1:
cmlenz@1: if __name__ == '__main__':
cmlenz@1: unittest.main(defaultTest='suite')