From 3d29edaf0a5f2e12e7f72552f602c761ddaf0d13 Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Mon, 24 Apr 2023 19:55:16 +0300 Subject: gh-103746: Test `types.UnionType` and `Literal` types together (#103747) --- Lib/test/test_types.py | 29 +++++++++++++++++++++++++++++ Lib/test/test_typing.py | 5 +++++ 2 files changed, 34 insertions(+) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 9fe5812..8954810 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -925,6 +925,35 @@ class UnionTests(unittest.TestCase): assert typing.Optional[int] | str == typing.Union[int, str, None] assert typing.Union[int, bool] | str == typing.Union[int, bool, str] + def test_or_type_operator_with_Literal(self): + Literal = typing.Literal + self.assertEqual((Literal[1] | Literal[2]).__args__, + (Literal[1], Literal[2])) + + self.assertEqual((Literal[0] | Literal[False]).__args__, + (Literal[0], Literal[False])) + self.assertEqual((Literal[1] | Literal[True]).__args__, + (Literal[1], Literal[True])) + + self.assertEqual(Literal[1] | Literal[1], Literal[1]) + self.assertEqual(Literal['a'] | Literal['a'], Literal['a']) + + import enum + class Ints(enum.IntEnum): + A = 0 + B = 1 + + self.assertEqual(Literal[Ints.A] | Literal[Ints.A], Literal[Ints.A]) + self.assertEqual(Literal[Ints.B] | Literal[Ints.B], Literal[Ints.B]) + + self.assertEqual((Literal[Ints.B] | Literal[Ints.A]).__args__, + (Literal[Ints.B], Literal[Ints.A])) + + self.assertEqual((Literal[0] | Literal[Ints.A]).__args__, + (Literal[0], Literal[Ints.A])) + self.assertEqual((Literal[1] | Literal[Ints.B]).__args__, + (Literal[1], Literal[Ints.B])) + def test_or_type_repr(self): assert repr(int | str) == "int | str" assert repr((int | str) | list) == "int | str | list" diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index b78ce1e..f36bb95 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -1805,6 +1805,11 @@ class UnionTests(BaseTestCase): A = 0 B = 1 + self.assertEqual(Union[Literal[Ints.A], Literal[Ints.A]], + Literal[Ints.A]) + self.assertEqual(Union[Literal[Ints.B], Literal[Ints.B]], + Literal[Ints.B]) + self.assertEqual(Union[Literal[Ints.A], Literal[Ints.B]].__args__, (Literal[Ints.A], Literal[Ints.B])) -- cgit v0.12