Mercurial > genshi > genshi-test
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>Über uns</li>', xml.render(encoding='ascii')) | 37 self.assertEqual(u'<li>Ü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', |