summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-08-07 20:30:10 (GMT)
committerGitHub <noreply@github.com>2024-08-07 20:30:10 (GMT)
commit540fcc62f5da982b79504221cac01bfab8b73ba1 (patch)
tree0e5b279cb9f2f358197a673ddf7a5a7959c07209 /Lib/test
parente73e7a7abdc3fed252affcb1629df1b3c8fff2ef (diff)
downloadcpython-540fcc62f5da982b79504221cac01bfab8b73ba1.zip
cpython-540fcc62f5da982b79504221cac01bfab8b73ba1.tar.gz
cpython-540fcc62f5da982b79504221cac01bfab8b73ba1.tar.bz2
gh-118814: Fix the TypeVar constructor when name is passed by keyword (GH-122664)
Fix _PyArg_UnpackKeywordsWithVararg for the case when argument for positional-or-keyword parameter is passed by keyword. There was only one such case in the stdlib -- the TypeVar constructor.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_clinic.py26
-rw-r--r--Lib/test/test_typing.py49
2 files changed, 70 insertions, 5 deletions
diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py
index f3fd610..8d511ab 100644
--- a/Lib/test/test_clinic.py
+++ b/Lib/test/test_clinic.py
@@ -3334,11 +3334,27 @@ class ClinicFunctionalTest(unittest.TestCase):
self.assertEqual(ac_tester.vararg(1, 2, 3, 4), (1, (2, 3, 4)))
def test_vararg_with_default(self):
- with self.assertRaises(TypeError):
- ac_tester.vararg_with_default()
- self.assertEqual(ac_tester.vararg_with_default(1, b=False), (1, (), False))
- self.assertEqual(ac_tester.vararg_with_default(1, 2, 3, 4), (1, (2, 3, 4), False))
- self.assertEqual(ac_tester.vararg_with_default(1, 2, 3, 4, b=True), (1, (2, 3, 4), True))
+ fn = ac_tester.vararg_with_default
+ self.assertRaises(TypeError, fn)
+ self.assertRaises(TypeError, fn, 1, a=2)
+ self.assertEqual(fn(1, b=2), (1, (), True))
+ self.assertEqual(fn(1, 2, 3, 4), (1, (2, 3, 4), False))
+ self.assertEqual(fn(1, 2, 3, 4, b=5), (1, (2, 3, 4), True))
+ self.assertEqual(fn(a=1), (1, (), False))
+ self.assertEqual(fn(a=1, b=2), (1, (), True))
+
+ def test_vararg_with_default2(self):
+ fn = ac_tester.vararg_with_default2
+ self.assertRaises(TypeError, fn)
+ self.assertRaises(TypeError, fn, 1, a=2)
+ self.assertEqual(fn(1, b=2), (1, (), 2, None))
+ self.assertEqual(fn(1, b=2, c=3), (1, (), 2, 3))
+ self.assertEqual(fn(1, 2, 3), (1, (2, 3), None, None))
+ self.assertEqual(fn(1, 2, 3, b=4), (1, (2, 3), 4, None))
+ self.assertEqual(fn(1, 2, 3, b=4, c=5), (1, (2, 3), 4, 5))
+ self.assertEqual(fn(a=1), (1, (), None, None))
+ self.assertEqual(fn(a=1, b=2), (1, (), 2, None))
+ self.assertEqual(fn(a=1, b=2, c=3), (1, (), 2, 3))
def test_vararg_with_only_defaults(self):
self.assertEqual(ac_tester.vararg_with_only_defaults(), ((), None))
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 290b3c6..8baa415 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -579,6 +579,55 @@ class TypeVarTests(BaseTestCase):
self.assertEqual(T.__name__, "T")
self.assertEqual(T.__constraints__, ())
self.assertIs(T.__bound__, None)
+ self.assertIs(T.__default__, typing.NoDefault)
+ self.assertIs(T.__covariant__, False)
+ self.assertIs(T.__contravariant__, False)
+ self.assertIs(T.__infer_variance__, False)
+
+ T = TypeVar(name="T", bound=type)
+ self.assertEqual(T.__name__, "T")
+ self.assertEqual(T.__constraints__, ())
+ self.assertIs(T.__bound__, type)
+ self.assertIs(T.__default__, typing.NoDefault)
+ self.assertIs(T.__covariant__, False)
+ self.assertIs(T.__contravariant__, False)
+ self.assertIs(T.__infer_variance__, False)
+
+ T = TypeVar(name="T", default=())
+ self.assertEqual(T.__name__, "T")
+ self.assertEqual(T.__constraints__, ())
+ self.assertIs(T.__bound__, None)
+ self.assertIs(T.__default__, ())
+ self.assertIs(T.__covariant__, False)
+ self.assertIs(T.__contravariant__, False)
+ self.assertIs(T.__infer_variance__, False)
+
+ T = TypeVar(name="T", covariant=True)
+ self.assertEqual(T.__name__, "T")
+ self.assertEqual(T.__constraints__, ())
+ self.assertIs(T.__bound__, None)
+ self.assertIs(T.__default__, typing.NoDefault)
+ self.assertIs(T.__covariant__, True)
+ self.assertIs(T.__contravariant__, False)
+ self.assertIs(T.__infer_variance__, False)
+
+ T = TypeVar(name="T", contravariant=True)
+ self.assertEqual(T.__name__, "T")
+ self.assertEqual(T.__constraints__, ())
+ self.assertIs(T.__bound__, None)
+ self.assertIs(T.__default__, typing.NoDefault)
+ self.assertIs(T.__covariant__, False)
+ self.assertIs(T.__contravariant__, True)
+ self.assertIs(T.__infer_variance__, False)
+
+ T = TypeVar(name="T", infer_variance=True)
+ self.assertEqual(T.__name__, "T")
+ self.assertEqual(T.__constraints__, ())
+ self.assertIs(T.__bound__, None)
+ self.assertIs(T.__default__, typing.NoDefault)
+ self.assertIs(T.__covariant__, False)
+ self.assertIs(T.__contravariant__, False)
+ self.assertIs(T.__infer_variance__, True)
class TypeParameterDefaultsTests(BaseTestCase):