summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-05-04 15:26:30 (GMT)
committerGitHub <noreply@github.com>2024-05-04 15:26:30 (GMT)
commit53e8bdd1e6434a06ac67ae0dd250d1abf7d2dc4c (patch)
tree835f9477f499091e4ac3b95befe1ab1d3d818b87 /Lib/test
parent7da5737bd8250fe6d77866d8de21ad97f1a83c86 (diff)
downloadcpython-53e8bdd1e6434a06ac67ae0dd250d1abf7d2dc4c.zip
cpython-53e8bdd1e6434a06ac67ae0dd250d1abf7d2dc4c.tar.gz
cpython-53e8bdd1e6434a06ac67ae0dd250d1abf7d2dc4c.tar.bz2
[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 5f547585fa56c94c5d836b5313a7200f4937ebc4) Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_type_params.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/Lib/test/test_type_params.py b/Lib/test/test_type_params.py
index 25ee188..3841631 100644
--- a/Lib/test/test_type_params.py
+++ b/Lib/test/test_type_params.py
@@ -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]: