]> granicus.if.org Git - python/commitdiff
Added a simple NEWOBJ test. This is in the pickle-only part of the
authorTim Peters <tim.peters@gmail.com>
Thu, 13 Feb 2003 18:42:00 +0000 (18:42 +0000)
committerTim Peters <tim.peters@gmail.com>
Thu, 13 Feb 2003 18:42:00 +0000 (18:42 +0000)
test for now (cPickle can't yet produce NEWOBJ).

Lib/test/pickletester.py

index 8479d4350c7d18b9eaa7fd77ec90dfbd15d0ca99..c6ffbeacbd4977a572eea8e8de5125ede8988d9c 100644 (file)
@@ -724,6 +724,16 @@ class AbstractPickleTests(unittest.TestCase):
 # XXX along with the references to it in test_pickle.py.
 class TempAbstractPickleTests(unittest.TestCase):
 
+    def test_simple_newobj(self):
+        x = object.__new__(SimpleNewObj)  # avoid __init__
+        x.abc = 666
+        for proto in protocols:
+            s = self.dumps(x, proto)
+            self.assertEqual(opcode_in_pickle(pickle.NEWOBJ, s), proto >= 2)
+            y = self.loads(s)   # will raise TypeError if __init__ called
+            self.assertEqual(y.abc, 666)
+            self.assertEqual(x.__dict__, y.__dict__)
+
     def test_newobj_list_slots(self):
         x = SlotList([1, 2, 3])
         x.foo = 42
@@ -771,6 +781,11 @@ myclasses = [MyInt, MyLong, MyFloat,
 class SlotList(MyList):
     __slots__ = ["foo"]
 
+class SimpleNewObj(object):
+    def __init__(self, a, b, c):
+        # raise an error, to make sure this isn't called
+        raise TypeError("SimpleNewObj.__init__() didn't expect to get called")
+
 class AbstractPickleModuleTests(unittest.TestCase):
 
     def test_dump_closed_file(self):