summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--astroid/tests/unittest_inference.py20
-rw-r--r--astroid/util.py5
2 files changed, 18 insertions, 7 deletions
diff --git a/astroid/tests/unittest_inference.py b/astroid/tests/unittest_inference.py
index 5ca3f05c..70b6f8da 100644
--- a/astroid/tests/unittest_inference.py
+++ b/astroid/tests/unittest_inference.py
@@ -2232,6 +2232,18 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
inferred = next(node.infer())
self.assertEqual(inferred.bool_value(), expected)
+ def test_genexpr_bool_value(self):
+ node = extract_node('''(x for x in range(10))''')
+ self.assertTrue(node.bool_value())
+
+ def test_name_bool_value(self):
+ node = extract_node('''
+ x = 42
+ y = x
+ y
+ ''')
+ self.assertIs(node.bool_value(), util.Uninferable)
+
def test_bool_value(self):
# Verify the truth value of nodes.
module = parse('''
@@ -2240,7 +2252,6 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
def function(): pass
class Class(object):
def method(self): pass
- genexpr = (x for x in range(10))
dict_comp = {x:y for (x, y) in ((1, 2), (2, 3))}
set_comp = {x for x in range(10)}
list_comp = [x for x in range(10)]
@@ -2253,7 +2264,6 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
def true_value():
return True
generator = generator_func()
- name = generator
bin_op = 1 + 2
bool_op = x and y
callfunc = test()
@@ -2268,8 +2278,6 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertTrue(function.bool_value())
klass = module['Class']
self.assertTrue(klass.bool_value())
- genexpr = next(module['genexpr'].infer())
- self.assertTrue(genexpr.bool_value())
dict_comp = next(module['dict_comp'].infer())
self.assertEqual(dict_comp, util.Uninferable)
set_comp = next(module['set_comp'].infer())
@@ -2284,10 +2292,8 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertTrue(bound_method)
generator = next(module['generator'].infer())
self.assertTrue(generator)
- name = module['name'].parent.value
- self.assertTrue(name.bool_value())
bin_op = module['bin_op'].parent.value
- self.assertTrue(bin_op.bool_value())
+ self.assertIs(bin_op.bool_value(), util.Uninferable)
bool_op = module['bool_op'].parent.value
self.assertEqual(bool_op.bool_value(), util.Uninferable)
callfunc = module['callfunc'].parent.value
diff --git a/astroid/util.py b/astroid/util.py
index 1111202f..f159fdb4 100644
--- a/astroid/util.py
+++ b/astroid/util.py
@@ -50,6 +50,11 @@ class Uninferable(object):
def __call__(self, *args, **kwargs):
return self
+ def __bool__(self):
+ return False
+
+ __nonzero__ = __bool__
+
def accept(self, visitor):
func = getattr(visitor, "visit_uninferable")
return func(self)