diff options
author | Yurii Karabas <1998uriyyo@gmail.com> | 2021-07-17 03:33:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-17 03:33:40 (GMT) |
commit | bf89ff96e6ba21bb52b8597b5e51e8ffc57e6589 (patch) | |
tree | 9ffa39f9f8ad5786e7dd4dccc5b69118fa66077d /Lib/test/test_typing.py | |
parent | f783428a2313a729ca8b539c5a86ff114b9ff375 (diff) | |
download | cpython-bf89ff96e6ba21bb52b8597b5e51e8ffc57e6589.zip cpython-bf89ff96e6ba21bb52b8597b5e51e8ffc57e6589.tar.gz cpython-bf89ff96e6ba21bb52b8597b5e51e8ffc57e6589.tar.bz2 |
bpo-44490: Improve typing module compatibility with types.Union (GH-27048)
Diffstat (limited to 'Lib/test/test_typing.py')
-rw-r--r-- | Lib/test/test_typing.py | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index e693883..95803d5 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -315,6 +315,8 @@ class UnionTests(BaseTestCase): self.assertEqual(repr(u), 'typing.Union[typing.List[int], int]') u = Union[list[int], dict[str, float]] self.assertEqual(repr(u), 'typing.Union[list[int], dict[str, float]]') + u = Union[int | float] + self.assertEqual(repr(u), 'typing.Union[int, float]') def test_cannot_subclass(self): with self.assertRaises(TypeError): @@ -1449,6 +1451,8 @@ class GenericTests(BaseTestCase): with self.assertRaises(TypeError): issubclass(SM1, SimpleMapping) self.assertIsInstance(SM1(), SimpleMapping) + T = TypeVar("T") + self.assertEqual(List[list[T] | float].__parameters__, (T,)) def test_generic_errors(self): T = TypeVar('T') @@ -1785,6 +1789,7 @@ class GenericTests(BaseTestCase): def test_generic_forward_ref(self): def foobar(x: List[List['CC']]): ... def foobar2(x: list[list[ForwardRef('CC')]]): ... + def foobar3(x: list[ForwardRef('CC | int')] | int): ... class CC: ... self.assertEqual( get_type_hints(foobar, globals(), locals()), @@ -1794,6 +1799,10 @@ class GenericTests(BaseTestCase): get_type_hints(foobar2, globals(), locals()), {'x': list[list[CC]]} ) + self.assertEqual( + get_type_hints(foobar3, globals(), locals()), + {'x': list[CC | int] | int} + ) T = TypeVar('T') AT = Tuple[T, ...] @@ -2467,6 +2476,12 @@ class ForwardRefTests(BaseTestCase): self.assertEqual(get_type_hints(foo, globals(), locals()), {'a': Union[T]}) + def foo(a: tuple[ForwardRef('T')] | int): + pass + + self.assertEqual(get_type_hints(foo, globals(), locals()), + {'a': tuple[T] | int}) + def test_tuple_forward(self): def foo(a: Tuple['T']): @@ -2848,7 +2863,7 @@ class GetTypeHintTests(BaseTestCase): gth(None) def test_get_type_hints_modules(self): - ann_module_type_hints = {1: 2, 'f': Tuple[int, int], 'x': int, 'y': str} + ann_module_type_hints = {1: 2, 'f': Tuple[int, int], 'x': int, 'y': str, 'u': int | float} self.assertEqual(gth(ann_module), ann_module_type_hints) self.assertEqual(gth(ann_module2), {}) self.assertEqual(gth(ann_module3), {}) @@ -4390,6 +4405,9 @@ class ParamSpecTests(BaseTestCase): self.assertNotIn(P, list[P].__parameters__) self.assertIn(T, tuple[T, P].__parameters__) + self.assertNotIn(P, (list[P] | int).__parameters__) + self.assertIn(T, (tuple[T, P] | int).__parameters__) + def test_paramspec_in_nested_generics(self): # Although ParamSpec should not be found in __parameters__ of most # generics, they probably should be found when nested in @@ -4399,8 +4417,10 @@ class ParamSpecTests(BaseTestCase): C1 = Callable[P, T] G1 = List[C1] G2 = list[C1] + G3 = list[C1] | int self.assertEqual(G1.__parameters__, (P, T)) self.assertEqual(G2.__parameters__, (P, T)) + self.assertEqual(G3.__parameters__, (P, T)) class ConcatenateTests(BaseTestCase): |