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')