|
7 | 7 | import locale
|
8 | 8 | import sys
|
9 | 9 | import types
|
| 10 | +import typing |
10 | 11 | import unittest.mock
|
11 | 12 | import weakref
|
12 | 13 |
|
@@ -888,6 +889,17 @@ def __mro_entries__(self, bases):
|
888 | 889 | self.assertEqual(D.__orig_bases__, (c,))
|
889 | 890 | self.assertEqual(D.__mro__, (D, A, object))
|
890 | 891 |
|
| 892 | + def test_new_class_with_mro_entry_genericalias(self): |
| 893 | + L1 = types.new_class('L1', (typing.List[int],), {}) |
| 894 | + self.assertEqual(L1.__bases__, (list, typing.Generic)) |
| 895 | + self.assertEqual(L1.__orig_bases__, (typing.List[int],)) |
| 896 | + self.assertEqual(L1.__mro__, (L1, list, typing.Generic, object)) |
| 897 | + |
| 898 | + L2 = types.new_class('L2', (list[int],), {}) |
| 899 | + self.assertEqual(L2.__bases__, (list,)) |
| 900 | + self.assertEqual(L2.__orig_bases__, (list[int],)) |
| 901 | + self.assertEqual(L2.__mro__, (L2, list, object)) |
| 902 | + |
891 | 903 | def test_new_class_with_mro_entry_none(self):
|
892 | 904 | class A: pass
|
893 | 905 | class B: pass
|
@@ -1003,6 +1015,11 @@ def __mro_entries__(self, bases):
|
1003 | 1015 | for bases in [x, y, z, t]:
|
1004 | 1016 | self.assertIs(types.resolve_bases(bases), bases)
|
1005 | 1017 |
|
| 1018 | + def test_resolve_bases_with_mro_entry(self): |
| 1019 | + self.assertEqual(types.resolve_bases((typing.List[int],)), |
| 1020 | + (list, typing.Generic)) |
| 1021 | + self.assertEqual(types.resolve_bases((list[int],)), (list,)) |
| 1022 | + |
1006 | 1023 | def test_metaclass_derivation(self):
|
1007 | 1024 | # issue1294232: correct metaclass calculation
|
1008 | 1025 | new_calls = [] # to check the order of __new__ calls
|
|
0 commit comments