summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Marek <shlomme@gmail.com>2014-07-25 16:01:49 +0200
committerTorsten Marek <shlomme@gmail.com>2014-07-25 16:01:49 +0200
commitb161c47f9d29deaaab85bc37cabd076c01885e1f (patch)
tree2b7a96c39e798c678603fb98f22a7cca47ef6bb3
parent511039b445415450929a6d23a6bff797f4502328 (diff)
downloadpylint-b161c47f9d29deaaab85bc37cabd076c01885e1f.tar.gz
Port more testcases to the new framework.
-rw-r--r--test/functional/cellvar_escaping_loop.py (renamed from test/input/func_loopvar_in_closure.py)20
-rw-r--r--test/functional/cellvar_escaping_loop.txt8
-rw-r--r--test/functional/ctor_arguments.py (renamed from test/input/func_ctor_arguments.py)29
-rw-r--r--test/functional/undefined_variable.py (renamed from test/input/func_undefined_var.py)51
-rw-r--r--test/functional/undefined_variable.txt17
-rw-r--r--test/input/func_noerror_9215_lambda_arg_as_decorator.py29
-rw-r--r--test/messages/func_ctor_arguments.txt17
-rw-r--r--test/messages/func_loopvar_in_closure.txt8
-rw-r--r--test/messages/func_undefined_var.txt14
9 files changed, 72 insertions, 121 deletions
diff --git a/test/input/func_loopvar_in_closure.py b/test/functional/cellvar_escaping_loop.py
index 3a791d3..316bc47 100644
--- a/test/input/func_loopvar_in_closure.py
+++ b/test/functional/cellvar_escaping_loop.py
@@ -1,8 +1,5 @@
"""Tests for loopvar-in-closure."""
-__revision__ = 0
-
-
def good_case():
"""No problems here."""
lst = []
@@ -18,7 +15,7 @@ def good_case2():
def good_case3():
"""No problems here."""
lst = []
- for i in range(10):
+ for i in range(10): # [unused-variable]
lst.append(lambda i=i: i)
@@ -42,7 +39,7 @@ def good_case6():
the value will not change any more."""
for i in range(10):
print i
- return lambda: i
+ return lambda: i # [undefined-loop-variable]
def good_case7():
@@ -75,12 +72,12 @@ def bad_case():
lst = []
for i in range(10):
print i
- lst.append(lambda: i)
+ lst.append(lambda: i) # [cell-var-from-loop]
def bad_case2():
"""Closing over a loop variable."""
- return [lambda: i for i in range(10)]
+ return [lambda: i for i in range(10)] # [cell-var-from-loop]
def bad_case3():
@@ -88,7 +85,7 @@ def bad_case3():
lst = []
for i in range(10):
j = i * i
- lst.append(lambda: j)
+ lst.append(lambda: j) # [cell-var-from-loop]
return lst
@@ -98,7 +95,7 @@ def bad_case4():
for i in range(10):
def nested():
"""Nested function."""
- return i**2
+ return i**2 # [cell-var-from-loop]
lst.append(nested)
return lst
@@ -119,7 +116,7 @@ def bad_case5():
the result is [9] * 10 again.
"""
- return (lambda: i for i in range(10))
+ return (lambda: i for i in range(10)) # [cell-var-from-loop]
def bad_case6():
@@ -127,6 +124,5 @@ def bad_case6():
lst = []
for i, j in zip(range(10), range(10, 20)):
print j
- lst.append(lambda: i)
+ lst.append(lambda: i) # [cell-var-from-loop]
return lst
-
diff --git a/test/functional/cellvar_escaping_loop.txt b/test/functional/cellvar_escaping_loop.txt
new file mode 100644
index 0000000..4448d44
--- /dev/null
+++ b/test/functional/cellvar_escaping_loop.txt
@@ -0,0 +1,8 @@
+unused-variable:18:good_case3:Unused variable 'i'
+undefined-loop-variable:42:good_case6.<lambda>:Using possibly undefined loop variable 'i'
+cell-var-from-loop:75:bad_case.<lambda>:Cell variable i defined in loop
+cell-var-from-loop:80:bad_case2.<lambda>:Cell variable i defined in loop
+cell-var-from-loop:88:bad_case3.<lambda>:Cell variable j defined in loop
+cell-var-from-loop:98:bad_case4.nested:Cell variable i defined in loop
+cell-var-from-loop:119:bad_case5.<lambda>:Cell variable i defined in loop
+cell-var-from-loop:127:bad_case6.<lambda>:Cell variable i defined in loop
diff --git a/test/input/func_ctor_arguments.py b/test/functional/ctor_arguments.py
index f9a3430..7dc0a09 100644
--- a/test/input/func_ctor_arguments.py
+++ b/test/functional/ctor_arguments.py
@@ -1,9 +1,9 @@
"""Test function argument checker on __init__
-Based on test/input/func_arguments.py
+Based on test/functional/arguments.py
"""
# pylint: disable=C0111,R0903,W0231
-__revision__ = ''
+
class Class1Arg(object):
def __init__(self, first_argument):
@@ -32,35 +32,36 @@ class ClassNew(object):
return first_argument, kwarg
Class1Arg(420)
-Class1Arg()
-Class1Arg(1337, 347)
+Class1Arg() # [no-value-for-parameter]
+Class1Arg(1337, 347) # [too-many-function-args]
-Class3Arg(420, 789)
+Class3Arg(420, 789) # [no-value-for-parameter]
+# +1:[no-value-for-parameter,no-value-for-parameter,no-value-for-parameter]
Class3Arg()
Class3Arg(1337, 347, 456)
-Class3Arg('bab', 'bebe', None, 5.6)
+Class3Arg('bab', 'bebe', None, 5.6) # [too-many-function-args]
ClassDefaultArg(1, two=5)
ClassDefaultArg(two=5)
-Class1Arg(bob=4)
-ClassDefaultArg(1, 4, coin="hello")
+Class1Arg(bob=4) # [no-value-for-parameter,unexpected-keyword-arg]
+ClassDefaultArg(1, 4, coin="hello") # [unexpected-keyword-arg]
-ClassDefaultArg(1, one=5)
+ClassDefaultArg(1, one=5) # [redundant-keyword-arg]
Subclass1Arg(420)
-Subclass1Arg()
-Subclass1Arg(1337, 347)
+Subclass1Arg() # [no-value-for-parameter]
+Subclass1Arg(1337, 347) # [too-many-function-args]
ClassAllArgs()
ClassAllArgs(1, 2, 3, even=4, more=5)
ClassMultiInheritance(1)
-ClassMultiInheritance(1, 2, 3)
+ClassMultiInheritance(1, 2, 3) # [too-many-function-args]
ClassNew(1, kwarg=1)
-ClassNew(1, 2, 3)
-ClassNew(one=2)
+ClassNew(1, 2, 3) # [too-many-function-args]
+ClassNew(one=2) # [no-value-for-parameter,unexpected-keyword-arg]
class Metaclass(type):
diff --git a/test/input/func_undefined_var.py b/test/functional/undefined_variable.py
index fb5fc30..25f0145 100644
--- a/test/input/func_undefined_var.py
+++ b/test/functional/undefined_variable.py
@@ -1,38 +1,33 @@
-"""test access to undefined variables"""
+"""Test warnings about access to undefined variables."""
# pylint: disable=too-few-public-methods, no-init, no-self-use
-__revision__ = '$Id:'
DEFINED = 1
if DEFINED != 1:
- if DEFINED in (unknown, DEFINED):
+ if DEFINED in (unknown, DEFINED): # [undefined-variable]
DEFINED += 1
def in_method(var):
"""method doc"""
- var = nomoreknown
+ var = nomoreknown # [undefined-variable]
assert var
-DEFINED = {DEFINED:__revision__}
+DEFINED = {DEFINED:__revision__} # [undefined-variable]
+# +1:[undefined-variable]
DEFINED[__revision__] = OTHER = 'move this is astroid test'
OTHER += '$'
-def bad_default(var, default=unknown2):
+def bad_default(var, default=unknown2): # [undefined-variable]
"""function with defaut arg's value set to an unexistant name"""
print var, default
- print xxxx
- print xxxx #see story #1000
- augvar += 1
- del vardel
-
-# Warning for Attribute access to undefinde attributes ?
-#class Attrs(object):
- #"""dummy class for wrong attribute access"""
-#AOU = Attrs()
-#AOU.number *= 1.3
-#del AOU.badattr
+ print xxxx # [undefined-variable]
+ augvar += 1 # [undefined-variable,unused-variable]
+ del vardel # [undefined-variable]
+
+LMBD = lambda x, y=doesnotexist: x+y # [undefined-variable]
+LMBD2 = lambda x, y: x+z # [undefined-variable]
try:
POUET # don't catch me
@@ -41,19 +36,19 @@ except NameError:
try:
POUETT # don't catch me
-except Exception: # pylint:disable = W0703
+except Exception: # pylint:disable = broad-except
POUETT = 'something'
try:
POUETTT # don't catch me
-except: # pylint:disable = W0702
+except: # pylint:disable = bare-except
POUETTT = 'something'
print POUET, POUETT, POUETTT
try:
- PLOUF # catch me
+ PLOUF # [used-before-assignment]
except ValueError:
PLOUF = 'something'
@@ -62,7 +57,7 @@ print PLOUF
def if_branch_test(something):
"""hop"""
if something == 0:
- if xxx == 1:
+ if xxx == 1: # [used-before-assignment]
pass
else:
print xxx
@@ -77,30 +72,32 @@ def decorator(arg):
@decorator(arg=[i * 2 for i in range(15)])
def func1():
"""A function with a decorator that contains a listcomp."""
- pass
@decorator(arg=(i * 2 for i in range(15)))
def func2():
"""A function with a decorator that contains a genexpr."""
- pass
+
+@decorator(lambda x: x > 0)
+def main():
+ """A function with a decorator that contains a lambda."""
# Test shared scope.
-def test_arguments(arg=TestClass):
+def test_arguments(arg=TestClass): # [used-before-assignment]
""" TestClass isn't defined yet. """
return arg
-class TestClass(Ancestor):
+class TestClass(Ancestor): # [used-before-assignment]
""" contains another class, which uses an undefined ancestor. """
- class MissingAncestor(Ancestor1):
+ class MissingAncestor(Ancestor1): # [used-before-assignment]
""" no op """
def test1(self):
""" It should trigger here, because the two classes
have the same scope.
"""
- class UsingBeforeDefinition(Empty):
+ class UsingBeforeDefinition(Empty): # [used-before-assignment]
""" uses Empty before definition """
class Empty(object):
""" no op """
diff --git a/test/functional/undefined_variable.txt b/test/functional/undefined_variable.txt
new file mode 100644
index 0000000..5695be1
--- /dev/null
+++ b/test/functional/undefined_variable.txt
@@ -0,0 +1,17 @@
+undefined-variable:7::Undefined variable 'unknown'
+undefined-variable:13:in_method:Undefined variable 'nomoreknown'
+undefined-variable:16::Undefined variable '__revision__'
+undefined-variable:18::Undefined variable '__revision__'
+undefined-variable:22:bad_default:Undefined variable 'unknown2'
+undefined-variable:25:bad_default:Undefined variable 'xxxx'
+undefined-variable:26:bad_default:Undefined variable 'augvar'
+unused-variable:26:bad_default:Unused variable 'augvar'
+undefined-variable:27:bad_default:Undefined variable 'vardel'
+undefined-variable:29:<lambda>:Undefined variable 'doesnotexist'
+undefined-variable:30:<lambda>:Undefined variable 'z'
+used-before-assignment:51::Using variable 'PLOUF' before assignment
+used-before-assignment:60:if_branch_test:Using variable 'xxx' before assignment
+used-before-assignment:86:test_arguments:Using variable 'TestClass' before assignment
+used-before-assignment:90:TestClass:Using variable 'Ancestor' before assignment
+used-before-assignment:93:TestClass.MissingAncestor:Using variable 'Ancestor1' before assignment
+used-before-assignment:100:TestClass.test1.UsingBeforeDefinition:Using variable 'Empty' before assignment
diff --git a/test/input/func_noerror_9215_lambda_arg_as_decorator.py b/test/input/func_noerror_9215_lambda_arg_as_decorator.py
deleted file mode 100644
index cbbc747..0000000
--- a/test/input/func_noerror_9215_lambda_arg_as_decorator.py
+++ /dev/null
@@ -1,29 +0,0 @@
-"""Demonstrate false undefined variable for lambda functions.
-
-http://www.logilab.org/ticket/9215
-"""
-
-__revision__ = None
-
-def decorator(expr):
- """Function returning decorator."""
- def func(function):
- """Pass-thru decorator."""
- return function
- # use expr
- expr(0)
- return func
-
-# this lambda is flagged
-# E0602: 16:main.<lambda>: Undefined variable 'x'
-@decorator(lambda x: x > 0)
-def main():
- """Dummy function."""
- # this one is not flagged
- decorator(lambda y: y > 0)
-
-if __name__ == "__main__":
- main()
-
-
-
diff --git a/test/messages/func_ctor_arguments.txt b/test/messages/func_ctor_arguments.txt
deleted file mode 100644
index b8d62b1..0000000
--- a/test/messages/func_ctor_arguments.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-E: 35: No value for argument 'first_argument' in constructor call
-E: 36: Too many positional arguments for constructor call
-E: 38: No value for argument 'third_argument' in constructor call
-E: 39: No value for argument 'first_argument' in constructor call
-E: 39: No value for argument 'second_argument' in constructor call
-E: 39: No value for argument 'third_argument' in constructor call
-E: 41: Too many positional arguments for constructor call
-E: 46: No value for argument 'first_argument' in constructor call
-E: 46: Unexpected keyword argument 'bob' in constructor call
-E: 47: Unexpected keyword argument 'coin' in constructor call
-E: 49: Argument 'one' passed by position and keyword in constructor call
-E: 52: No value for argument 'first_argument' in constructor call
-E: 53: Too many positional arguments for constructor call
-E: 59: Too many positional arguments for constructor call
-E: 62: Too many positional arguments for constructor call
-E: 63: No value for argument 'first_argument' in constructor call
-E: 63: Unexpected keyword argument 'one' in constructor call
diff --git a/test/messages/func_loopvar_in_closure.txt b/test/messages/func_loopvar_in_closure.txt
deleted file mode 100644
index 5b068f4..0000000
--- a/test/messages/func_loopvar_in_closure.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-W: 21:good_case3: Unused variable 'i'
-W: 45:good_case6.<lambda>: Using possibly undefined loop variable 'i'
-W: 78:bad_case.<lambda>: Cell variable i defined in loop
-W: 83:bad_case2.<lambda>: Cell variable i defined in loop
-W: 91:bad_case3.<lambda>: Cell variable j defined in loop
-W:101:bad_case4.nested: Cell variable i defined in loop
-W:122:bad_case5.<lambda>: Cell variable i defined in loop
-W:130:bad_case6.<lambda>: Cell variable i defined in loop
diff --git a/test/messages/func_undefined_var.txt b/test/messages/func_undefined_var.txt
deleted file mode 100644
index 5505156..0000000
--- a/test/messages/func_undefined_var.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-E: 8: Undefined variable 'unknown'
-E: 14:in_method: Undefined variable 'nomoreknown'
-E: 22:bad_default: Undefined variable 'unknown2'
-E: 25:bad_default: Undefined variable 'xxxx'
-E: 26:bad_default: Undefined variable 'xxxx'
-E: 27:bad_default: Undefined variable 'augvar'
-E: 28:bad_default: Undefined variable 'vardel'
-E: 56: Using variable 'PLOUF' before assignment
-E: 65:if_branch_test: Using variable 'xxx' before assignment
-E: 89:test_arguments: Using variable 'TestClass' before assignment
-E: 93:TestClass: Using variable 'Ancestor' before assignment
-E: 96:TestClass.MissingAncestor: Using variable 'Ancestor1' before assignment
-E:103:TestClass.test1.UsingBeforeDefinition: Using variable 'Empty' before assignment
-W: 27:bad_default: Unused variable 'augvar'