8000 [3.11] gh-102721: Improve coverage of `_collections_abc._CallableGene… · python/cpython@045c8a1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 045c8a1

Browse files
authored
[3.11] gh-102721: Improve coverage of _collections_abc._CallableGenericAlias (GH-102788)
This is a backport of #102722 without the `typing.py` changes. Automerge-Triggered-By: GH:AlexWaygood
1 parent f967aee commit 045c8a1

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

Lib/test/test_typing.py

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1916,14 +1916,29 @@ def test_weakref(self):
19161916
self.assertEqual(weakref.ref(alias)(), alias)
19171917

19181918
def test_pickle(self):
1919+
global T_pickle, P_pickle, TS_pickle # needed for pickling
19191920
Callable = self.Callable
1920-
alias = Callable[[int, str], float]
1921-
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
1922-
s = pickle.dumps(alias, proto)
1923-
loaded = pickle.loads(s)
1924-
self.assertEqual(alias.__origin__, loaded.__origin__)
1925-
self.assertEqual(alias.__args__, loaded.__args__)
1926-
self.assertEqual(alias.__parameters__, loaded.__parameters__)
1921+
T_pickle = TypeVar('T_pickle')
1922+
P_pickle = ParamSpec('P_pickle')
1923+
TS_pickle = TypeVarTuple('TS_pickle')
1924+
1925+
samples = [
1926+
Callable[[int, str], float],
1927+
Callable[P_pickle, int],
1928+
Callable[P_pickle, T_pickle],
1929+
Callable[Concatenate[int, P_pickle], int],
1930+
Callable[Concatenate[*TS_pickle, P_pickle], int],
1931+
]
1932+
for alias in samples:
1933+
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
1934+
with self.subTest(alias=alias, proto=proto):
1935+
s = pickle.dumps(alias, proto)
1936+
loaded = pickle.loads(s)
1937+
self.assertEqual(alias.__origin__, loaded.__origin__)
1938+
self.assertEqual(alias.__args__, loaded.__args__)
1939+
self.assertEqual(alias.__parameters__, loaded.__parameters__)
1940+
1941+
del T_pickle, P_pickle, TS_pickle # cleaning up global state
19271942

19281943
def test_var_substitution(self):
19291944
Callable = self.Callable
@@ -1949,6 +1964,16 @@ def test_var_substitution(self):
19491964
self.assertEqual(C5[int, str, float],
19501965
Callable[[typing.List[int], tuple[str, int], float], int])
19511966

1967+
def test_type_subst_error(self):
1968+
Callable = self.Callable
1969+
P = ParamSpec('P')
1970+
T = TypeVar('T')
1971+
1972+
pat = "Expected a list of types, an ellipsis, ParamSpec, or Concatenate."
1973+
1974+
with self.assertRaisesRegex(TypeError, pat):
1975+
Callable[P, T][0, int]
1976+
19521977
def test_type_erasure(self):
19531978
Callable = self.Callable
19541979
class C1(Callable):

0 commit comments

Comments
 (0)
0