summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_genericalias.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_genericalias.py')
-rw-r--r--Lib/test/test_genericalias.py90
1 files changed, 0 insertions, 90 deletions
diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py
index 9f92739..2e70e75 100644
--- a/Lib/test/test_genericalias.py
+++ b/Lib/test/test_genericalias.py
@@ -317,96 +317,6 @@ class BaseTest(unittest.TestCase):
with self.assertRaises(TypeError):
Bad(list, int, bad=int)
- def test_abc_callable(self):
- # A separate test is needed for Callable since it uses a subclass of
- # GenericAlias.
- alias = Callable[[int, str], float]
- with self.subTest("Testing subscription"):
- self.assertIs(alias.__origin__, Callable)
- self.assertEqual(alias.__args__, (int, str, float))
- self.assertEqual(alias.__parameters__, ())
-
- with self.subTest("Testing instance checks"):
- self.assertIsInstance(alias, GenericAlias)
-
- with self.subTest("Testing weakref"):
- self.assertEqual(ref(alias)(), alias)
-
- with self.subTest("Testing pickling"):
- s = pickle.dumps(alias)
- loaded = pickle.loads(s)
- self.assertEqual(alias.__origin__, loaded.__origin__)
- self.assertEqual(alias.__args__, loaded.__args__)
- self.assertEqual(alias.__parameters__, loaded.__parameters__)
-
- with self.subTest("Testing TypeVar substitution"):
- C1 = Callable[[int, T], T]
- C2 = Callable[[K, T], V]
- C3 = Callable[..., T]
- self.assertEqual(C1[str], Callable[[int, str], str])
- self.assertEqual(C2[int, float, str], Callable[[int, float], str])
- self.assertEqual(C3[int], Callable[..., int])
-
- # multi chaining
- C4 = C2[int, V, str]
- self.assertEqual(repr(C4).split(".")[-1], "Callable[[int, ~V], str]")
- self.assertEqual(repr(C4[dict]).split(".")[-1], "Callable[[int, dict], str]")
- self.assertEqual(C4[dict], Callable[[int, dict], str])
-
- # substitute a nested GenericAlias (both typing and the builtin
- # version)
- C5 = Callable[[typing.List[T], tuple[K, T], V], int]
- self.assertEqual(C5[int, str, float],
- Callable[[typing.List[int], tuple[str, int], float], int])
-
- with self.subTest("Testing type erasure"):
- class C1(Callable):
- def __call__(self):
- return None
- a = C1[[int], T]
- self.assertIs(a().__class__, C1)
- self.assertEqual(a().__orig_class__, C1[[int], T])
-
- # bpo-42195
- with self.subTest("Testing collections.abc.Callable's consistency "
- "with typing.Callable"):
- c1 = typing.Callable[[int, str], dict]
- c2 = Callable[[int, str], dict]
- self.assertEqual(c1.__args__, c2.__args__)
- self.assertEqual(hash(c1.__args__), hash(c2.__args__))
-
- with self.subTest("Testing ParamSpec uses"):
- P = typing.ParamSpec('P')
- C1 = Callable[P, T]
- # substitution
- self.assertEqual(C1[int, str], Callable[[int], str])
- self.assertEqual(C1[[int, str], str], Callable[[int, str], str])
- self.assertEqual(repr(C1).split(".")[-1], "Callable[~P, ~T]")
- self.assertEqual(repr(C1[int, str]).split(".")[-1], "Callable[[int], str]")
-
- C2 = Callable[P, int]
- # special case in PEP 612 where
- # X[int, str, float] == X[[int, str, float]]
- self.assertEqual(C2[int, str, float], C2[[int, str, float]])
- self.assertEqual(repr(C2).split(".")[-1], "Callable[~P, int]")
- self.assertEqual(repr(C2[int, str]).split(".")[-1], "Callable[[int, str], int]")
-
- with self.subTest("Testing Concatenate uses"):
- P = typing.ParamSpec('P')
- C1 = Callable[typing.Concatenate[int, P], int]
- self.assertEqual(repr(C1), "collections.abc.Callable"
- "[typing.Concatenate[int, ~P], int]")
-
- with self.subTest("Testing TypeErrors"):
- with self.assertRaisesRegex(TypeError, "variables left in"):
- alias[int]
- P = typing.ParamSpec('P')
- C1 = Callable[P, T]
- with self.assertRaisesRegex(TypeError, "many arguments for"):
- C1[int, str, str]
- with self.assertRaisesRegex(TypeError, "few arguments for"):
- C1[int]
-
if __name__ == "__main__":
unittest.main()