4
4
5
5
import pytest
6
6
7
- from astroid import builder
7
+ from astroid import bases , builder , nodes
8
8
from astroid .exceptions import InferenceError
9
9
10
10
@@ -23,3 +23,50 @@ def test_infer_typevar() -> None:
23
23
)
24
24
with pytest .raises (InferenceError ):
25
25
call_node .inferred ()
26
+
27
+
28
+ class TestTypingAlias :
29
+ def test_infer_typing_alias (self ) -> None :
30
+ """
31
+ Test that _alias() calls can be inferred.
32
+ """
33
+ node = builder .extract_node (
34
+ """
35
+ from typing import _alias
36
+ x = _alias(int, float)
37
+ """
38
+ )
39
+ assert isinstance (node , nodes .Assign )
40
+ assert isinstance (node .value , nodes .Call )
41
+ inferred = next (node .value .infer ())
42
+ assert isinstance (inferred , nodes .ClassDef )
43
+ assert len (inferred .bases ) == 1
44
+ assert inferred .bases [0 ].name == "int"
45
+
46
+ @pytest .mark .parametrize (
47
+ "alias_args" ,
48
+ [
49
+ "" , # two missing arguments
50
+ "int" , # one missing argument
51
+ "int, float, tuple" , # one additional argument
52
+ ],
53
+ )
54
+ def test_infer_typing_alias_incorrect_number_of_arguments (
55
+ self , alias_args : str
56
+ ) -> None :
57
+ """
58
+ Regression test for: https://github.com/pylint-dev/astroid/issues/2513
59
+
60
+ Test that _alias() calls with the incorrect number of arguments can be inferred.
61
+ """
62
+ node = builder .extract_node (
63
+ f"""
64
+ from typing import _alias
65
+ x = _alias({ alias_args } )
66
+ """
67
+ )
68
+ assert isinstance (node , nodes .Assign )
69
+ assert isinstance (node .value , nodes .Call )
70
+ inferred = next (node .value .infer ())
71
+ assert isinstance (inferred , bases .Instance )
72
+ assert inferred .name == "_SpecialGenericAlias"
0 commit comments