Proper testing of proto 2 in part requires checking that the new opcodes
are actually getting generated. Add helpered method ensure_opcode_in_pickle to do a correct job checking for that. Changed test_long1(), test_long4(), and test_short_tuples() to use it.
This commit is contained in:
parent
621f055233
commit
31f119ebdb
|
@ -1,5 +1,6 @@
|
||||||
import unittest
|
import unittest
|
||||||
import pickle
|
import pickle
|
||||||
|
import pickletools
|
||||||
|
|
||||||
from test.test_support import TestFailed, have_unicode, TESTFN
|
from test.test_support import TestFailed, have_unicode, TESTFN
|
||||||
|
|
||||||
|
@ -253,6 +254,12 @@ class AbstractPickleTests(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def ensure_opcode_in_pickle(self, code, pickle):
|
||||||
|
for op, dummy, dummy in pickletools.genops(pickle):
|
||||||
|
if op.code == code:
|
||||||
|
return
|
||||||
|
self.fail("didn't find opcode %r in pickle %r" % (code, pickle))
|
||||||
|
|
||||||
def test_misc(self):
|
def test_misc(self):
|
||||||
# test various datatypes not tested by testdata
|
# test various datatypes not tested by testdata
|
||||||
for proto in protocols:
|
for proto in protocols:
|
||||||
|
@ -476,12 +483,14 @@ class AbstractPickleTests(unittest.TestCase):
|
||||||
s = self.dumps(x, 2)
|
s = self.dumps(x, 2)
|
||||||
y = self.loads(s)
|
y = self.loads(s)
|
||||||
self.assertEqual(x, y)
|
self.assertEqual(x, y)
|
||||||
|
self.ensure_opcode_in_pickle(pickle.LONG1, s)
|
||||||
|
|
||||||
def test_long4(self):
|
def test_long4(self):
|
||||||
x = 12345678910111213141516178920L << (256*8)
|
x = 12345678910111213141516178920L << (256*8)
|
||||||
s = self.dumps(x, 2)
|
s = self.dumps(x, 2)
|
||||||
y = self.loads(s)
|
y = self.loads(s)
|
||||||
self.assertEqual(x, y)
|
self.assertEqual(x, y)
|
||||||
|
self.ensure_opcode_in_pickle(pickle.LONG4, s)
|
||||||
|
|
||||||
def test_short_tuples(self):
|
def test_short_tuples(self):
|
||||||
# Map (proto, len(tuple)) to expected opcode.
|
# Map (proto, len(tuple)) to expected opcode.
|
||||||
|
@ -503,8 +512,6 @@ class AbstractPickleTests(unittest.TestCase):
|
||||||
(2, 3): pickle.TUPLE3,
|
(2, 3): pickle.TUPLE3,
|
||||||
(2, 4): pickle.TUPLE,
|
(2, 4): pickle.TUPLE,
|
||||||
}
|
}
|
||||||
all_tuple_opcodes = (pickle.TUPLE, pickle.EMPTY_TUPLE,
|
|
||||||
pickle.TUPLE1, pickle.TUPLE2, pickle.TUPLE3)
|
|
||||||
a = ()
|
a = ()
|
||||||
b = (1,)
|
b = (1,)
|
||||||
c = (1, 2)
|
c = (1, 2)
|
||||||
|
@ -515,16 +522,8 @@ class AbstractPickleTests(unittest.TestCase):
|
||||||
s = self.dumps(x, proto)
|
s = self.dumps(x, proto)
|
||||||
y = self.loads(s)
|
y = self.loads(s)
|
||||||
self.assertEqual(x, y, (proto, x, s, y))
|
self.assertEqual(x, y, (proto, x, s, y))
|
||||||
|
|
||||||
# Verify that the protocol-correct tuple-building opcode
|
|
||||||
# was generated.
|
|
||||||
expected = expected_opcode[proto, len(x)]
|
expected = expected_opcode[proto, len(x)]
|
||||||
for opcode in s:
|
self.ensure_opcode_in_pickle(expected, s)
|
||||||
if opcode in all_tuple_opcodes:
|
|
||||||
self.assertEqual(expected, opcode)
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
self.fail("didn't find a tuple-building opcode in pickle")
|
|
||||||
|
|
||||||
def test_singletons(self):
|
def test_singletons(self):
|
||||||
for proto in protocols:
|
for proto in protocols:
|
||||||
|
|
Loading…
Reference in New Issue