summaryrefslogtreecommitdiff
path: root/tests/functional/u/use/use_implicit_booleaness_not_len.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/functional/u/use/use_implicit_booleaness_not_len.py')
-rw-r--r--tests/functional/u/use/use_implicit_booleaness_not_len.py190
1 files changed, 190 insertions, 0 deletions
diff --git a/tests/functional/u/use/use_implicit_booleaness_not_len.py b/tests/functional/u/use/use_implicit_booleaness_not_len.py
new file mode 100644
index 000000000..b4107ac2d
--- /dev/null
+++ b/tests/functional/u/use/use_implicit_booleaness_not_len.py
@@ -0,0 +1,190 @@
+# pylint: disable=too-few-public-methods,import-error, missing-docstring, misplaced-comparison-constant
+# pylint: disable=useless-super-delegation,wrong-import-position,invalid-name, wrong-import-order, condition-evals-to-constant
+
+if len('TEST'): # [use-implicit-booleaness-not-len]
+ pass
+
+if not len('TEST'): # [use-implicit-booleaness-not-len]
+ pass
+
+z = []
+if z and len(['T', 'E', 'S', 'T']): # [use-implicit-booleaness-not-len]
+ pass
+
+if True or len('TEST'): # [use-implicit-booleaness-not-len]
+ pass
+
+if len('TEST') == 0: # Should be fine
+ pass
+
+if len('TEST') < 1: # Should be fine
+ pass
+
+if len('TEST') <= 0: # Should be fine
+ pass
+
+if 1 > len('TEST'): # Should be fine
+ pass
+
+if 0 >= len('TEST'): # Should be fine
+ pass
+
+if z and len('TEST') == 0: # Should be fine
+ pass
+
+if 0 == len('TEST') < 10: # Should be fine
+ pass
+
+if 0 < 1 <= len('TEST') < 10: # Should be fine
+ pass
+
+if 10 > len('TEST') != 0: # Should be fine
+ pass
+
+if 10 > len('TEST') > 1 > 0: # Should be fine
+ pass
+
+if 0 <= len('TEST') < 100: # Should be fine
+ pass
+
+if z or 10 > len('TEST') != 0: # Should be fine
+ pass
+
+if z:
+ pass
+elif len('TEST'): # [use-implicit-booleaness-not-len]
+ pass
+
+if z:
+ pass
+elif not len('TEST'): # [use-implicit-booleaness-not-len]
+ pass
+
+while len('TEST'): # [use-implicit-booleaness-not-len]
+ pass
+
+while not len('TEST'): # [use-implicit-booleaness-not-len]
+ pass
+
+while z and len('TEST'): # [use-implicit-booleaness-not-len]
+ pass
+
+while not len('TEST') and z: # [use-implicit-booleaness-not-len]
+ pass
+
+assert len('TEST') > 0 # Should be fine
+
+x = 1 if len('TEST') != 0 else 2 # Should be fine
+
+f_o_o = len('TEST') or 42 # Should be fine
+
+a = x and len(x) # Should be fine
+
+def some_func():
+ return len('TEST') > 0 # Should be fine
+
+def github_issue_1325():
+ l = [1, 2, 3]
+ length = len(l) if l else 0 # Should be fine
+ return length
+
+def github_issue_1331(*args):
+ assert False, len(args) # Should be fine
+
+def github_issue_1331_v2(*args):
+ assert len(args), args # [use-implicit-booleaness-not-len]
+
+def github_issue_1331_v3(*args):
+ assert len(args) or z, args # [use-implicit-booleaness-not-len]
+
+def github_issue_1331_v4(*args):
+ assert z and len(args), args # [use-implicit-booleaness-not-len]
+
+b = bool(len(z)) # [use-implicit-booleaness-not-len]
+c = bool(len('TEST') or 42) # [use-implicit-booleaness-not-len]
+
+def github_issue_1879():
+
+ class ClassWithBool(list):
+ def __bool__(self):
+ return True
+
+ class ClassWithoutBool(list):
+ pass
+
+ class ChildClassWithBool(ClassWithBool):
+ pass
+
+ class ChildClassWithoutBool(ClassWithoutBool):
+ pass
+
+ assert len(ClassWithBool())
+ assert len(ChildClassWithBool())
+ assert len(ClassWithoutBool()) # [use-implicit-booleaness-not-len]
+ assert len(ChildClassWithoutBool()) # [use-implicit-booleaness-not-len]
+ assert len(range(0)) # [use-implicit-booleaness-not-len]
+ assert len([t + 1 for t in []]) # [use-implicit-booleaness-not-len]
+ assert len(u + 1 for u in []) # [use-implicit-booleaness-not-len]
+ assert len({"1":(v + 1) for v in {}}) # [use-implicit-booleaness-not-len]
+ assert len(set((w + 1) for w in set())) # [use-implicit-booleaness-not-len]
+
+ # pylint: disable=import-outside-toplevel
+ import numpy
+ numpy_array = numpy.array([0])
+ if len(numpy_array) > 0:
+ print('numpy_array')
+ if len(numpy_array):
+ print('numpy_array')
+ if numpy_array:
+ print('b')
+
+ import pandas as pd
+ pandas_df = pd.DataFrame()
+ if len(pandas_df):
+ print("this works, but pylint tells me not to use len() without comparison")
+ if len(pandas_df) > 0:
+ print("this works and pylint likes it, but it's not the solution intended by PEP-8")
+ if pandas_df:
+ print("this does not work (truth value of dataframe is ambiguous)")
+
+ def function_returning_list(r):
+ if r==1:
+ return [1]
+ return [2]
+
+ def function_returning_int(r):
+ if r==1:
+ return 1
+ return 2
+
+ # def function_returning_generator(r):
+ # for i in [r, 1, 2, 3]:
+ # yield i
+
+ # def function_returning_comprehension(r):
+ # return [x+1 for x in [r, 1, 2, 3]]
+
+ # def function_returning_function(r):
+ # return function_returning_generator(r)
+
+ assert len(function_returning_list(z)) # [use-implicit-booleaness-not-len]
+ assert len(function_returning_int(z))
+ # This should raise a use-implicit-booleaness-not-len once astroid can infer it
+ # See https://github.com/PyCQA/pylint/pull/3821#issuecomment-743771514
+ # assert len(function_returning_generator(z))
+ # assert len(function_returning_comprehension(z))
+ # assert len(function_returning_function(z))
+
+
+def github_issue_4215():
+ # Test undefined variables
+ # https://github.com/PyCQA/pylint/issues/4215
+ if len(undefined_var): # [undefined-variable]
+ pass
+ if len(undefined_var2[0]): # [undefined-variable]
+ pass
+
+# pylint: disable=len-as-condition
+
+if len('TEST'):
+ pass