| -- 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 |