From 29cdc516b8579950473f03be23e2906ede44f82f Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Mon, 24 Apr 2023 19:55:16 +0300 Subject: [PATCH] gh-103746: Test `types.UnionType` and `Literal` types together (GH-103747) (cherry picked from commit 3d29edaf0a5f2e12e7f72552f602c761ddaf0d13) Co-authored-by: Nikita Sobolev --- 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 8556ca35ca06c1..fbd6a1c3357544 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -925,6 +925,35 @@ def test_or_type_operator_with_SpecialForm(self): 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 5eb6d28d78c860..79fba267b4bcf2 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -1800,6 +1800,11 @@ class Ints(enum.IntEnum): 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]))