diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2021-07-22 21:57:06 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-22 21:57:06 (GMT) |
commit | 2e3744d50b6e30ea24351e55b4352dcc58fd469e (patch) | |
tree | de5f74f9bb97671319cdd7e6eab89b2975c2c4ff /Lib | |
parent | 96c4cbd96c769e92869c62ba898dd9eb670baa81 (diff) | |
download | cpython-2e3744d50b6e30ea24351e55b4352dcc58fd469e.zip cpython-2e3744d50b6e30ea24351e55b4352dcc58fd469e.tar.gz cpython-2e3744d50b6e30ea24351e55b4352dcc58fd469e.tar.bz2 |
bpo-44653: Support typing types in parameter substitution in the union type. (GH-27247)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_types.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 6ed7471..99b011e 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -772,6 +772,36 @@ class UnionTests(unittest.TestCase): self.assertEqual((list[T] | list[S])[int, T], list[int] | list[T]) self.assertEqual((list[T] | list[S])[int, int], list[int]) + def test_union_parameter_substitution(self): + def eq(actual, expected): + self.assertEqual(actual, expected) + self.assertIs(type(actual), type(expected)) + + T = typing.TypeVar('T') + S = typing.TypeVar('S') + NT = typing.NewType('NT', str) + x = int | T | bytes + + eq(x[str], int | str | bytes) + eq(x[list[int]], int | list[int] | bytes) + eq(x[typing.List], int | typing.List | bytes) + eq(x[typing.List[int]], int | typing.List[int] | bytes) + eq(x[typing.Hashable], int | typing.Hashable | bytes) + eq(x[collections.abc.Hashable], + int | collections.abc.Hashable | bytes) + eq(x[typing.Callable[[int], str]], + int | typing.Callable[[int], str] | bytes) + eq(x[collections.abc.Callable[[int], str]], + int | collections.abc.Callable[[int], str] | bytes) + eq(x[typing.Tuple[int, str]], int | typing.Tuple[int, str] | bytes) + eq(x[typing.Literal['none']], int | typing.Literal['none'] | bytes) + eq(x[str | list], int | str | list | bytes) + eq(x[typing.Union[str, list]], typing.Union[int, str, list, bytes]) + eq(x[str | int], int | str | bytes) + eq(x[typing.Union[str, int]], typing.Union[int, str, bytes]) + eq(x[NT], int | NT | bytes) + eq(x[S], int | S | bytes) + def test_union_parameter_substitution_errors(self): T = typing.TypeVar("T") x = int | T |