8000 gh-103746: Test `types.UnionType` and `Literal` types together (GH-10… · miss-islington/cpython@29cdc51 · GitHub
[go: up one dir, main page]

Skip to content

Commit 29cdc51

Browse files
sobolevnmiss-islington
authored andcommitted
pythongh-103746: Test types.UnionType and Literal types together (pythonGH-103747)
(cherry picked from commit 3d29eda) Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
1 parent 25406e5 commit 29cdc51

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

Lib/test/test_types.py

Lines changed: 29 additions & 0 deletions
< 8000 td data-grid-cell-id="diff-d5154ccf7a97612e4a8b06a6f0f48f15554e426e72e698f246d17d3dd8e3a75a-927-937-0" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-additionNum-bgColor, var(--diffBlob-addition-bgColor-num));text-align:center" tabindex="-1" valign="top" class="focusable-grid-cell diff-line-number position-relative left-side">
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,35 @@ def test_or_type_operator_with_SpecialForm(self):
925925
assert typing.Optional[int] | str == typing.Union[int, str, None]
926926
assert typing.Union[int, bool] | str == typing.Union[int, bool, str]
927927

928+
def test_or_type_operator_with_Literal(self):
929+
Literal = typing.Literal
930+
self.assertEqual((Literal[1] | Literal[2]).__args__,
931+
(Literal[1], Literal[2]))
932+
933+
self.assertEqual((Literal[0] | Literal[False]).__args__,
934+
(Literal[0], Literal[False]))
935+
self.assertEqual((Literal[1] | Literal[True]).__args__,
936+
(Literal[1], Literal[True]))
937+
938+
self.assertEqual(Literal[1] | Literal[1], Literal[1])
939+
self.assertEqual(Literal['a'] | Literal['a'], Literal['a'])
940+
941+
import enum
942+
class Ints(enum.IntEnum):
943+
A = 0
944+
B = 1
945+
946+
self.assertEqual(Literal[Ints.A] | Literal[Ints.A], Literal[Ints.A])
947+
self.assertEqual(Literal[Ints.B] | Literal[Ints.B], Literal[Ints.B])
948+
949+
self.assertEqual((Literal[Ints.B] | Literal[Ints.A]).__args__,
950+
(Literal[Ints.B], Literal[Ints.A]))
951+
952+
self.assertEqual((Literal[0] | Literal[Ints.A]).__args__,
953+
(Literal[0], Literal[Ints.A]))
954+
self.assertEqual((Literal[1] | Literal[Ints.B]).__args__,
955+
(Literal[1], Literal[Ints.B]))
956+
928957
def test_or_type_repr(self):
929958
assert repr(int | str) == "int | str"
930959
assert repr((int | str) | list) == "int | str | list"

Lib/test/test_typing.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1800,6 +1800,11 @@ class Ints(enum.IntEnum):
18001800
A = 0
18011801
B = 1
18021802

1803+
self.assertEqual(Union[Literal[Ints.A], Literal[Ints.A]],
1804+
Literal[Ints.A])
1805+
self.assertEqual(Union[Literal[Ints.B], Literal[Ints.B]],
1806+
Literal[Ints.B])
1807+
18031808
self.assertEqual(Union[Literal[Ints.A], Literal[Ints.B]].__args__,
18041809
(Literal[Ints.A], Literal[Ints.B]))
18051810

0 commit comments

Comments
 (0)
0