(self)
| 2514 | self.assertEqual(a().__orig_class__, C1[[int], T]) |
| 2515 | |
| 2516 | def test_paramspec(self): |
| 2517 | Callable = self.Callable |
| 2518 | fullname = f"{Callable.__module__}.Callable" |
| 2519 | P = ParamSpec('P') |
| 2520 | P2 = ParamSpec('P2') |
| 2521 | C1 = Callable[P, T] |
| 2522 | # substitution |
| 2523 | self.assertEqual(C1[[int], str], Callable[[int], str]) |
| 2524 | self.assertEqual(C1[[int, str], str], Callable[[int, str], str]) |
| 2525 | self.assertEqual(C1[[], str], Callable[[], str]) |
| 2526 | self.assertEqual(C1[..., str], Callable[..., str]) |
| 2527 | self.assertEqual(C1[P2, str], Callable[P2, str]) |
| 2528 | self.assertEqual(C1[Concatenate[int, P2], str], |
| 2529 | Callable[Concatenate[int, P2], str]) |
| 2530 | self.assertEqual(repr(C1), f"{fullname}[~P, ~T]") |
| 2531 | self.assertEqual(repr(C1[[int, str], str]), f"{fullname}[[int, str], str]") |
| 2532 | with self.assertRaises(TypeError): |
| 2533 | C1[int, str] |
| 2534 | |
| 2535 | C2 = Callable[P, int] |
| 2536 | self.assertEqual(C2[[int]], Callable[[int], int]) |
| 2537 | self.assertEqual(C2[[int, str]], Callable[[int, str], int]) |
| 2538 | self.assertEqual(C2[[]], Callable[[], int]) |
| 2539 | self.assertEqual(C2[...], Callable[..., int]) |
| 2540 | self.assertEqual(C2[P2], Callable[P2, int]) |
| 2541 | self.assertEqual(C2[Concatenate[int, P2]], |
| 2542 | Callable[Concatenate[int, P2], int]) |
| 2543 | # special case in PEP 612 where |
| 2544 | # X[int, str, float] == X[[int, str, float]] |
| 2545 | self.assertEqual(C2[int], Callable[[int], int]) |
| 2546 | self.assertEqual(C2[int, str], Callable[[int, str], int]) |
| 2547 | self.assertEqual(repr(C2), f"{fullname}[~P, int]") |
| 2548 | self.assertEqual(repr(C2[int, str]), f"{fullname}[[int, str], int]") |
| 2549 | |
| 2550 | def test_concatenate(self): |
| 2551 | Callable = self.Callable |
nothing calls this directly
no test coverage detected