]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-45566: `test_frozen_pickle` checks all `pickle` protocols (GH-29150)
authorNikita Sobolev <mail@sobolevn.me>
Sun, 24 Oct 2021 13:06:32 +0000 (16:06 +0300)
committerGitHub <noreply@github.com>
Sun, 24 Oct 2021 13:06:32 +0000 (06:06 -0700)
Refs https://github.com/python/cpython/pull/29147

Automerge-Triggered-By: GH:ericvsmith
Lib/test/test_dataclasses.py
Misc/NEWS.d/next/Tests/2021-10-22-12-05-21.bpo-45566.2gQ3ZB.rst [new file with mode: 0644]

index bdcb4a2cfd1a07c8d6abf9c33b6b77bd11e25779..bbbb8e6c6395b8f992ebad0f8f5583c711c6d297 100644 (file)
@@ -2859,13 +2859,26 @@ class TestSlots(unittest.TestCase):
         foo: str
         bar: int
 
+    @dataclass(frozen=True)
+    class FrozenWithoutSlotsClass:
+        foo: str
+        bar: int
+
     def test_frozen_pickle(self):
         # bpo-43999
 
-        assert self.FrozenSlotsClass.__slots__ == ("foo", "bar")
-        p = pickle.dumps(self.FrozenSlotsClass("a", 1))
-        assert pickle.loads(p) == self.FrozenSlotsClass("a", 1)
-
+        self.assertEqual(self.FrozenSlotsClass.__slots__, ("foo", "bar"))
+        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+            with self.subTest(proto=proto):
+                obj = self.FrozenSlotsClass("a", 1)
+                p = pickle.loads(pickle.dumps(obj, protocol=proto))
+                self.assertIsNot(obj, p)
+                self.assertEqual(obj, p)
+
+                obj = self.FrozenWithoutSlotsClass("a", 1)
+                p = pickle.loads(pickle.dumps(obj, protocol=proto))
+                self.assertIsNot(obj, p)
+                self.assertEqual(obj, p)
 
 class TestDescriptors(unittest.TestCase):
     def test_set_name(self):
diff --git a/Misc/NEWS.d/next/Tests/2021-10-22-12-05-21.bpo-45566.2gQ3ZB.rst b/Misc/NEWS.d/next/Tests/2021-10-22-12-05-21.bpo-45566.2gQ3ZB.rst
new file mode 100644 (file)
index 0000000..a2ecf72
--- /dev/null
@@ -0,0 +1 @@
+Fix ``test_frozen_pickle`` in ``test_dataclasses`` to check all ``pickle`` versions.