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