|
2 | 2 | import types
|
3 | 3 | import unittest
|
4 | 4 |
|
5 |
| -from typing import TypeAliasType |
| 5 | +from typing import Callable, TypeAliasType |
6 | 6 |
|
7 | 7 | class TypeParamsInvalidTest(unittest.TestCase):
|
8 | 8 | def test_name_collision_01(self):
|
@@ -90,13 +90,34 @@ def outer[A]():
|
90 | 90 | b = o.__parameters__[0]
|
91 | 91 | self.assertEqual(o.__type_params__, (b,))
|
92 | 92 |
|
| 93 | + def more_generic[T, *Ts, **P](): |
| 94 | + type TA[T2, *Ts2, **P2] = tuple[Callable[P, tuple[T, *Ts]], Callable[P2, tuple[T2, *Ts2]]] |
| 95 | + return TA |
| 96 | + |
| 97 | + alias = more_generic() |
| 98 | + self.assertIsInstance(alias, TypeAliasType) |
| 99 | + T2, Ts2, P2 = alias.__type_params__ |
| 100 | + self.assertEqual(alias.__parameters__, (T2, *Ts2, P2)) |
| 101 | + T, Ts, P = more_generic.__type_params__ |
| 102 | + self.assertEqual(alias.__value__, tuple[Callable[P, tuple[T, *Ts]], Callable[P2, tuple[T2, *Ts2]]]) |
| 103 | + |
93 | 104 | def test_subscripting(self):
|
94 | 105 | type NonGeneric = int
|
95 | 106 | type Generic[A] = dict[A, A]
|
| 107 | + type VeryGeneric[T, *Ts, **P] = Callable[P, tuple[T, *Ts]] |
96 | 108 |
|
97 | 109 | with self.assertRaises(TypeError):
|
98 | 110 | NonGeneric[int]
|
99 |
| - self.assertIsInstance(Generic[int], types.GenericAlias) |
| 111 | + |
| 112 | + specialized = Generic[int] |
| 113 | + self.assertIsInstance(specialized, types.GenericAlias) |
| 114 | + self.assertIs(specialized.__origin__, Generic) |
| 115 | + self.assertEqual(specialized.__args__, (int,)) |
| 116 | + |
| 117 | + specialized2 = VeryGeneric[int, str, float, [bool, range]] |
| 118 | + self.assertIsInstance(specialized2, types.GenericAlias) |
| 119 | + self.assertIs(specialized2.__origin__, VeryGeneric) |
| 120 | + self.assertEqual(specialized2.__args__, (int, str, float, [bool, range])) |
100 | 121 |
|
101 | 122 | def test_repr(self):
|
102 | 123 | type Simple = int
|
|
0 commit comments