-- Type checker test cases for Python 2.x mode.


[case testUnicode]
u = u'foo'
if int():
    u = unicode()
if int():
    s = ''
if int():
    s = u'foo' # E: Incompatible types in assignment (expression has type "unicode", variable has type "str")
if int():
    s = b'foo'
[builtins_py2 fixtures/python2.pyi]

[case testTypeVariableUnicode]
from typing import TypeVar
T = TypeVar(u'T')

[case testPrintStatement]
print ''() # E: "str" not callable
print 1, 1() # E: "int" not callable

[case testPrintStatementWithTarget]
class A:
    def write(self, s):
        # type: (str) -> None
        pass

print >>A(), ''
print >>None, ''
print >>1, '' # E: "int" has no attribute "write"
print >>(None + ''), None # E: Unsupported left operand type for + ("None")

[case testDivision]
class A:
    def __div__(self, x):
        # type: (int) -> str
        pass
s = A() / 1
if int():
    s = ''
if int():
    s = 1 # E: Incompatible types in assignment (expression has type "int", variable has type "str")

[case testStrUnicodeCompatibility]
import typing
def f(x):
    # type: (unicode) -> None
    pass
f('')
f(u'')
f(b'')
[builtins_py2 fixtures/python2.pyi]

[case testStaticMethodWithCommentSignature]
class A:
    @staticmethod
    def f(x): # type: (int) -> str
        return ''
A.f(1)
A.f('') # E: Argument 1 to "f" of "A" has incompatible type "str"; expected "int"
[builtins_py2 fixtures/staticmethod.pyi]

[case testRaiseTuple]
import typing
raise BaseException, "a"
raise BaseException, "a", None
[builtins_py2 fixtures/exception.pyi]

[case testRaiseTupleTypeFail]
import typing
x = None # type: typing.Type[typing.Tuple[typing.Any, typing.Any, typing.Any]]
raise x # E: Exception must be derived from BaseException
[builtins_py2 fixtures/exception.pyi]

[case testTryExceptWithTuple]
try:
    None
except BaseException, e:
    e() # E: "BaseException" not callable
[builtins_py2 fixtures/exception.pyi]

[case testTryExceptUnsupported]
try:
    pass
except BaseException, (e, f):  # E: Sorry, `except <expr>, <anything but a name>` is not supported
    pass
try:
    pass
except BaseException, [e, f, g]:  # E: Sorry, `except <expr>, <anything but a name>` is not supported
    pass
try:
    pass
except BaseException, e[0]:  # E: Sorry, `except <expr>, <anything but a name>` is not supported
    pass
[builtins_py2 fixtures/exception.pyi]

[case testAlternateNameSuggestions]
class Foo(object):
    def say_hello(self):
        pass
    def say_hell(self):
        pass
    def say_hullo(self):
        pass
    def say_goodbye(self):
        pass
    def go_away(self):
        pass
    def go_around(self):
        pass
    def append(self):
        pass
    def extend(self):
        pass
    def _add(self):
        pass

f = Foo()
f.say_hallo() # E: "Foo" has no attribute "say_hallo"; maybe "say_hullo", "say_hello", or "say_hell"?
f.go_array() # E: "Foo" has no attribute "go_array"; maybe "go_away"?
f.add() # E: "Foo" has no attribute "add"; maybe "append", "extend", or "_add"?

[case testTupleArgListDynamicallyTyped]
def f(x, (y, z)):
    x = y + z
f(1, 1)
f(1, (1, 2))

[case testTupleArgListAnnotated]
from typing import Tuple
def f(x, (y, z)): # type: (object, Tuple[int, str]) -> None
    x() # E
    y() # E
    z() # E
f(object(), (1, ''))
f(1, 1) # E
[builtins_py2 fixtures/tuple.pyi]
[out]
main:3: error: "object" not callable
main:4: error: "int" not callable
main:5: error: "str" not callable
main:7: error: Argument 2 to "f" has incompatible type "int"; expected "Tuple[int, str]"

[case testNestedTupleArgListAnnotated]
from typing import Tuple
def f(x, (y, (a, b))): # type: (object, Tuple[int, Tuple[str, int]]) -> None
    x() # E
    y() # E
    a() # E
    b() # E
f(object(), (1, ('', 2)))
f(1, 1) # E
[builtins fixtures/tuple.pyi]
[out]
main:3: error: "object" not callable
main:4: error: "int" not callable
main:5: error: "str" not callable
main:6: error: "int" not callable
main:8: error: Argument 2 to "f" has incompatible type "int"; expected "Tuple[int, Tuple[str, int]]"

[case testBackquoteExpr]
`1`.x # E: "str" has no attribute "x"

