blob: 55b99d21da08ce9d35ec2682cf971bc67ae6ef56 [file]
# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
# For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE
# Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt
import pytest
from astroid import bases, builder, nodes
from astroid.exceptions import InferenceError
def test_infer_typevar() -> None:
"""
Regression test for: https://github.com/pylint-dev/pylint/issues/8802
Test that an inferred `typing.TypeVar()` call produces a `nodes.ClassDef`
node.
"""
call_node = builder.extract_node("""
from typing import TypeVar
TypeVar('My.Type')
""")
with pytest.raises(InferenceError):
call_node.inferred()
class TestTypingAlias:
def test_infer_typing_alias(self) -> None:
"""
Test that _alias() calls can be inferred.
"""
node = builder.extract_node("""
from typing import _alias
x = _alias(int, float)
""")
assert isinstance(node, nodes.Assign)
assert isinstance(node.value, nodes.Call)
inferred = next(node.value.infer())
assert isinstance(inferred, nodes.ClassDef)
assert len(inferred.bases) == 1
assert inferred.bases[0].name == "int"
@pytest.mark.parametrize(
"alias_args",
[
"", # two missing arguments
"int", # one missing argument
"int, float, tuple", # one additional argument
],
)
def test_infer_typing_alias_incorrect_number_of_arguments(
self, alias_args: str
) -> None:
"""
Regression test for: https://github.com/pylint-dev/astroid/issues/2513
Test that _alias() calls with the incorrect number of arguments can be inferred.
"""
node = builder.extract_node(f"""
from typing import _alias
x = _alias({alias_args})
""")
assert isinstance(node, nodes.Assign)
assert isinstance(node.value, nodes.Call)
inferred = next(node.value.infer())
assert isinstance(inferred, bases.Instance)
assert inferred.name == "_SpecialGenericAlias"
class TestSpecialAlias:
@pytest.mark.parametrize(
"code",
[
"_CallableType()",
"_TupleType()",
],
)
def test_special_alias_no_crash_on_empty_args(self, code: str) -> None:
"""
Regression test for: https://github.com/pylint-dev/astroid/issues/2772
Test that _CallableType() and _TupleType() calls with no arguments
do not cause an IndexError.
"""
# Should not raise IndexError
module = builder.parse(code)
assert isinstance(module, nodes.Module)