blob: 57487a60acaca75942ea587ea6cd2d0f82cc02bb [file] [log] [blame]
-- Test cases for parser errors. Each test case consists of two sections.
-- The first section contains [case NAME] followed by the input code, while
-- the second section contains [out] followed by the output from the parser.
--
-- The input file name in errors is "file".
--
-- Comments starting with "--" in this file will be ignored, except for lines
-- starting with "----" that are not ignored. The first two dashes of these
-- lines are interpreted as escapes and removed.
[case testInvalidFunction]
def f()
pass
[out]
file:1: error: invalid syntax
[case testUnexpectedIndent]
1
2
[out]
file:2: error: unexpected indent
[case testInconsistentIndent]
if x:
1
1
[out]
file:3: error: unexpected indent
[case testInconsistentIndent2]
if x:
1
1
[out]
file:3: error: unindent does not match any outer indentation level
[case testInvalidBinaryOp]
1>
a*
a+1*
[out]
file:1: error: invalid syntax
[case testDoubleStar]
**a
[out]
file:1: error: invalid syntax
[case testMissingSuperClass]
class A(:
pass
[out]
file:1: error: invalid syntax
[case testUnexpectedEof]
if 1:
[out]
file:1: error: unexpected EOF while parsing
[case testInvalidKeywordArguments1]
f(x=y, z)
[out]
file:1: error: positional argument follows keyword argument
[case testInvalidKeywordArguments2]
f(**x, y)
[out]
file:1: error: positional argument follows keyword argument unpacking
[case testInvalidBareAsteriskAndVarArgs2]
def f(*x: A, *) -> None: pass
[out]
file:1: error: invalid syntax
[case testInvalidBareAsteriskAndVarArgs3]
def f(*, *x: A) -> None: pass
[out]
file:1: error: invalid syntax
[case testInvalidBareAsteriskAndVarArgs4]
def f(*, **x: A) -> None: pass
[out]
file:1: error: named arguments must follow bare *
[case testInvalidBareAsterisk1]
def f(*) -> None: pass
[out]
file:1: error: named arguments must follow bare *
[case testInvalidBareAsterisk2]
def f(x, *) -> None: pass
[out]
file:1: error: named arguments must follow bare *
[case testInvalidFuncDefArgs1]
def f(x = y, x): pass
[out]
file:1: error: non-default argument follows default argument
[case testInvalidFuncDefArgs3]
def f(**x, y):
pass
[out]
file:1: error: invalid syntax
[case testInvalidFuncDefArgs4]
def f(**x, y=x):
pass
[out]
file:1: error: invalid syntax
[case testInvalidTypeComment]
0
x = 0 # type: A A
[out]
file:2: error: syntax error in type comment 'A A'
[case testInvalidTypeComment2]
0
x = 0 # type: A[
[out]
file:2: error: syntax error in type comment 'A['
[case testInvalidTypeComment3]
0
x = 0 # type:
[out]
file:2: error: syntax error in type comment ''
[case testInvalidTypeComment4]
0
x = 0 # type: *
[out]
file:2: error: syntax error in type comment '*'
[case testInvalidTypeComment5]
0
x = 0 # type:# some comment
[out]
file:2: error: syntax error in type comment ''
[case testInvalidTypeComment6]
0
x = 0 # type: *# comment #6
[out]
file:2: error: syntax error in type comment '*'
[case testInvalidTypeComment7]
0
x = 0 # type: A B #comment #7
[out]
file:2: error: syntax error in type comment 'A B'
[case testInvalidSignatureInComment1]
def f(): # type: x
pass
[out]
file:1: error: syntax error in type comment 'x'
file:1: note: Suggestion: wrap argument types in parentheses
[case testInvalidSignatureInComment2]
def f(): # type:
pass
[out]
file:1: error: syntax error in type comment ''
[case testInvalidSignatureInComment3]
def f(): # type: (
pass
[out]
file:1: error: syntax error in type comment '('
[case testInvalidSignatureInComment4]
def f(): # type: (.
pass
[out]
file:1: error: syntax error in type comment '(.'
[case testInvalidSignatureInComment5]
def f(): # type: (x
pass
[out]
file:1: error: syntax error in type comment '(x'
[case testInvalidSignatureInComment6]
def f(): # type: (x)
pass
[out]
file:1: error: syntax error in type comment '(x)'
[case testInvalidSignatureInComment7]
def f(): # type: (x) -
pass
[out]
file:1: error: syntax error in type comment '(x) -'
[case testInvalidSignatureInComment8]
def f(): # type: (x) ->
pass
[out]
file:1: error: syntax error in type comment '(x) ->'
[case testInvalidSignatureInComment9]
def f(): # type: (x) -> .
pass
[out]
file:1: error: syntax error in type comment '(x) -> .'
[case testInvalidSignatureInComment10]
def f(): # type: (x) -> x x
pass
[out]
file:1: error: syntax error in type comment '(x) -> x x'
[case testInvalidSignatureInComment11]
def f(): # type: # abc comment
pass
[out]
file:1: error: syntax error in type comment ''
[case testInvalidSignatureInComment12]
def f(): # type: (x) -> x x # comment #2
pass
[out]
file:1: error: syntax error in type comment '(x) -> x x'
[case testDuplicateSignatures1]
def f() -> None: # type: () -> None
pass
def f(): # type: () -> None
pass
[out]
file:1: error: Function has duplicate type signatures
[case testDuplicateSignatures2]
def f(x, y: Z): # type: (x, y) -> z
pass
[out]
file:1: error: Function has duplicate type signatures
[case testTooManyTypes]
def f(x, y): # type: (X, Y, Z) -> z
pass
[out]
file:1: error: Type signature has too many arguments
[case testTooFewTypes]
def f(x, y): # type: (X) -> z
pass
[out]
file:1: error: Type signature has too few arguments
[case testCommentFunctionAnnotationVarArgMispatch-skip]
# see mypy issue #1997
def f(x): # type: (*X) -> Y
pass
def g(*x): # type: (X) -> Y
pass
[out]
file:1: error: Inconsistent use of '*' in function signature
file:3: error: Inconsistent use of '*' in function signature
[case testCommentFunctionAnnotationVarArgMispatch2-skip]
# see mypy issue #1997
def f(*x, **y): # type: (**X, *Y) -> Z
pass
def g(*x, **y): # type: (*X, *Y) -> Z
pass
[out]
file:1: error: Inconsistent use of '*' in function signature
file:3: error: syntax error in type comment
file:3: error: Inconsistent use of '*' in function signature
file:3: error: Inconsistent use of '**' in function signature
[case testPrintStatementInPython3-skip]
print 1
[out]
file:1: error: Missing parentheses in call to 'print'
[case testInvalidConditionInConditionalExpression]
1 if 2, 3 else 4
[out]
file:1: error: invalid syntax
[case testInvalidConditionInConditionalExpression2]
1 if x for y in z else 4
[out]
file:1: error: invalid syntax
[case testInvalidConditionInConditionalExpression2]
1 if x else for y in z
[out]
file:1: error: invalid syntax
[case testYieldFromNotRightParameter]
def f():
yield from
[out]
file:2: error: invalid syntax
[case testYieldFromAfterReturn]
def f():
return yield from h()
[out]
file:2: error: invalid syntax
[case testImportDotModule]
import .x
[out]
file:1: error: invalid syntax
[case testImportDot]
import .
[out]
file:1: error: invalid syntax
[case testInvalidFunctionName]
def while(): pass
[out]
file:1: error: invalid syntax
[case testInvalidEllipsis1]
...0
..._
...a
[out]
file:1: error: invalid syntax
[case testBlockStatementInSingleLineIf]
if 1: if 2: pass
[out]
file:1: error: invalid syntax
[case testBlockStatementInSingleLineIf2]
if 1: while 2: pass
[out]
file:1: error: invalid syntax
[case testBlockStatementInSingleLineIf3]
if 1: for x in y: pass
[out]
file:1: error: invalid syntax
[case testUnexpectedEllipsis]
a = a...
[out]
file:1: error: invalid syntax
[case testParseErrorBeforeUnicodeLiteral]
x u'y'
[out]
file:1: error: invalid syntax
[case testParseErrorInExtendedSlicing]
x[:,
[out]
file:1: error: unexpected EOF while parsing
[case testParseErrorInExtendedSlicing2]
x[:,::
[out]
file:1: error: unexpected EOF while parsing
[case testParseErrorInExtendedSlicing3]
x[:,:
[out]
file:1: error: unexpected EOF while parsing
[case testInvalidEncoding]
# foo
# coding: uft-8
[out]
file:0: error: unknown encoding: uft-8
[case testInvalidEncoding2]
# coding=Uft.8
[out]
file:0: error: unknown encoding: Uft.8
[case testInvalidEncoding3]
#!/usr/bin python
# vim: set fileencoding=uft8 :
[out]
file:0: error: unknown encoding: uft8
[case testDoubleEncoding]
# coding: uft8
# coding: utf8
# The first coding cookie should be used and fail.
[out]
file:0: error: unknown encoding: uft8
[case testDoubleEncoding2]
# Again the first cookie should be used and fail.
# coding: uft8
# coding: utf8
[out]
file:0: error: unknown encoding: uft8
[case testLongLiteralInPython3]
2L
0x2L
[out]
file:1: error: invalid syntax
[case testPython2LegacyInequalityInPython3]
1 <> 2
[out]
file:1: error: invalid syntax
[case testLambdaInListComprehensionInPython3]
([ 0 for x in 1, 2 if 3 ])
[out]
file:1: error: invalid syntax
[case testTupleArgListInPython3]
def f(x, (y, z)): pass
[out]
file:1: error: invalid syntax
[case testBackquoteInPython3]
`1 + 2`
[out]
file:1: error: invalid syntax
[case testSmartQuotes]
foo = bar
[out]
file:1: error: invalid character in identifier
[case testExceptCommaInPython3]
try:
pass
except KeyError, IndexError:
pass
[out]
file:3: error: invalid syntax