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 | |
| 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')
| -rw-r--r-- | Lib/test/ann_module.py | 2 | ||||
| -rw-r--r-- | Lib/test/test_grammar.py | 2 | ||||
| -rw-r--r-- | Lib/test/test_typing.py | 22 |
3 files changed, 24 insertions, 2 deletions
diff --git a/Lib/test/ann_module.py b/Lib/test/ann_module.py index 0567d6d..5081e6b 100644 --- a/Lib/test/ann_module.py +++ b/Lib/test/ann_module.py @@ -58,3 +58,5 @@ def dec(func): def wrapper(*args, **kwargs): return func(*args, **kwargs) return wrapper + +u: int | float diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index c0820fd..b6c4574 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -473,7 +473,7 @@ class GrammarTests(unittest.TestCase): def test_var_annot_module_semantics(self): self.assertEqual(test.__annotations__, {}) self.assertEqual(ann_module.__annotations__, - {1: 2, 'x': int, 'y': str, 'f': typing.Tuple[int, int]}) + {1: 2, 'x': int, 'y': str, 'f': typing.Tuple[int, int], 'u': int | float}) self.assertEqual(ann_module.M.__annotations__, {'123': 123, 'o': type}) self.assertEqual(ann_module2.__annotations__, {}) 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): |
