]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-118569: Add a test for dynamic PEP695 classes (GH-118570) (#118574)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sat, 4 May 2024 15:26:30 +0000 (17:26 +0200)
committerGitHub <noreply@github.com>
Sat, 4 May 2024 15:26:30 +0000 (15:26 +0000)
gh-118569: Add a test for dynamic PEP695 classes (GH-118570)
(cherry picked from commit 5f547585fa56c94c5d836b5313a7200f4937ebc4)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Lib/test/test_type_params.py

index 25ee188731f31fbe9762c5d7cd882e11c5225ec0..38416315173bd4a5bdded0f909ffee0abb79fccc 100644 (file)
@@ -708,6 +708,31 @@ class TypeParamsClassScopeTest(unittest.TestCase):
         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]: