https://github.com/python/cpython/commit/5f547585fa56c94c5d836b5313a7200f4937ebc4
commit: 5f547585fa56c94c5d836b5313a7200f4937ebc4
branch: main
author: Nikita Sobolev <[email protected]>
committer: sobolevn <[email protected]>
date: 2024-05-04T18:08:38+03:00
summary:
gh-118569: Add a test for dynamic PEP695 classes (#118570)
files:
M Lib/test/test_type_params.py
diff --git a/Lib/test/test_type_params.py b/Lib/test/test_type_params.py
index 4c5bf6bfd33c75..82f1007f9ac97b 100644
--- a/Lib/test/test_type_params.py
+++ b/Lib/test/test_type_params.py
@@ -776,6 +776,31 @@ class D[U](T):
self.assertIn(int, C.D.__bases__)
self.assertIs(C.D.x, str)
+
+class DynamicClassTest(unittest.TestCase):
+ def _set_type_params(self, ns, params):
+ ns['__type_params__'] = params
+
+ def test_types_new_class_with_callback(self):
+ T = TypeVar('T', infer_variance=True)
+ Klass = types.new_class('Klass', (Generic[T],), {},
+ lambda ns: self._set_type_params(ns, (T,)))
+
+ self.assertEqual(Klass.__bases__, (Generic,))
+ self.assertEqual(Klass.__orig_bases__, (Generic[T],))
+ self.assertEqual(Klass.__type_params__, (T,))
+ self.assertEqual(Klass.__parameters__, (T,))
+
+ def test_types_new_class_no_callback(self):
+ T = TypeVar('T', infer_variance=True)
+ Klass = types.new_class('Klass', (Generic[T],), {})
+
+ self.assertEqual(Klass.__bases__, (Generic,))
+ self.assertEqual(Klass.__orig_bases__, (Generic[T],))
+ self.assertEqual(Klass.__type_params__, ()) # must be explicitly set
+ self.assertEqual(Klass.__parameters__, (T,))
+
+
class TypeParamsManglingTest(unittest.TestCase):
def test_mangling(self):
class Foo[__T]:
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]