1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
#
# pyre-strict
from libcst.codemod import CodemodTest
from libcst.codemod.commands.convert_union_to_or import ConvertUnionToOrCommand
class TestConvertUnionToOrCommand(CodemodTest):
TRANSFORM = ConvertUnionToOrCommand
def test_simple_union(self) -> None:
before = """
from typing import Union
x: Union[int, str]
"""
after = """
x: int | str
"""
self.assertCodemod(before, after)
def test_nested_union(self) -> None:
before = """
from typing import Union
x: Union[int, Union[str, float]]
"""
after = """
x: int | str | float
"""
self.assertCodemod(before, after)
def test_single_type_union(self) -> None:
before = """
from typing import Union
x: Union[int]
"""
after = """
x: int
"""
self.assertCodemod(before, after)
def test_union_with_alias(self) -> None:
before = """
import typing as t
x: t.Union[int, str]
"""
after = """
import typing as t
x: int | str
"""
self.assertCodemod(before, after)
def test_union_with_unused_import(self) -> None:
before = """
from typing import Union, List
x: Union[int, str]
"""
after = """
from typing import List
x: int | str
"""
self.assertCodemod(before, after)
def test_union_no_import(self) -> None:
before = """
x: Union[int, str]
"""
after = """
x: Union[int, str]
"""
self.assertCodemod(before, after)
def test_union_in_function(self) -> None:
before = """
from typing import Union
def foo(x: Union[int, str]) -> Union[float, None]:
...
"""
after = """
def foo(x: int | str) -> float | None:
...
"""
self.assertCodemod(before, after)
|