[Python-checkins] [3.10] gh-102721: Improve coverage of `_collections_abc._CallableGenericAlias` (GH-102790)
miss-islington
webhook-mailer at python.org
Fri Mar 17 16:12:05 EDT 2023
https://github.com/python/cpython/commit/e732a859340353e982c69a80b753830756ee85bf
commit: e732a859340353e982c69a80b753830756ee85bf
branch: 3.10
author: Nikita Sobolev <mail at sobolevn.me>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2023-03-17T13:11:58-07:00
summary:
[3.10] gh-102721: Improve coverage of `_collections_abc._CallableGenericAlias` (GH-102790)
This is a manual backport of https://github.com/python/cpython/pull/102722 but without `typing.py` changes and without `TypeVarTuple` case, because it was added in 3.11
Automerge-Triggered-By: GH:AlexWaygood
files:
M Lib/test/test_typing.py
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index a4d243400d17..68dfedfb6a0d 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -556,14 +556,27 @@ def test_weakref(self):
self.assertEqual(weakref.ref(alias)(), alias)
def test_pickle(self):
+ global T_pickle, P_pickle # needed for pickling
Callable = self.Callable
- alias = Callable[[int, str], float]
- for proto in range(pickle.HIGHEST_PROTOCOL + 1):
- s = pickle.dumps(alias, proto)
- loaded = pickle.loads(s)
- self.assertEqual(alias.__origin__, loaded.__origin__)
- self.assertEqual(alias.__args__, loaded.__args__)
- self.assertEqual(alias.__parameters__, loaded.__parameters__)
+ T_pickle = TypeVar('T_pickle')
+ P_pickle = ParamSpec('P_pickle')
+
+ samples = [
+ Callable[[int, str], float],
+ Callable[P_pickle, int],
+ Callable[P_pickle, T_pickle],
+ Callable[Concatenate[int, P_pickle], int],
+ ]
+ for alias in samples:
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+ with self.subTest(alias=alias, proto=proto):
+ s = pickle.dumps(alias, proto)
+ loaded = pickle.loads(s)
+ self.assertEqual(alias.__origin__, loaded.__origin__)
+ self.assertEqual(alias.__args__, loaded.__args__)
+ self.assertEqual(alias.__parameters__, loaded.__parameters__)
+
+ del T_pickle, P_pickle # cleaning up global state
def test_var_substitution(self):
Callable = self.Callable
@@ -590,6 +603,16 @@ def test_var_substitution(self):
self.assertEqual(C5[int, str, float],
Callable[[typing.List[int], tuple[str, int], float], int])
+ def test_type_subst_error(self):
+ Callable = self.Callable
+ P = ParamSpec('P')
+ T = TypeVar('T')
+
+ pat = "Expected a list of types, an ellipsis, ParamSpec, or Concatenate."
+
+ with self.assertRaisesRegex(TypeError, pat):
+ Callable[P, T][0, int]
+
def test_type_erasure(self):
Callable = self.Callable
class C1(Callable):
More information about the Python-checkins
mailing list