Skip to content

Commit 53e8bdd

Browse files
[3.12] gh-118569: Add a test for dynamic PEP695 classes (GH-118570) (#118574)
gh-118569: Add a test for dynamic PEP695 classes (GH-118570) (cherry picked from commit 5f54758) Co-authored-by: Nikita Sobolev <[email protected]>
1 parent 7da5737 commit 53e8bdd

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

Lib/test/test_type_params.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,31 @@ class D[U](T):
708708
self.assertIn(int, C.D.__bases__)
709709
self.assertIs(C.D.x, str)
710710

711+
712+
class DynamicClassTest(unittest.TestCase):
713+
def _set_type_params(self, ns, params):
714+
ns['__type_params__'] = params
715+
716+
def test_types_new_class_with_callback(self):
717+
T = TypeVar('T', infer_variance=True)
718+
Klass = types.new_class('Klass', (Generic[T],), {},
719+
lambda ns: self._set_type_params(ns, (T,)))
720+
721+
self.assertEqual(Klass.__bases__, (Generic,))
722+
self.assertEqual(Klass.__orig_bases__, (Generic[T],))
723+
self.assertEqual(Klass.__type_params__, (T,))
724+
self.assertEqual(Klass.__parameters__, (T,))
725+
726+
def test_types_new_class_no_callback(self):
727+
T = TypeVar('T', infer_variance=True)
728+
Klass = types.new_class('Klass', (Generic[T],), {})
729+
730+
self.assertEqual(Klass.__bases__, (Generic,))
731+
self.assertEqual(Klass.__orig_bases__, (Generic[T],))
732+
self.assertEqual(Klass.__type_params__, ()) # must be explicitly set
733+
self.assertEqual(Klass.__parameters__, (T,))
734+
735+
711736
class TypeParamsManglingTest(unittest.TestCase):
712737
def test_mangling(self):
713738
class Foo[__T]:

0 commit comments

Comments
 (0)