summaryrefslogtreecommitdiff
path: root/tests/functional/u/useless/useless_else_on_loop.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/functional/u/useless/useless_else_on_loop.py')
-rw-r--r--tests/functional/u/useless/useless_else_on_loop.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/functional/u/useless/useless_else_on_loop.py b/tests/functional/u/useless/useless_else_on_loop.py
new file mode 100644
index 000000000..d686f4658
--- /dev/null
+++ b/tests/functional/u/useless/useless_else_on_loop.py
@@ -0,0 +1,103 @@
+"""Check for else branches on loops with break and return only."""
+from __future__ import print_function
+__revision__ = 0
+
+def test_return_for():
+ """else + return is not accetable."""
+ for i in range(10):
+ if i % 2:
+ return i
+ else: # [useless-else-on-loop]
+ print('math is broken')
+ return None
+
+def test_return_while():
+ """else + return is not accetable."""
+ while True:
+ return 1
+ else: # [useless-else-on-loop]
+ print('math is broken')
+ return None
+
+
+while True:
+ def short_fun():
+ """A function with a loop."""
+ for _ in range(10):
+ break
+else: # [useless-else-on-loop]
+ print('or else!')
+
+
+while True:
+ while False:
+ break
+else: # [useless-else-on-loop]
+ print('or else!')
+
+for j in range(10):
+ pass
+else: # [useless-else-on-loop]
+ print('fat chance')
+ for j in range(10):
+ break
+
+
+def test_return_for2():
+ """no false positive for break in else
+
+ https://bitbucket.org/logilab/pylint/issue/117/useless-else-on-loop-false-positives
+ """
+ for i in range(10):
+ for _ in range(i):
+ if i % 2:
+ break
+ else:
+ break
+ else:
+ print('great math')
+
+
+def test_break_in_orelse_deep():
+ """no false positive for break in else deeply nested
+ """
+ for _ in range(10):
+ if 1 < 2:
+ for _ in range(3):
+ if 3 < 2:
+ break
+ else:
+ break
+ else:
+ return True
+ return False
+
+
+def test_break_in_orelse_deep2():
+ """should rise a useless-else-on-loop message, as the break statement is only
+ for the inner for loop
+ """
+ for _ in range(10):
+ if 1 < 2:
+ for _ in range(3):
+ if 3 < 2:
+ break
+ else:
+ print("all right")
+ else: # [useless-else-on-loop]
+ return True
+ return False
+
+
+def test_break_in_orelse_deep3():
+ """no false positive for break deeply nested in else
+ """
+ for _ in range(10):
+ for _ in range(3):
+ pass
+ else:
+ if 1 < 2:
+ break
+ else:
+ return True
+ return False