diff options
| author | Nikita Sobolev <mail@sobolevn.me> | 2023-03-11 00:26:46 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-11 00:26:46 (GMT) |
| commit | b48be8fa18518583abb21bf6e4f5d7e4b5c9d7b2 (patch) | |
| tree | f378710f37135e512641c0c72ee3b22dcc5b5d18 /Lib/test/test_dataclasses.py | |
| parent | ee6f8413a99d0ee4828e1c81911e203d3fff85d5 (diff) | |
| download | cpython-b48be8fa18518583abb21bf6e4f5d7e4b5c9d7b2.zip cpython-b48be8fa18518583abb21bf6e4f5d7e4b5c9d7b2.tar.gz cpython-b48be8fa18518583abb21bf6e4f5d7e4b5c9d7b2.tar.bz2 | |
gh-102103: add `module` argument to `dataclasses.make_dataclass` (#102104)
Diffstat (limited to 'Lib/test/test_dataclasses.py')
| -rw-r--r-- | Lib/test/test_dataclasses.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 5486b2e..76bed0c 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3606,6 +3606,15 @@ class TestStringAnnotations(unittest.TestCase): 'return': type(None)}) +ByMakeDataClass = make_dataclass('ByMakeDataClass', [('x', int)]) +ManualModuleMakeDataClass = make_dataclass('ManualModuleMakeDataClass', + [('x', int)], + module='test.test_dataclasses') +WrongNameMakeDataclass = make_dataclass('Wrong', [('x', int)]) +WrongModuleMakeDataclass = make_dataclass('WrongModuleMakeDataclass', + [('x', int)], + module='custom') + class TestMakeDataclass(unittest.TestCase): def test_simple(self): C = make_dataclass('C', @@ -3715,6 +3724,36 @@ class TestMakeDataclass(unittest.TestCase): 'y': int, 'z': 'typing.Any'}) + def test_module_attr(self): + self.assertEqual(ByMakeDataClass.__module__, __name__) + self.assertEqual(ByMakeDataClass(1).__module__, __name__) + self.assertEqual(WrongModuleMakeDataclass.__module__, "custom") + Nested = make_dataclass('Nested', []) + self.assertEqual(Nested.__module__, __name__) + self.assertEqual(Nested().__module__, __name__) + + def test_pickle_support(self): + for klass in [ByMakeDataClass, ManualModuleMakeDataClass]: + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + with self.subTest(proto=proto): + self.assertEqual( + pickle.loads(pickle.dumps(klass, proto)), + klass, + ) + self.assertEqual( + pickle.loads(pickle.dumps(klass(1), proto)), + klass(1), + ) + + def test_cannot_be_pickled(self): + for klass in [WrongNameMakeDataclass, WrongModuleMakeDataclass]: + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + with self.subTest(proto=proto): + with self.assertRaises(pickle.PickleError): + pickle.dumps(klass, proto) + with self.assertRaises(pickle.PickleError): + pickle.dumps(klass(1), proto) + def test_invalid_type_specification(self): for bad_field in [(), (1, 2, 3, 4), |
