[Zope3-checkins] CVS: Zope3/src/zope/xmlpickle/tests - __init__.py:1.2 test_xmlpickle.py:1.2
Jim Fulton
jim@zope.com
Wed, 25 Dec 2002 09:16:07 -0500
Update of /cvs-repository/Zope3/src/zope/xmlpickle/tests
In directory cvs.zope.org:/tmp/cvs-serv20790/src/zope/xmlpickle/tests
Added Files:
__init__.py test_xmlpickle.py
Log Message:
Grand renaming:
- Renamed most files (especially python modules) to lower case.
- Moved views and interfaces into separate hierarchies within each
project, where each top-level directory under the zope package
is a separate project.
- Moved everything to src from lib/python.
lib/python will eventually go away. I need access to the cvs
repository to make this happen, however.
There are probably some bits that are broken. All tests pass
and zope runs, but I haven't tried everything. There are a number
of cleanups I'll work on tomorrow.
=== Zope3/src/zope/xmlpickle/tests/__init__.py 1.1 => 1.2 ===
--- /dev/null Wed Dec 25 09:16:07 2002
+++ Zope3/src/zope/xmlpickle/tests/__init__.py Wed Dec 25 09:15:36 2002
@@ -0,0 +1,2 @@
+#
+# This file is necessary to make this directory a package.
=== Zope3/src/zope/xmlpickle/tests/test_xmlpickle.py 1.1 => 1.2 ===
--- /dev/null Wed Dec 25 09:16:07 2002
+++ Zope3/src/zope/xmlpickle/tests/test_xmlpickle.py Wed Dec 25 09:15:36 2002
@@ -0,0 +1,272 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""XXX short summary goes here.
+
+XXX longer description goes here.
+
+$Id$
+"""
+
+from unittest import TestCase, TestSuite, main, makeSuite
+
+from zope.xmlpickle.xmlpickle import dumps, loads
+
+class Test(TestCase):
+
+ def __test(self, v, expected_xml=None):
+ xml = dumps(v)
+ if expected_xml:
+ self.assertEqual(xml, expected_xml)
+ newv = loads(xml)
+ self.assertEqual(newv, v)
+
+ def test_float(self):
+ for v in (
+ -2000000000.0, -70000.0, -30000.0, -3000.0, -100.0, -99.0, -1.0,
+ 0.0, 1.0, 99.0, 100.0, 3000.0, 30000.0, 70000.0, 2000000000.0,
+ -1.2345678901234567e+308,
+ -1.2345678901234567e+30,
+ -12345678901234567.,
+ -1234567890123456.7,
+ -123456789012345.67,
+ -12345678901234.567,
+ -1234567890123.4567,
+ -123456789012.34567,
+ -12345678901.234567,
+ -1234567890.1234567,
+ -123456789.01234567,
+ -12345678.901234567,
+ -1234567.8901234567,
+ -123456.78901234567,
+ -12345.678901234567,
+ -1234.5678901234567,
+ -123.45678901234567,
+ -12.345678901234567,
+ -1.2345678901234567,
+ -.12345678901234567,
+ 1.2345678901234567e+308,
+ 1.2345678901234567e+30,
+ 12345678901234567.,
+ 1234567890123456.7,
+ 123456789012345.67,
+ 12345678901234.567,
+ 1234567890123.4567,
+ 123456789012.34567,
+ 12345678901.234567,
+ 1234567890.1234567,
+ 123456789.01234567,
+ 12345678.901234567,
+ 1234567.8901234567,
+ 123456.78901234567,
+ 12345.678901234567,
+ 1234.5678901234567,
+ 123.45678901234567,
+ 12.345678901234567,
+ 1.2345678901234567,
+ .12345678901234567,
+ ):
+ self.__test(v)
+
+ def test_int(self):
+ for v in (-2000000000, -70000, -30000, -3000, -100, -99, -1,
+ 0, 1, 99, 100, 3000, 30000, 70000, 2000000000):
+ self.__test(v)
+
+ def test_long(self):
+ for v in (-2000000000l, -70000l, -30000l, -3000l, -100l, -99l, -1l,
+ 0l, 1l, 99l, 100l, 3000l, 30000l, 70000l, 2000000000l):
+ self.__test(v)
+ for i in range(10, 3000, 200):
+ v = 30l**i
+ self.__test(v)
+ self.__test(-v)
+
+ def test_None(self):
+ self.__test(None)
+
+ def test_reduce(self):
+
+ v = DictSub()
+ v['spam'] = 1.23
+ v['eggs'] = 0
+ v.name = 'v'
+ self.__test(v)
+
+ def test_string(self):
+ self.__test('hello\n\tworld',
+ '<?xml version="1.0" encoding="utf-8" ?>\n'
+ '<pickle> <string>hello\n'
+ '\tworld</string> </pickle>\n'
+ )
+ self.__test('hello\r\nworld',
+ '<?xml version="1.0" encoding="utf-8" ?>\n'
+ '<pickle> <string>hello
\nworld</string> </pickle>\n'
+ )
+ self.__test('hello\0\nworld',
+ '<?xml version="1.0" encoding="utf-8" ?>\n'
+ '<pickle> '
+ '<string encoding="base64">aGVsbG8ACndvcmxk</string>'
+ ' </pickle>\n'
+ )
+
+ v = ''.join(map(chr, range(256)))
+ self.__test(v[:-2])
+ self.__test(v * 10)
+ self.__test(v * 400)
+ self.__test(v * 4000)
+
+ def test_unicode(self):
+ self.__test(
+ u'hello\n\tworld',
+ '<?xml version="1.0" encoding="utf-8" ?>\n'
+ '<pickle> <unicode>hello\n'
+ '\tworld</unicode> </pickle>\n'
+ )
+ self.__test(
+ u'hello\r\nworld',
+ '<?xml version="1.0" encoding="utf-8" ?>\n'
+ '<pickle> <unicode>hello
\nworld</unicode> </pickle>\n'
+ )
+ self.__test(
+ u'hello\0\nworld\n',
+ '<?xml version="1.0" encoding="utf-8" ?>\n<pickle> '
+ '<unicode encoding="base64">aGVsbG8ACndvcmxkCg==</unicode>'
+ ' </pickle>\n'
+ )
+ self.__test(
+ u'hello\ufffe\nworld\n',
+ '<?xml version="1.0" encoding="utf-8" ?>\n<pickle> '
+ '<unicode encoding="base64">aGVsbG/vv74Kd29ybGQK</unicode>'
+ ' </pickle>\n'
+ )
+ self.__test(
+ u'Hello\ud7ff\nworld\n',
+ '<?xml version="1.0" encoding="utf-8" ?>\n<pickle> '
+ '<unicode>Hello\xed\x9f\xbf\nworld\n</unicode>'
+ ' </pickle>\n'
+ )
+
+ def test_simple_object(self):
+ expect = """\
+<?xml version="1.0" encoding="utf-8" ?>
+<pickle>
+ <%sobject>
+ <klass>
+ <global name="%s" module="%s"/>
+ </klass>
+ <attributes>
+ <attribute name="eggs">
+ <int>2</int>
+ </attribute>
+ <attribute name="spam">
+ <int>1</int>
+ </attribute>
+ </attributes>
+ </%sobject>
+</pickle>
+"""
+
+ self.__test(Simple(1,2),
+ expect % ('classic_', 'Simple', __name__, 'classic_'))
+ self.__test(newSimple(1,2),
+ expect % ('', 'newSimple', __name__, ''))
+ self.__test(newSimple(1,2))
+
+ def test_object_w_funny_state(self):
+ o = Simple(1,2)
+ o.__dict__[(5,6,7)] = None
+ self.__test(o)
+ o = newSimple(1,2)
+ o.__dict__[(5,6,7)] = None
+ self.__test(o)
+
+ def test_object_w_initial_args(self):
+ o = WInitial([1,2,3], None)
+ o.foo = 'bar'
+ self.__test(o)
+ o = newWInitial([1,2,3], None)
+ o.foo = 'bar'
+ self.__test(o)
+
+ def test_dict(self):
+ self.__test({})
+ self.__test({1.23: u'foo', 'spam': [123]})
+ d = {}
+ for i in range(1000):
+ d[i] = str(i*i)
+ self.__test(d)
+
+ def test_complex(self):
+ self.__test(complex(1,2))
+
+ def test_cycles(self):
+ l = [1, 2 , 3]
+ l.append(l)
+ self.__test(l)
+ t = l, l
+ l.append(t)
+ self.__test(l)
+
+
+ def test_list(self):
+ self.__test([])
+ self.__test([1,2,3])
+ self.__test(range(1000))
+
+ def test_tuple(self):
+ self.__test(())
+ self.__test((1,2,3))
+
+
+class Simple:
+ def __init__(self, *a):
+ self.spam, self.eggs = a
+
+ def __eq__(self, other):
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __repr__(self):
+ return '%s %r' % (self.__class__.__name__, self.__dict__)
+
+class WInitial(Simple):
+ def __getinitargs__(self):
+ return self.spam, self.eggs
+
+class newSimple(Simple, object): pass
+class newWInitial(WInitial, object): pass
+
+
+
+class DictSub(dict):
+ def __eq__(self, other):
+ items = self.items()
+ items.sort()
+ otems = other.items()
+ otems.sort()
+ return (items, self.__dict__) == (otems, other.__dict__)
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+
+def test_suite():
+ return TestSuite((
+ makeSuite(Test),
+ ))
+
+if __name__=='__main__':
+ main(defaultTest='test_suite')