| -- Test cases for generating fine-grained dependencies involving generics. | |
| -- | |
| -- The dependencies are used for fined-grained incremental checking. | |
| -- | |
| -- See the comment at the top of deps.test for more documentation. | |
| [case testGenericFunction] | |
| from typing import TypeVar | |
| T = TypeVar('T') | |
| class A: pass | |
| def f(x: T) -> T: | |
| y: T | |
| z: A | |
| return x | |
| [out] | |
| <m.A> -> m.A, m.f | |
| <m.T> -> <m.f>, m.f | |
| [case testGenericClass] | |
| from typing import TypeVar, Generic | |
| T = TypeVar('T') | |
| class A(Generic[T]): pass | |
| class B: pass | |
| def f() -> None: | |
| a: A[B] | |
| [out] | |
| <m.A> -> m.A, m.f | |
| <m.B> -> m.B, m.f | |
| <m.T> -> m.A | |
| [case testGenericClassWithMembers] | |
| from typing import TypeVar, Generic | |
| T = TypeVar('T') | |
| class A(Generic[T]): | |
| def g(self, a: T) -> None: | |
| self.x = a | |
| def f(self) -> T: | |
| return self.x | |
| [out] | |
| <m.A.x> -> m.A.f, m.A.g | |
| <m.A> -> m.A | |
| <m.T> -> <m.A.f>, <m.A.g>, <m.A.x>, m.A, m.A.f, m.A.g | |
| [case testGenericClassInit] | |
| from typing import TypeVar, Generic | |
| T = TypeVar('T') | |
| class A(Generic[T]): | |
| def __init__(self, a: T) -> None: | |
| self.x = a | |
| class B: pass | |
| def f() -> None: | |
| a = A(B()) | |
| [out] | |
| <m.A.__init__> -> m.f | |
| <m.A.__new__> -> m.f | |
| <m.A.x> -> m.A.__init__ | |
| <m.A> -> m.A, m.f | |
| <m.B.__init__> -> m.f | |
| <m.B.__new__> -> m.f | |
| <m.B> -> m.B, m.f | |
| <m.T> -> <m.A.__init__>, <m.A.x>, m.A, m.A.__init__ | |
| [case testGenericMethod] | |
| from typing import TypeVar | |
| T = TypeVar('T') | |
| class A: | |
| def f(self, x: T) -> T: | |
| return x | |
| [out] | |
| <m.A> -> m.A | |
| <m.T> -> <m.A.f>, m.A.f | |
| [case testGenericBaseClass] | |
| from typing import TypeVar, Generic | |
| T = TypeVar('T') | |
| class A(Generic[T]): pass | |
| class B(A[C]): pass | |
| class C: pass | |
| [out] | |
| <m.A.(abstract)> -> <m.B.__init__>, m | |
| <m.A.__init__> -> <m.B.__init__> | |
| <m.A.__new__> -> <m.B.__new__> | |
| <m.A> -> m, m.A, m.B | |
| <m.B> -> m.B | |
| <m.C> -> m, m.B, m.C | |
| <m.T> -> m.A | |
| [case testGenericBaseClass2] | |
| from typing import TypeVar, Generic | |
| T = TypeVar('T') | |
| class A(Generic[T]): pass | |
| class B(A[T]): pass | |
| [out] | |
| <m.A.(abstract)> -> <m.B.__init__>, m | |
| <m.A.__init__> -> <m.B.__init__> | |
| <m.A.__new__> -> <m.B.__new__> | |
| <m.A> -> m, m.A, m.B | |
| <m.B> -> m.B | |
| <m.T> -> m, m.A, m.B | |
| [case testTypeVarBound] | |
| from typing import TypeVar, Tuple | |
| class A: pass | |
| class B: pass | |
| T = TypeVar('T', bound=Tuple[A, B]) | |
| def f(x: T) -> T: | |
| return x | |
| [builtins fixtures/tuple.pyi] | |
| [out] | |
| <m.A> -> <m.T>, <m.f>, m, m.A, m.f | |
| <m.B> -> <m.T>, <m.f>, m, m.B, m.f | |
| <m.T> -> <m.f>, m.f | |
| [case testTypeVarBoundOperations] | |
| from typing import TypeVar, Tuple | |
| class A: | |
| def f(self) -> None: pass | |
| def __add__(self, other: int) -> int: pass | |
| T = TypeVar('T', bound=A) | |
| def f(x: T) -> None: | |
| x.f() | |
| x + 1 | |
| [out] | |
| <m.A.__add__> -> m.f | |
| <m.A.f> -> m.f | |
| <m.A> -> <m.T>, <m.f>, m, m.A, m.f | |
| <m.T> -> <m.f>, m.f | |
| [case testTypeVarValues] | |
| from typing import TypeVar | |
| class A: pass | |
| class B: pass | |
| class C: pass | |
| class D: pass | |
| T = TypeVar('T', A, B) | |
| S = TypeVar('S', C, D) | |
| def f(x: T, y: S) -> S: | |
| pass | |
| [out] | |
| <m.A> -> <m.T>, <m.f>, m, m.A, m.f | |
| <m.B> -> <m.T>, <m.f>, m, m.B, m.f | |
| <m.C> -> <m.S>, <m.f>, m, m.C, m.f | |
| <m.D> -> <m.S>, <m.f>, m, m.D, m.f | |
| <m.S> -> <m.f>, m.f | |
| <m.T> -> <m.f>, m.f | |
| [case testTypeVarValuesMethod] | |
| from typing import TypeVar, Generic | |
| class C: pass | |
| class D: pass | |
| S = TypeVar('S', C, D) | |
| class G(Generic[S]): | |
| def f(self) -> S: | |
| pass | |
| [out] | |
| <m.C> -> <m.G.f>, <m.S>, m, m.C, m.G.f | |
| <m.D> -> <m.G.f>, <m.S>, m, m.D, m.G.f | |
| <m.G> -> m.G | |
| <m.S> -> <m.G.f>, m.G, m.G.f | |
| [case testTypeVarValuesMethodAttr] | |
| from typing import TypeVar, Generic | |
| class A: | |
| x: int | |
| class B: | |
| x: int | |
| T = TypeVar('T', A, B) | |
| class G(Generic[T]): | |
| def f(self, x: T) -> None: | |
| x.x | |
| [out] | |
| <m.A.x> -> m.G.f | |
| <m.A> -> <m.G.f>, <m.T>, m, m.A, m.G.f | |
| <m.B.x> -> m.G.f | |
| <m.B> -> <m.G.f>, <m.T>, m, m.B, m.G.f | |
| <m.G> -> m.G | |
| <m.T> -> <m.G.f>, m.G, m.G.f |