]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-103746: Test `types.UnionType` and `Literal` types together (GH-103747...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 24 Apr 2023 17:22:36 +0000 (10:22 -0700)
committerGitHub <noreply@github.com>
Mon, 24 Apr 2023 17:22:36 +0000 (17:22 +0000)
gh-103746: Test `types.UnionType` and `Literal` types together (GH-103747)
(cherry picked from commit 3d29edaf0a5f2e12e7f72552f602c761ddaf0d13)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Lib/test/test_types.py
Lib/test/test_typing.py

index 8556ca35ca06c125957ab3e8aa9e14f43846bece..fbd6a1c3357544da284263a82b6dbfe710963bcd 100644 (file)
@@ -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"
index 5eb6d28d78c860d8def90ed19bf719579d01e651..79fba267b4bcf2e61f780164016190e01b921add 100644 (file)
@@ -1800,6 +1800,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]))