diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2018-04-01 11:33:13 (GMT) |
---|---|---|
committer | Ivan Levkivskyi <levkivskyi@gmail.com> | 2018-04-01 11:33:13 (GMT) |
commit | d063ad8962a83f41fccdca774b728c3826639f62 (patch) | |
tree | 1a3a2bb6e1fcab31f19568f1a455a29a6339fbab /Lib/test/test_dataclasses.py | |
parent | 9e96e7b24e4d3ff4dce4f24c4e469cd5460712c9 (diff) | |
download | cpython-d063ad8962a83f41fccdca774b728c3826639f62.zip cpython-d063ad8962a83f41fccdca774b728c3826639f62.tar.gz cpython-d063ad8962a83f41fccdca774b728c3826639f62.tar.bz2 |
Allow dynamic creation of generic dataclasses (GH-6319) (GH-6320)
(cherry picked from commit 5a7092de1226a95a50f0f384eea8ddb288959249)
Co-authored-by: Ivan Levkivskyi <levkivskyi@gmail.com>
Diffstat (limited to 'Lib/test/test_dataclasses.py')
-rwxr-xr-x | Lib/test/test_dataclasses.py | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 5cd424c..26bfc4e 100755 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -8,7 +8,7 @@ import pickle import inspect import unittest from unittest.mock import Mock -from typing import ClassVar, Any, List, Union, Tuple, Dict, Generic, TypeVar +from typing import ClassVar, Any, List, Union, Tuple, Dict, Generic, TypeVar, Optional from collections import deque, OrderedDict, namedtuple from functools import total_ordering @@ -1690,6 +1690,23 @@ class TestCase(unittest.TestCase): c = Alias(10, 1.0) self.assertEqual(c.new_method(), 1.0) + def test_generic_dynamic(self): + T = TypeVar('T') + + @dataclass + class Parent(Generic[T]): + x: T + Child = make_dataclass('Child', [('y', T), ('z', Optional[T], None)], + bases=(Parent[int], Generic[T]), namespace={'other': 42}) + self.assertIs(Child[int](1, 2).z, None) + self.assertEqual(Child[int](1, 2, 3).z, 3) + self.assertEqual(Child[int](1, 2, 3).other, 42) + # Check that type aliases work correctly. + Alias = Child[T] + self.assertEqual(Alias[int](1, 2).x, 1) + # Check MRO resolution. + self.assertEqual(Child.__mro__, (Child, Parent, Generic, object)) + def test_helper_replace(self): @dataclass(frozen=True) class C: |