summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2015-09-29 15:42:30 +0300
committerClaudiu Popa <pcmanticore@gmail.com>2015-09-29 15:42:30 +0300
commitf9101015b4b3b7e4409e8956fcb7433469a165a5 (patch)
tree6bdfa3c4d8dce8d2df81c534e883b3592bbf82df
parent6d251ba39d29afaf66ceee9e8ce97f75c8ddd920 (diff)
downloadastroid-f9101015b4b3b7e4409e8956fcb7433469a165a5.tar.gz
Import test for pylint regarding context inference in relation with factory methods.
-rw-r--r--astroid/tests/unittest_inference.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/astroid/tests/unittest_inference.py b/astroid/tests/unittest_inference.py
index 75eed79..093b076 100644
--- a/astroid/tests/unittest_inference.py
+++ b/astroid/tests/unittest_inference.py
@@ -2976,6 +2976,25 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
''')
self.assertIsNone(helpers.safe_infer(ast_node.targets[0]))
+ def test_classmethod_inferred_by_context(self):
+ ast_node = test_utils.extract_node('''
+ class Super(object):
+ def instance(cls):
+ return cls()
+ instance = classmethod(instance)
+
+ class Sub(Super):
+ def method(self):
+ return self
+
+ # should see the Sub.instance() is returning a Sub
+ # instance, not a Super instance
+ Sub.instance().method() #@
+ ''')
+ inferred = next(ast_node.infer())
+ self.assertIsInstance(inferred, Instance)
+ self.assertEqual(inferred.name, 'Sub')
+
class GetattrTest(unittest.TestCase):