| [case testEmptyFile] |
| [out] |
| |
| [case testAssignmentAndVarDef] |
| |
| a = None # type: A |
| b = None # type: B |
| a = a |
| a = b # Fail |
| class A: pass |
| class B: pass |
| [out] |
| main:5: error: Incompatible types in assignment (expression has type "B", variable has type "A") |
| |
| [case testConstructionAndAssignment] |
| |
| x = None # type: A |
| x = A() |
| x = B() |
| class A: |
| def __init__(self): pass |
| class B: |
| def __init__(self): pass |
| [out] |
| main:4: error: Incompatible types in assignment (expression has type "B", variable has type "A") |
| |
| [case testInheritInitFromObject] |
| |
| x = None # type: A |
| x = A() |
| x = B() |
| class A(object): pass |
| class B(object): pass |
| [out] |
| main:4: error: Incompatible types in assignment (expression has type "B", variable has type "A") |
| |
| [case testImplicitInheritInitFromObject] |
| |
| x = None # type: A |
| o = None # type: object |
| x = o # E: Incompatible types in assignment (expression has type "object", variable has type "A") |
| x = A() |
| o = x |
| class A: pass |
| class B: pass |
| [out] |
| |
| [case testTooManyConstructorArgs] |
| import typing |
| object(object()) |
| [out] |
| main:2: error: Too many arguments for "object" |
| |
| [case testVarDefWithInit] |
| import typing |
| a = A() # type: A |
| b = object() # type: A |
| class A: pass |
| [out] |
| main:3: error: Incompatible types in assignment (expression has type "object", variable has type "A") |
| |
| [case testInheritanceBasedSubtyping] |
| import typing |
| x = B() # type: A |
| y = A() # type: B # Fail |
| class A: pass |
| class B(A): pass |
| [out] |
| main:3: error: Incompatible types in assignment (expression has type "A", variable has type "B") |
| |
| [case testDeclaredVariableInParentheses] |
| |
| (x) = None # type: int |
| x = '' # E: Incompatible types in assignment (expression has type "str", variable has type "int") |
| x = 1 |
| |
| |
| -- Simple functions and calling |
| -- ---------------------------- |
| |
| |
| [case testFunction] |
| import typing |
| def f(x: 'A') -> None: pass |
| f(A()) |
| f(B()) # Fail |
| class A: pass |
| class B: pass |
| [out] |
| main:4: error: Argument 1 to "f" has incompatible type "B"; expected "A" |
| |
| [case testNotCallable] |
| import typing |
| A()() |
| class A: pass |
| [out] |
| main:2: error: "A" not callable |
| |
| [case testSubtypeArgument] |
| import typing |
| def f(x: 'A', y: 'B') -> None: pass |
| f(B(), A()) # Fail |
| f(B(), B()) |
| |
| class A: pass |
| class B(A): pass |
| [out] |
| main:3: error: Argument 2 to "f" has incompatible type "A"; expected "B" |
| |
| [case testInvalidArgumentCount] |
| import typing |
| def f(x, y) -> None: pass |
| f(object()) |
| f(object(), object(), object()) |
| [out] |
| main:3: error: Too few arguments for "f" |
| main:4: error: Too many arguments for "f" |
| |
| |
| -- Locals |
| -- ------ |
| |
| |
| [case testLocalVariables] |
| |
| def f() -> None: |
| x = None # type: A |
| y = None # type: B |
| x = x |
| x = y # Fail |
| class A: pass |
| class B: pass |
| [out] |
| main:6: error: Incompatible types in assignment (expression has type "B", variable has type "A") |
| |
| [case testLocalVariableScope] |
| |
| def f() -> None: |
| x = None # type: A |
| x = A() |
| def g() -> None: |
| x = None # type: B |
| x = A() # Fail |
| class A: pass |
| class B: pass |
| [out] |
| main:7: error: Incompatible types in assignment (expression has type "A", variable has type "B") |
| |
| [case testFunctionArguments] |
| import typing |
| def f(x: 'A', y: 'B') -> None: |
| x = y # Fail |
| x = x |
| y = B() |
| class A: pass |
| class B: pass |
| [out] |
| main:3: error: Incompatible types in assignment (expression has type "B", variable has type "A") |
| |
| [case testLocalVariableInitialization] |
| import typing |
| def f() -> None: |
| a = A() # type: A |
| b = B() # type: A # Fail |
| class A: pass |
| class B: pass |
| [out] |
| main:4: error: Incompatible types in assignment (expression has type "B", variable has type "A") |
| |
| [case testVariableInitializationWithSubtype] |
| import typing |
| x = B() # type: A |
| y = A() # type: B # Fail |
| class A: pass |
| class B(A): pass |
| [out] |
| main:3: error: Incompatible types in assignment (expression has type "A", variable has type "B") |
| |
| |
| -- Misc |
| -- ---- |
| |
| |
| [case testInvalidReturn] |
| import typing |
| def f() -> 'A': |
| return B() |
| class A: pass |
| class B: pass |
| [out] |
| main:3: error: Incompatible return value type (got "B", expected "A") |
| |
| [case testTopLevelContextAndInvalidReturn] |
| import typing |
| def f() -> 'A': |
| return B() |
| a = B() # type: A |
| class A: pass |
| class B: pass |
| [out] |
| main:3: error: Incompatible return value type (got "B", expected "A") |
| main:4: error: Incompatible types in assignment (expression has type "B", variable has type "A") |
| |
| [case testEmptyReturnInAnyTypedFunction] |
| from typing import Any |
| def f() -> Any: |
| return |
| |
| [case testEmptyYieldInAnyTypedFunction] |
| from typing import Any |
| def f() -> Any: |
| yield |
| |
| [case testModule__name__] |
| import typing |
| x = __name__ # type: str |
| a = __name__ # type: A # E: Incompatible types in assignment (expression has type "str", variable has type "A") |
| class A: pass |
| [builtins fixtures/primitives.pyi] |
| |
| [case testModule__doc__] |
| import typing |
| x = __doc__ # type: str |
| a = __doc__ # type: A # E: Incompatible types in assignment (expression has type "str", variable has type "A") |
| class A: pass |
| [builtins fixtures/primitives.pyi] |
| |
| [case testModule__file__] |
| import typing |
| x = __file__ # type: str |
| a = __file__ # type: A # E: Incompatible types in assignment (expression has type "str", variable has type "A") |
| class A: pass |
| [builtins fixtures/primitives.pyi] |
| |
| [case test__package__] |
| import typing |
| x = __package__ # type: str |
| a = __file__ # type: int # E: Incompatible types in assignment (expression has type "str", variable has type "int") |
| |
| |
| -- Scoping and shadowing |
| -- --------------------- |
| |
| |
| [case testLocalVariableShadowing] |
| |
| a = None # type: A |
| a = B() # Fail |
| a = A() |
| def f() -> None: |
| a = None # type: B |
| a = A() # Fail |
| a = B() |
| a = B() # Fail |
| a = A() |
| |
| class A: pass |
| class B: pass |
| [out] |
| main:3: error: Incompatible types in assignment (expression has type "B", variable has type "A") |
| main:7: error: Incompatible types in assignment (expression has type "A", variable has type "B") |
| main:9: error: Incompatible types in assignment (expression has type "B", variable has type "A") |
| |
| [case testGlobalDefinedInBlockWithType] |
| |
| class A: pass |
| while A: |
| a = None # type: A |
| a = A() |
| a = object() # E: Incompatible types in assignment (expression has type "object", variable has type "A") |
| |
| |
| -- # type: signatures |
| -- ------------------ |
| |
| |
| [case testFunctionSignatureAsComment] |
| def f(x): # type: (int) -> str |
| return 1 |
| f('') |
| [out] |
| main:2: error: Incompatible return value type (got "int", expected "str") |
| main:3: error: Argument 1 to "f" has incompatible type "str"; expected "int" |
| |
| [case testMethodSignatureAsComment] |
| class A: |
| def f(self, x): |
| # type: (int) -> str |
| self.f('') # Fail |
| return 1 |
| A().f('') # Fail |
| [out] |
| main:4: error: Argument 1 to "f" of "A" has incompatible type "str"; expected "int" |
| main:5: error: Incompatible return value type (got "int", expected "str") |
| main:6: error: Argument 1 to "f" of "A" has incompatible type "str"; expected "int" |
| |
| [case testTrailingCommaParsing-skip] |
| x = 1 |
| x in 1, |
| if x in 1, : |
| pass |
| [out] |
| |
| [case testInitReturnTypeError] |
| class C: |
| def __init__(self): |
| # type: () -> int |
| pass |
| [out] |
| main:2: error: The return type of "__init__" must be None |