comparison genshi/tests/core.py @ 932:e53161c2773c

Merge r1140 from py3k: add support for python 3 to core genshi components (genshi.core, genshi.input and genshi.output): * default input and output encodings changed from UTF-8 to None (i.e. unicode strings) * Namespace and QName objects do not call stringrepr in __repr__ in Python 3 since repr() returns a unicode string there. * track changes to expat parser in Python 3 (mostly it accepts bytes instead of strings)
author hodgestar
date Fri, 18 Mar 2011 09:08:12 +0000
parents 8cef75b02ac1
children
comparison
equal deleted inserted replaced
931:ade3abe742e9 932:e53161c2773c
11 # individuals. For the exact contribution history, see the revision 11 # individuals. For the exact contribution history, see the revision
12 # history and logs, available at http://genshi.edgewall.org/log/. 12 # history and logs, available at http://genshi.edgewall.org/log/.
13 13
14 import doctest 14 import doctest
15 import pickle 15 import pickle
16 from StringIO import StringIO
17 try:
18 from cStringIO import StringIO as cStringIO
19 except ImportError:
20 cStringIO = StringIO
21 import unittest 16 import unittest
22 17
23 from genshi import core 18 from genshi import core
24 from genshi.core import Markup, Attrs, Namespace, QName, escape, unescape 19 from genshi.core import Markup, Attrs, Namespace, QName, escape, unescape
25 from genshi.input import XML, ParseError 20 from genshi.input import XML, ParseError
21 from genshi.compat import StringIO, BytesIO
26 22
27 23
28 class StreamTestCase(unittest.TestCase): 24 class StreamTestCase(unittest.TestCase):
29 25
30 def test_render_utf8(self): 26 def test_render_utf8(self):
31 xml = XML('<li>Über uns</li>') 27 xml = XML('<li>Über uns</li>')
32 self.assertEqual('<li>Über uns</li>', xml.render()) 28 self.assertEqual(u'<li>Über uns</li>'.encode('utf-8'), xml.render(encoding='utf-8'))
33 29
34 def test_render_unicode(self): 30 def test_render_unicode(self):
35 xml = XML('<li>Über uns</li>') 31 xml = XML('<li>Über uns</li>')
32 self.assertEqual(u'<li>Über uns</li>', xml.render())
36 self.assertEqual(u'<li>Über uns</li>', xml.render(encoding=None)) 33 self.assertEqual(u'<li>Über uns</li>', xml.render(encoding=None))
37 34
38 def test_render_ascii(self): 35 def test_render_ascii(self):
39 xml = XML('<li>Über uns</li>') 36 xml = XML('<li>Über uns</li>')
40 self.assertEqual('<li>&#220;ber uns</li>', xml.render(encoding='ascii')) 37 self.assertEqual(u'<li>&#220;ber uns</li>'.encode('ascii'), xml.render(encoding='ascii'))
41 38
42 def test_render_output_stream_utf8(self): 39 def test_render_output_stream_utf8(self):
43 xml = XML('<li>Über uns</li>') 40 xml = XML('<li>Über uns</li>')
44 strio = cStringIO() 41 strio = BytesIO()
45 self.assertEqual(None, xml.render(out=strio)) 42 self.assertEqual(None, xml.render(encoding='utf-8', out=strio))
46 self.assertEqual('<li>Über uns</li>', strio.getvalue()) 43 self.assertEqual(u'<li>Über uns</li>'.encode('utf-8'), strio.getvalue())
47 44
48 def test_render_output_stream_unicode(self): 45 def test_render_output_stream_unicode(self):
49 xml = XML('<li>Über uns</li>') 46 xml = XML('<li>Über uns</li>')
50 strio = StringIO() 47 strio = StringIO()
51 self.assertEqual(None, xml.render(encoding=None, out=strio)) 48 self.assertEqual(None, xml.render(encoding=None, out=strio))
52 self.assertEqual(u'<li>Über uns</li>', strio.getvalue()) 49 self.assertEqual(u'<li>Über uns</li>', strio.getvalue())
53 50
54 def test_pickle(self): 51 def test_pickle(self):
55 xml = XML('<li>Foo</li>') 52 xml = XML('<li>Foo</li>')
56 buf = StringIO() 53 buf = BytesIO()
57 pickle.dump(xml, buf, 2) 54 pickle.dump(xml, buf, 2)
58 buf.seek(0) 55 buf.seek(0)
59 xml = pickle.load(buf) 56 xml = pickle.load(buf)
60 self.assertEquals('<li>Foo</li>', xml.render(encoding=None)) 57 self.assertEquals('<li>Foo</li>', xml.render(encoding=None))
61 58
62 59
63 class MarkupTestCase(unittest.TestCase): 60 class MarkupTestCase(unittest.TestCase):
64 61
65 def test_new_with_encoding(self): 62 def test_new_with_encoding(self):
66 markup = Markup('Döner', encoding='utf-8') 63 markup = Markup(u'Döner'.encode('utf-8'), encoding='utf-8')
67 self.assertEquals("<Markup u'D\\xf6ner'>", repr(markup)) 64 # mimic Markup.__repr__ when constructing output for Python 2/3 compatibility
65 self.assertEquals("<Markup %r>" % u'D\u00f6ner', repr(markup))
68 66
69 def test_repr(self): 67 def test_repr(self):
70 markup = Markup('foo') 68 markup = Markup('foo')
71 self.assertEquals("<Markup u'foo'>", repr(markup)) 69 self.assertEquals("<Markup u'foo'>", repr(markup))
72 70
156 assert type(markup) is Markup 154 assert type(markup) is Markup
157 self.assertEquals('foo', markup) 155 self.assertEquals('foo', markup)
158 156
159 def test_pickle(self): 157 def test_pickle(self):
160 markup = Markup('foo') 158 markup = Markup('foo')
161 buf = StringIO() 159 buf = BytesIO()
162 pickle.dump(markup, buf, 2) 160 pickle.dump(markup, buf, 2)
163 buf.seek(0) 161 buf.seek(0)
164 self.assertEquals("<Markup u'foo'>", repr(pickle.load(buf))) 162 self.assertEquals("<Markup u'foo'>", repr(pickle.load(buf)))
165 163
166 164
167 class AttrsTestCase(unittest.TestCase): 165 class AttrsTestCase(unittest.TestCase):
168 166
169 def test_pickle(self): 167 def test_pickle(self):
170 attrs = Attrs([("attr1", "foo"), ("attr2", "bar")]) 168 attrs = Attrs([("attr1", "foo"), ("attr2", "bar")])
171 buf = StringIO() 169 buf = BytesIO()
172 pickle.dump(attrs, buf, 2) 170 pickle.dump(attrs, buf, 2)
173 buf.seek(0) 171 buf.seek(0)
174 unpickled = pickle.load(buf) 172 unpickled = pickle.load(buf)
175 self.assertEquals("Attrs([('attr1', 'foo'), ('attr2', 'bar')])", 173 self.assertEquals("Attrs([('attr1', 'foo'), ('attr2', 'bar')])",
176 repr(unpickled)) 174 repr(unpickled))
194 ns = Namespace(u'http://www.example.org/nämespäcé') 192 ns = Namespace(u'http://www.example.org/nämespäcé')
195 self.assertEqual(eval(repr(ns)), ns) 193 self.assertEqual(eval(repr(ns)), ns)
196 194
197 def test_pickle(self): 195 def test_pickle(self):
198 ns = Namespace('http://www.example.org/namespace') 196 ns = Namespace('http://www.example.org/namespace')
199 buf = StringIO() 197 buf = BytesIO()
200 pickle.dump(ns, buf, 2) 198 pickle.dump(ns, buf, 2)
201 buf.seek(0) 199 buf.seek(0)
202 unpickled = pickle.load(buf) 200 unpickled = pickle.load(buf)
203 self.assertEquals("Namespace('http://www.example.org/namespace')", 201 self.assertEquals("Namespace('http://www.example.org/namespace')",
204 repr(unpickled)) 202 repr(unpickled))
207 205
208 class QNameTestCase(unittest.TestCase): 206 class QNameTestCase(unittest.TestCase):
209 207
210 def test_pickle(self): 208 def test_pickle(self):
211 qname = QName('http://www.example.org/namespace}elem') 209 qname = QName('http://www.example.org/namespace}elem')
212 buf = StringIO() 210 buf = BytesIO()
213 pickle.dump(qname, buf, 2) 211 pickle.dump(qname, buf, 2)
214 buf.seek(0) 212 buf.seek(0)
215 unpickled = pickle.load(buf) 213 unpickled = pickle.load(buf)
216 self.assertEquals('{http://www.example.org/namespace}elem', unpickled) 214 self.assertEquals('{http://www.example.org/namespace}elem', unpickled)
217 self.assertEquals('http://www.example.org/namespace', 215 self.assertEquals('http://www.example.org/namespace',
Copyright (C) 2012-2017 Edgewall Software