summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2015-10-22 20:40:13 +0100
committerClaudiu Popa <pcmanticore@gmail.com>2015-10-22 20:40:13 +0100
commit658ecfbb170c040e079ce5619d751fcc3510d4b7 (patch)
treef87f173815c451d81baece66938df8035def9fae
parentb65cde98f3abb85f80882ea39de40196f69ab2ec (diff)
downloadastroid-658ecfbb170c040e079ce5619d751fcc3510d4b7.tar.gz
Create a callcontext when determining an instance's truth value.
-rw-r--r--astroid/bases.py2
-rw-r--r--astroid/tests/unittest_inference.py12
2 files changed, 13 insertions, 1 deletions
diff --git a/astroid/bases.py b/astroid/bases.py
index 7df3641..4b7f83b 100644
--- a/astroid/bases.py
+++ b/astroid/bases.py
@@ -244,6 +244,8 @@ class Instance(Proxy):
all its instances are considered true.
"""
context = contextmod.InferenceContext()
+ context.callcontext = contextmod.CallContext(args=[self])
+
try:
result = _infer_method_result_truth(self, BOOL_SPECIAL_METHOD, context)
except (exceptions.InferenceError, exceptions.NotFoundError):
diff --git a/astroid/tests/unittest_inference.py b/astroid/tests/unittest_inference.py
index 3dbcd5c..d7c1ac4 100644
--- a/astroid/tests/unittest_inference.py
+++ b/astroid/tests/unittest_inference.py
@@ -3422,13 +3422,23 @@ class TestBool(unittest.TestCase):
return False
class B(object):
{method} = C()
+ class LambdaBoolFalse(object):
+ {method} = lambda self: self.foo
+ @property
+ def foo(self): return 0
+ class FalseBoolLen(object):
+ __len__ = lambda self: self.foo
+ @property
+ def foo(self): return 0
bool(FalseClass) #@
bool(TrueClass) #@
bool(FalseClass()) #@
bool(TrueClass()) #@
bool(B()) #@
+ bool(LambdaBoolFalse()) #@
+ bool(FalseBoolLen()) #@
'''.format(method=BOOL_SPECIAL_METHOD))
- expected = [True, True, False, True, False]
+ expected = [True, True, False, True, False, False, False]
for node, expected_value in zip(ast_nodes, expected):
inferred = next(node.infer())
self.assertEqual(inferred.value, expected_value)