[case testPython2OnlyStdLibModuleWithoutStub]
import asyncio
import Bastion
[out]
main:1: error: Cannot find implementation or library stub for module named 'asyncio'
main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
main:2: error: No library stub file for standard library module 'Bastion'
main:2: note: (Stub files are from https://github.com/python/typeshed)

[case testImportFromPython2Builtin]
from __builtin__ import int as i
x = 1 # type: i
y = '' # type: i  # E: Incompatible types in assignment (expression has type "str", variable has type "int")

[case testImportPython2Builtin]
import __builtin__
x = 1 # type: __builtin__.int
y = '' # type: __builtin__.int  # E: Incompatible types in assignment (expression has type "str", variable has type "int")

[case testImportAsPython2Builtin]
import __builtin__ as bi
x = 1 # type: bi.int
y = '' # type: bi.int  # E: Incompatible types in assignment (expression has type "str", variable has type "int")

[case testImportFromPython2BuiltinOverridingDefault]
from __builtin__ import int
x = 1 # type: int
y = '' # type: int  # E: Incompatible types in assignment (expression has type "str", variable has type "int")

-- Copied from check-functions.test
[case testEllipsisWithArbitraryArgsOnBareFunctionInPython2]
def f(x, y, z): # type: (...) -> None
    pass

-- Copied from check-functions.test
[case testEllipsisWithSomethingAfterItFailsInPython2]
def f(x, y, z): # type: (..., int) -> None
    pass
[out]
main:1: error: Ellipses cannot accompany other argument types in function type signature

[case testLambdaTupleArgInPython2]
f = lambda (x, y): x + y
f((0, 0))

def g(): # type: () -> None
    pass
reveal_type(lambda (x,): g()) # N: Revealed type is 'def (Any)'
[out]

[case testLambdaTupleArgInferenceInPython2]
from typing import Callable, Tuple

def f(c):
    # type: (Callable[[Tuple[int, int]], int]) -> None
    pass
def g(c):
    # type: (Callable[[Tuple[int, int]], str]) -> None
    pass

f(lambda (x, y): y)
f(lambda (x, y): x()) # E: "int" not callable
g(lambda (x, y): y) # E: Argument 1 to "g" has incompatible type "Callable[[Tuple[int, int]], int]"; expected "Callable[[Tuple[int, int]], str]" \
    # E: Incompatible return value type (got "int", expected "str")
[out]

[case testLambdaSingletonTupleArgInPython2]
f = lambda (x,): x + 1
f((0,))
[out]

[case testLambdaNoTupleArgInPython2]
f = lambda (x): x + 1
f(0)
[out]

[case testDefTupleEdgeCasesPython2]
def f((x,)): return x
def g((x)): return x
f(0) + g(0)
[out]

[case testLambdaAsSortKeyForTuplePython2]
from typing import Any, Tuple, Callable
def bar(key):
    # type: (Callable[[Tuple[int, int]], int]) -> int
    pass
def foo():
    # type: () -> int
    return bar(key=lambda (a, b): a)
[out]

[case testImportBuiltins]

import __builtin__
__builtin__.str

[case testUnicodeAlias]
from typing import List
Alias = List[u'Foo']
class Foo: pass
[builtins_py2 fixtures/python2.pyi]

[case testExec]
exec('print 1 + 1')

[case testUnicodeDocStrings]
# flags: --python-version=2.7
__doc__ = u"unicode"

class A:
    u"unicode"

def f():
    # type: () -> None
    u"unicode"

[case testMetaclassBasics]
class M(type):
    x = 0  # type: int
    def test(cls):
        # type: () -> str
        return "test"

class A(object):
    __metaclass__ = M

reveal_type(A.x) # N: Revealed type is 'builtins.int'
reveal_type(A.test()) # N: Revealed type is 'builtins.str'

[case testImportedMetaclass]
import m

class A(object):
    __metaclass__ = m.M

reveal_type(A.x) # N: Revealed type is 'builtins.int'
reveal_type(A.test()) # N: Revealed type is 'builtins.str'
[file m.py]
class M(type):
    x = 0
    def test(cls):
        # type: () -> str
        return "test"

[case testDynamicMetaclass]
class C(object):
    __metaclass__ = int()  # E: Dynamic metaclass not supported for 'C'

[case testMetaclassDefinedAsClass]
class C(object):
    class __metaclass__: pass # E: Metaclasses defined as inner classes are not supported

[case testErrorInMetaclass]
x = 0
class A(object):
    __metaclass__ = m.M  # E: Name 'm' is not defined
class B(object):
    __metaclass__ = M  # E: Name 'M' is not defined

[case testMetaclassAndSkippedImportInPython2]
# flags: --ignore-missing-imports
from missing import M
class A(object):
    __metaclass__ = M
    y = 0
reveal_type(A.y) # N: Revealed type is 'builtins.int'
A.x # E: "Type[A]" has no attribute "x"

[case testAnyAsBaseOfMetaclass]
from typing import Any, Type
M = None  # type: Any
class MM(M): pass
class A(object):
    __metaclass__ = MM

[case testSelfTypeNotSelfType2]
class A:
    def g(self):
        # type: (None) -> None
        pass
[out]
main:2: error: Invalid type for self, or extra argument type in function annotation
main:2: note: (Hint: typically annotations omit the type for self)

[case testSuper]
class A:
    def f(self): # type: () -> None
        pass
class B(A):
    def g(self): # type: () -> None
        super(B, self).f()
        super().f() # E: Too few arguments for "super"

[case testPartialTypeComments_python2]
def foo(
    a,  # type: str
    b,
    args=None,
):
    # type: (...) -> None
    pass

[case testNoneHasNoBoolInPython2]
none = None
b = none.__bool__() # E: "None" has no attribute "__bool__"

[case testDictWithoutTypeCommentInPython2]
# flags: --py2
d = dict() # E: Need type comment for 'd' (hint: "d = ...  \# type: Dict[<type>, <type>]")
[builtins_py2 fixtures/floatdict_python2.pyi]
