summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_collections.py
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2013-05-27 17:58:55 (GMT)
committerRaymond Hettinger <python@rcn.com>2013-05-27 17:58:55 (GMT)
commit7393c69d6da61c3756ec424d709f6cfdd2866e3e (patch)
tree62bbc8c8b8bc9b262279ae850fd459b90d87e4be /Lib/test/test_collections.py
parent16c52a337644e0223c2004168551ff2ba7884cb7 (diff)
downloadcpython-7393c69d6da61c3756ec424d709f6cfdd2866e3e.zip
cpython-7393c69d6da61c3756ec424d709f6cfdd2866e3e.tar.gz
cpython-7393c69d6da61c3756ec424d709f6cfdd2866e3e.tar.bz2
Issue #18015: Fix unpickling of 2.7.3 and 2.7.4 namedtuples.
Diffstat (limited to 'Lib/test/test_collections.py')
-rw-r--r--Lib/test/test_collections.py44
1 files changed, 43 insertions, 1 deletions
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index 8bdeb3d..3aaecb2 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -17,6 +17,43 @@ from collections import Sequence, MutableSequence
TestNT = namedtuple('TestNT', 'x y z') # type used for pickle tests
+py273_named_tuple_pickle = '''\
+ccopy_reg
+_reconstructor
+p0
+(ctest.test_collections
+TestNT
+p1
+c__builtin__
+tuple
+p2
+(I10
+I20
+I30
+tp3
+tp4
+Rp5
+ccollections
+OrderedDict
+p6
+((lp7
+(lp8
+S'x'
+p9
+aI10
+aa(lp10
+S'y'
+p11
+aI20
+aa(lp12
+S'z'
+p13
+aI30
+aatp14
+Rp15
+b.
+'''
+
class TestNamedTuple(unittest.TestCase):
def test_factory(self):
@@ -78,12 +115,12 @@ class TestNamedTuple(unittest.TestCase):
self.assertRaises(TypeError, eval, 'Point(XXX=1, y=2)', locals()) # wrong keyword argument
self.assertRaises(TypeError, eval, 'Point(x=1)', locals()) # missing keyword argument
self.assertEqual(repr(p), 'Point(x=11, y=22)')
- self.assertNotIn('__dict__', dir(p)) # verify instance has no dict
self.assertNotIn('__weakref__', dir(p))
self.assertEqual(p, Point._make([11, 22])) # test _make classmethod
self.assertEqual(p._fields, ('x', 'y')) # test _fields attribute
self.assertEqual(p._replace(x=1), (1, 22)) # test _replace method
self.assertEqual(p._asdict(), dict(x=11, y=22)) # test _asdict method
+ self.assertEqual(vars(p), p._asdict()) # verify that vars() works
try:
p._replace(x=1, error=2)
@@ -215,6 +252,11 @@ class TestNamedTuple(unittest.TestCase):
# test __getnewargs__
self.assertEqual(t.__getnewargs__(), values)
+ def test_pickling_bug_18015(self):
+ # http://bugs.python.org/issue18015
+ pt = pickle.loads(py273_named_tuple_pickle)
+ self.assertEqual(pt.x, 10)
+
class ABCTestCase(unittest.TestCase):
def validate_abstract_methods(self, abc, *names):