bpo-45566: `test_frozen_pickle` checks all `pickle` protocols (GH-29150)

Refs https://github.com/python/cpython/pull/29147

Automerge-Triggered-By: GH:ericvsmith
This commit is contained in:
Nikita Sobolev 2021-10-24 16:06:32 +03:00 committed by GitHub
parent 9e05da6224
commit 07236d562e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 3 deletions

View 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):

View File

@ -0,0 +1 @@
Fix ``test_frozen_pickle`` in ``test_dataclasses`` to check all ``pickle`` versions.