summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--astroid/__init__.py1
-rw-r--r--astroid/builder.py129
-rw-r--r--astroid/scoped_nodes.py2
-rw-r--r--astroid/test_utils.py18
-rw-r--r--astroid/tests/unittest_brain.py11
-rw-r--r--astroid/tests/unittest_builder.py72
-rw-r--r--astroid/tests/unittest_helpers.py3
-rw-r--r--astroid/tests/unittest_inference.py99
-rw-r--r--astroid/tests/unittest_lookup.py79
-rw-r--r--astroid/tests/unittest_manager.py35
-rw-r--r--astroid/tests/unittest_nodes.py51
-rw-r--r--astroid/tests/unittest_peephole.py3
-rw-r--r--astroid/tests/unittest_scoped_nodes.py86
14 files changed, 305 insertions, 290 deletions
diff --git a/ChangeLog b/ChangeLog
index c9a40787..6b2cbc81 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -224,6 +224,12 @@ Change log for the astroid package (used to be astng)
* Understand metaclasses added with six.add_metaclass decorator. Closes issue #129.
+ * Add a new convenience API, `astroid.parse`, which can be used to retrieve
+ an astroid AST from a source code string, similar to how ast.parse can be
+ used to obtain a Python AST from a source string. This is the test_utils.build_module
+ promoted to a public API.
+
+
2015-03-14 -- 1.3.6
diff --git a/astroid/__init__.py b/astroid/__init__.py
index 33460f4a..3a8fdc01 100644
--- a/astroid/__init__.py
+++ b/astroid/__init__.py
@@ -63,6 +63,7 @@ from astroid import raw_building
from astroid.bases import YES, Instance, BoundMethod, UnboundMethod
from astroid.node_classes import are_exclusive, unpack_infer
from astroid.scoped_nodes import builtin_lookup
+from astroid.builder import parse
# make a manager instance (borg) accessible from astroid package
from astroid.manager import AstroidManager
diff --git a/astroid/builder.py b/astroid/builder.py
index 037ecf37..39bec211 100644
--- a/astroid/builder.py
+++ b/astroid/builder.py
@@ -22,21 +22,22 @@ at the same time.
"""
from __future__ import with_statement
-__docformat__ = "restructuredtext en"
-
+import _ast
+import os
import sys
-from os.path import splitext, basename, exists, abspath
+import textwrap
+
+from astroid import bases
+from astroid import exceptions
+from astroid import manager
+from astroid import modutils
+from astroid import raw_building
+from astroid import rebuilder
-from astroid.exceptions import AstroidBuildingException, InferenceError
-from astroid.raw_building import InspectBuilder
-from astroid.rebuilder import TreeRebuilder
-from astroid.manager import AstroidManager
-from astroid.bases import YES, Instance
-from astroid.modutils import modpath_from_file, _path_from_filename
-from _ast import PyCF_ONLY_AST
-def parse(string):
- return compile(string, "<string>", 'exec', PyCF_ONLY_AST)
+def _parse(string):
+ return compile(string, "<string>", 'exec', _ast.PyCF_ONLY_AST)
+
if sys.version_info >= (3, 0):
# pylint: disable=no-name-in-module; We don't understand flows yet.
@@ -48,10 +49,10 @@ if sys.version_info >= (3, 0):
stream = open(filename, 'r', newline=None, encoding=encoding)
try:
data = stream.read()
- except UnicodeError: # wrong encodingg
+ except UnicodeError: # wrong encoding
# detect_encoding returns utf-8 if no encoding specified
msg = 'Wrong (%s) or no encoding specified' % encoding
- raise AstroidBuildingException(msg)
+ raise exceptions.AstroidBuildingException(msg)
return stream, encoding, data
else:
@@ -60,8 +61,7 @@ else:
_ENCODING_RGX = re.compile(r"\s*#+.*coding[:=]\s*([-\w.]+)")
def _guess_encoding(string):
- """get encoding from a python file as string or return None if not found
- """
+ """get encoding from a python file as string or return None if not found"""
# check for UTF-8 byte-order mark
if string.startswith('\xef\xbb\xbf'):
return 'UTF-8'
@@ -78,25 +78,24 @@ else:
encoding = _guess_encoding(data)
return stream, encoding, data
-# ast NG builder ##############################################################
-MANAGER = AstroidManager()
+MANAGER = manager.AstroidManager()
-class AstroidBuilder(InspectBuilder):
- """provide astroid building methods"""
+
+class AstroidBuilder(raw_building.InspectBuilder):
+ """Class for building an astroid tree from source code or from a live module."""
def __init__(self, manager=None):
- InspectBuilder.__init__(self)
+ super(AstroidBuilder, self).__init__()
self._manager = manager or MANAGER
def module_build(self, module, modname=None):
- """build an astroid from a living module instance
- """
+ """Build an astroid from a living module instance."""
node = None
path = getattr(module, '__file__', None)
if path is not None:
- path_, ext = splitext(_path_from_filename(path))
- if ext in ('.py', '.pyc', '.pyo') and exists(path_ + '.py'):
+ path_, ext = os.path.splitext(modutils._path_from_filename(path))
+ if ext in ('.py', '.pyc', '.pyo') and os.path.exists(path_ + '.py'):
node = self.file_build(path_ + '.py', modname)
if node is None:
# this is a built-in module
@@ -111,40 +110,38 @@ class AstroidBuilder(InspectBuilder):
return node
def file_build(self, path, modname=None):
- """build astroid from a source code file (i.e. from an ast)
+ """Build astroid from a source code file (i.e. from an ast)
- path is expected to be a python source file
+ *path* is expected to be a python source file
"""
try:
stream, encoding, data = open_source_file(path)
except IOError as exc:
msg = 'Unable to load file %r (%s)' % (path, exc)
- raise AstroidBuildingException(msg)
- except SyntaxError as exc: # py3k encoding specification error
- raise AstroidBuildingException(exc)
- except LookupError as exc: # unknown encoding
- raise AstroidBuildingException(exc)
+ raise exceptions.AstroidBuildingException(msg)
+ except SyntaxError as exc: # py3k encoding specification error
+ raise exceptions.AstroidBuildingException(exc)
+ except LookupError as exc: # unknown encoding
+ raise exceptions.AstroidBuildingException(exc)
with stream:
# get module name if necessary
if modname is None:
try:
- modname = '.'.join(modpath_from_file(path))
+ modname = '.'.join(modutils.modpath_from_file(path))
except ImportError:
- modname = splitext(basename(path))[0]
+ modname = os.path.splitext(os.path.basename(path))[0]
# build astroid representation
module = self._data_build(data, modname, path)
return self._post_build(module, encoding)
def string_build(self, data, modname='', path=None):
- """build astroid from source code string and return rebuilded astroid"""
+ """Build astroid from source code string."""
module = self._data_build(data, modname, path)
module.file_bytes = data.encode('utf-8')
return self._post_build(module, 'utf-8')
def _post_build(self, module, encoding):
- """handles encoding and delayed nodes
- after a module has been built
- """
+ """Handles encoding and delayed nodes after a module has been built"""
module.file_encoding = encoding
self._manager.cache_module(module)
# post tree building steps after we stored the module in the cache:
@@ -159,14 +156,13 @@ class AstroidBuilder(InspectBuilder):
return module
def _data_build(self, data, modname, path):
- """build tree node from data and add some informations"""
- # this method could be wrapped with a pickle/cache function
+ """Build tree node from data and add some informations"""
try:
- node = parse(data + '\n')
+ node = _parse(data + '\n')
except (TypeError, ValueError, SyntaxError) as exc:
- raise AstroidBuildingException(exc)
+ raise exceptions.AstroidBuildingException(exc)
if path is not None:
- node_file = abspath(path)
+ node_file = os.path.abspath(path)
else:
node_file = '<?>'
if modname.endswith('.__init__'):
@@ -174,25 +170,26 @@ class AstroidBuilder(InspectBuilder):
package = True
else:
package = path and path.find('__init__.py') > -1 or False
- rebuilder = TreeRebuilder(self._manager)
- module = rebuilder.visit_module(node, modname, node_file, package)
- module._from_nodes = rebuilder._from_nodes
- module._delayed_assattr = rebuilder._delayed_assattr
+ builder = rebuilder.TreeRebuilder(self._manager)
+ module = builder.visit_module(node, modname, node_file, package)
+ module._from_nodes = builder._from_nodes
+ module._delayed_assattr = builder._delayed_assattr
return module
def add_from_names_to_locals(self, node):
- """store imported names to the locals;
- resort the locals if coming from a delayed node
- """
+ """Store imported names to the locals
+ Resort the locals if coming from a delayed node
+ """
_key_func = lambda node: node.fromlineno
def sort_locals(my_list):
my_list.sort(key=_key_func)
+
for (name, asname) in node.names:
if name == '*':
try:
imported = node.do_import_module()
- except InferenceError:
+ except exceptions.InferenceError:
continue
for name in imported.wildcard_import_names():
node.parent.set_local(name, node)
@@ -202,19 +199,20 @@ class AstroidBuilder(InspectBuilder):
sort_locals(node.parent.scope().locals[asname or name])
def delayed_assattr(self, node):
- """visit a AssAttr node -> add name to locals, handle members
- definition
+ """Visit a AssAttr node
+
+ This adds name to locals and handle members definition.
"""
try:
frame = node.frame()
for inferred in node.expr.infer():
- if inferred is YES:
+ if inferred is bases.YES:
continue
try:
- if inferred.__class__ is Instance:
+ if inferred.__class__ is bases.Instance:
inferred = inferred._proxied
iattrs = inferred.instance_attrs
- elif isinstance(inferred, Instance):
+ elif isinstance(inferred, bases.Instance):
# Const, Tuple, ... we may be wrong, may be not, but
# anyway we don't want to pollute builtin's namespace
continue
@@ -224,18 +222,27 @@ class AstroidBuilder(InspectBuilder):
iattrs = inferred.locals
except AttributeError:
# XXX log error
- #import traceback
- #traceback.print_exc()
continue
values = iattrs.setdefault(node.attrname, [])
if node in values:
continue
# get assign in __init__ first XXX useful ?
- if frame.name == '__init__' and values and not \
- values[0].frame().name == '__init__':
+ if (frame.name == '__init__' and values and
+ not values[0].frame().name == '__init__'):
values.insert(0, node)
else:
values.append(node)
- except InferenceError:
+ except exceptions.InferenceError:
pass
+
+def parse(code, module_name='', path=None):
+ """Parses a source string in order to obtain an astroid AST from it
+
+ :param str code: The code for the module.
+ :param str module_name: The name for the module, if any
+ :param str path: The path for the module
+ """
+ code = textwrap.dedent(code)
+ return AstroidBuilder(MANAGER).string_build(
+ code, modname=module_name, path=path)
diff --git a/astroid/scoped_nodes.py b/astroid/scoped_nodes.py
index 17ab975c..74cf42a7 100644
--- a/astroid/scoped_nodes.py
+++ b/astroid/scoped_nodes.py
@@ -1339,7 +1339,7 @@ class ClassDef(bases.Statement, LocalsDictNodeNG, mixins.FilterStmtsMixin):
try:
inferred._proxied.getattr('__get__', context)
except exceptions.NotFoundError:
- yield inferred
+ yield inferred
else:
yield bases.YES
else:
diff --git a/astroid/test_utils.py b/astroid/test_utils.py
index a7aba5e1..c1d63f17 100644
--- a/astroid/test_utils.py
+++ b/astroid/test_utils.py
@@ -1,7 +1,6 @@
"""Utility functions for test code that uses astroid ASTs as input."""
import functools
import sys
-import textwrap
from astroid import nodes
from astroid import builder
@@ -157,7 +156,7 @@ def extract_node(code, module_name=''):
if line.strip().endswith(_STATEMENT_SELECTOR):
requested_lines.append(idx + 1)
- tree = build_module(code, module_name=module_name)
+ tree = builder.parse(code, module_name=module_name)
extracted = []
# print(as_string.dump(tree))
if requested_lines:
@@ -177,21 +176,6 @@ def extract_node(code, module_name=''):
return extracted
-def build_module(code, module_name='', path=None):
- """Parses a string module with a builder.
- :param code: The code for the module.
- :type code: str
- :param module_name: The name for the module
- :type module_name: str
- :param path: The path for the module
- :type module_name: str
- :returns: The module AST.
- :rtype: astroid.bases.NodeNG
- """
- code = textwrap.dedent(code)
- return builder.AstroidBuilder(None).string_build(code, modname=module_name, path=path)
-
-
def require_version(minver=None, maxver=None):
""" Compare version of python interpreter to the given one. Skip the test
if older.
diff --git a/astroid/tests/unittest_brain.py b/astroid/tests/unittest_brain.py
index 15d4fd75..ddae51f9 100644
--- a/astroid/tests/unittest_brain.py
+++ b/astroid/tests/unittest_brain.py
@@ -22,6 +22,7 @@ import six
from astroid import MANAGER
from astroid import bases
+from astroid import builder
from astroid import nodes
from astroid import test_utils
import astroid
@@ -277,7 +278,7 @@ class MultiprocessingBrainTest(unittest.TestCase):
def test_multiprocessing_manager(self):
# Test that we have the proper attributes
# for a multiprocessing.managers.SyncManager
- module = test_utils.build_module("""
+ module = builder.parse("""
import multiprocessing
manager = multiprocessing.Manager()
queue = manager.Queue()
@@ -335,7 +336,7 @@ class MultiprocessingBrainTest(unittest.TestCase):
class EnumBrainTest(unittest.TestCase):
def test_simple_enum(self):
- module = test_utils.build_module("""
+ module = builder.parse("""
import enum
class MyEnum(enum.Enum):
@@ -360,7 +361,7 @@ class EnumBrainTest(unittest.TestCase):
self.assertIsInstance(meth, astroid.FunctionDef)
def test_enum_multiple_base_classes(self):
- module = test_utils.build_module("""
+ module = builder.parse("""
import enum
class Mixin:
@@ -377,7 +378,7 @@ class EnumBrainTest(unittest.TestCase):
'Enum instance should share base classes with generating class')
def test_int_enum(self):
- module = test_utils.build_module("""
+ module = builder.parse("""
import enum
class MyEnum(enum.IntEnum):
@@ -396,7 +397,7 @@ class EnumBrainTest(unittest.TestCase):
@unittest.skipUnless(HAS_DATEUTIL, "This test requires the dateutil library.")
class DateutilBrainTest(unittest.TestCase):
def test_parser(self):
- module = test_utils.build_module("""
+ module = builder.parse("""
from dateutil.parser import parse
d = parse('2000-01-01')
""")
diff --git a/astroid/tests/unittest_builder.py b/astroid/tests/unittest_builder.py
index 4559b35d..252f096f 100644
--- a/astroid/tests/unittest_builder.py
+++ b/astroid/tests/unittest_builder.py
@@ -21,14 +21,18 @@ import os
import sys
import unittest
-from astroid import builder, nodes, InferenceError, NotFoundError
-from astroid.bases import YES, BUILTINS
-from astroid.manager import AstroidManager
+import six
+
+from astroid import bases
+from astroid import builder
+from astroid import exceptions
+from astroid import manager
+from astroid import nodes
from astroid import test_utils
from astroid.tests import resources
-MANAGER = AstroidManager()
-IS_PY3 = sys.version_info[0] == 3
+MANAGER = manager.AstroidManager()
+BUILTINS = six.moves.builtins.__name__
class FromToLineNoTest(unittest.TestCase):
@@ -109,7 +113,7 @@ class FromToLineNoTest(unittest.TestCase):
'(no line number on function args)')
def test_decorated_function_lineno(self):
- astroid = test_utils.build_module('''
+ astroid = builder.parse('''
@decorator
def function(
arg):
@@ -172,7 +176,7 @@ class FromToLineNoTest(unittest.TestCase):
else:
print ("bouh")
'''):
- astroid = test_utils.build_module(code, __name__)
+ astroid = builder.parse(code, __name__)
stmt = astroid.body[0]
self.assertEqual(stmt.fromlineno, 2)
self.assertEqual(stmt.tolineno, 6)
@@ -181,7 +185,7 @@ class FromToLineNoTest(unittest.TestCase):
self.assertEqual(stmt.orelse[0].tolineno, 6)
def test_try_except_lineno(self):
- astroid = test_utils.build_module('''
+ astroid = builder.parse('''
try:
print (a)
except:
@@ -202,7 +206,7 @@ class FromToLineNoTest(unittest.TestCase):
def test_try_finally_lineno(self):
- astroid = test_utils.build_module('''
+ astroid = builder.parse('''
try:
print (a)
finally:
@@ -217,7 +221,7 @@ class FromToLineNoTest(unittest.TestCase):
def test_try_finally_25_lineno(self):
- astroid = test_utils.build_module('''
+ astroid = builder.parse('''
try:
print (a)
except:
@@ -234,7 +238,7 @@ class FromToLineNoTest(unittest.TestCase):
def test_with_lineno(self):
- astroid = test_utils.build_module('''
+ astroid = builder.parse('''
from __future__ import with_statement
with file("/tmp/pouet") as f:
print (f)
@@ -251,11 +255,11 @@ class BuilderTest(unittest.TestCase):
self.builder = builder.AstroidBuilder()
def test_data_build_null_bytes(self):
- with self.assertRaises(builder.AstroidBuildingException):
+ with self.assertRaises(exceptions.AstroidBuildingException):
self.builder.string_build('\x00')
def test_data_build_invalid_x_escape(self):
- with self.assertRaises(builder.AstroidBuildingException):
+ with self.assertRaises(exceptions.AstroidBuildingException):
self.builder.string_build('"\\x1"')
def test_missing_newline(self):
@@ -263,13 +267,13 @@ class BuilderTest(unittest.TestCase):
resources.build_file('data/noendingnewline.py')
def test_missing_file(self):
- with self.assertRaises(builder.AstroidBuildingException):
+ with self.assertRaises(exceptions.AstroidBuildingException):
resources.build_file('data/inexistant.py')
def test_inspect_build0(self):
"""test astroid tree build from a living object"""
builtin_ast = MANAGER.ast_from_module_name(BUILTINS)
- if not IS_PY3:
+ if six.PY2:
fclass = builtin_ast['file']
self.assertIn('name', fclass)
self.assertIn('mode', fclass)
@@ -294,7 +298,7 @@ class BuilderTest(unittest.TestCase):
self.assertIsInstance(builtin_ast['None'], nodes.Const)
self.assertIsInstance(builtin_ast['True'], nodes.Const)
self.assertIsInstance(builtin_ast['False'], nodes.Const)
- if IS_PY3:
+ if six.PY3:
self.assertIsInstance(builtin_ast['Exception'], nodes.ClassDef)
self.assertIsInstance(builtin_ast['NotImplementedError'], nodes.ClassDef)
else:
@@ -417,8 +421,8 @@ class BuilderTest(unittest.TestCase):
class F:
"new style"
'''
- mod_ast = test_utils.build_module(data, __name__)
- if IS_PY3:
+ mod_ast = builder.parse(data, __name__)
+ if six.PY3:
self.assertTrue(mod_ast['A'].newstyle)
self.assertTrue(mod_ast['B'].newstyle)
self.assertTrue(mod_ast['E'].newstyle)
@@ -442,14 +446,14 @@ class BuilderTest(unittest.TestCase):
global CSTE2
print (CSTE)
'''
- astroid = test_utils.build_module(data, __name__)
+ astroid = builder.parse(data, __name__)
self.assertEqual(len(astroid.getattr('CSTE')), 2)
self.assertIsInstance(astroid.getattr('CSTE')[0], nodes.AssignName)
self.assertEqual(astroid.getattr('CSTE')[0].fromlineno, 2)
self.assertEqual(astroid.getattr('CSTE')[1].fromlineno, 6)
- with self.assertRaises(NotFoundError):
+ with self.assertRaises(exceptions.NotFoundError):
astroid.getattr('CSTE2')
- with self.assertRaises(InferenceError):
+ with self.assertRaises(exceptions.InferenceError):
next(astroid['global_no_effect'].ilookup('CSTE2'))
@unittest.skipIf(os.name == 'java',
@@ -471,25 +475,25 @@ class BuilderTest(unittest.TestCase):
def test_gen_expr_var_scope(self):
data = 'l = list(n for n in range(10))\n'
- astroid = test_utils.build_module(data, __name__)
+ astroid = builder.parse(data, __name__)
# n unavailable outside gen expr scope
self.assertNotIn('n', astroid)
# test n is inferable anyway
n = test_utils.get_name_node(astroid, 'n')
self.assertIsNot(n.scope(), astroid)
self.assertEqual([i.__class__ for i in n.infer()],
- [YES.__class__])
+ [bases.YES.__class__])
def test_no_future_imports(self):
- mod = test_utils.build_module("import sys")
+ mod = builder.parse("import sys")
self.assertEqual(set(), mod.future_imports)
def test_future_imports(self):
- mod = test_utils.build_module("from __future__ import print_function")
+ mod = builder.parse("from __future__ import print_function")
self.assertEqual(set(['print_function']), mod.future_imports)
def test_two_future_imports(self):
- mod = test_utils.build_module("""
+ mod = builder.parse("""
from __future__ import print_function
from __future__ import absolute_import
""")
@@ -504,7 +508,7 @@ class BuilderTest(unittest.TestCase):
print (self)
A.assign_type = A_assign_type
'''
- astroid = test_utils.build_module(code)
+ astroid = builder.parse(code)
lclass = list(astroid.igetattr('A'))
self.assertEqual(len(lclass), 1)
lclass = lclass[0]
@@ -512,7 +516,7 @@ class BuilderTest(unittest.TestCase):
self.assertIn('type', lclass.locals)
def test_augassign_attr(self):
- test_utils.build_module("""
+ builder.parse("""
class Counter:
v = 0
def inc(self):
@@ -528,7 +532,7 @@ class BuilderTest(unittest.TestCase):
def func2(a={}):
a.custom_attr = 0
'''
- test_utils.build_module(code)
+ builder.parse(code)
nonetype = nodes.const_factory(None)
self.assertNotIn('custom_attr', nonetype.locals)
self.assertNotIn('custom_attr', nonetype.instance_attrs)
@@ -538,13 +542,13 @@ class BuilderTest(unittest.TestCase):
def test_asstuple(self):
code = 'a, b = range(2)'
- astroid = test_utils.build_module(code)
+ astroid = builder.parse(code)
self.assertIn('b', astroid.locals)
code = '''
def visit_if(self, node):
node.test, body = node.tests[0]
'''
- astroid = test_utils.build_module(code)
+ astroid = builder.parse(code)
self.assertIn('body', astroid['visit_if'].locals)
def test_build_constants(self):
@@ -555,7 +559,7 @@ class BuilderTest(unittest.TestCase):
return
return 'None'
'''
- astroid = test_utils.build_module(code)
+ astroid = builder.parse(code)
none, nothing, chain = [ret.value for ret in astroid.body[0].body]
self.assertIsInstance(none, nodes.Const)
self.assertIsNone(none.value)
@@ -650,7 +654,7 @@ class FileBuildTest(unittest.TestCase):
self.assertEqual(klass.parent.frame(), module)
self.assertEqual(klass.root(), module)
self.assertEqual(klass.basenames, [])
- if IS_PY3:
+ if six.PY3:
self.assertTrue(klass.newstyle)
else:
self.assertFalse(klass.newstyle)
@@ -728,7 +732,7 @@ class ModuleBuildTest(resources.SysPathSetup, FileBuildTest):
else:
self.module = abuilder.module_build(data.module, 'data.module')
-@unittest.skipIf(IS_PY3, "guess_encoding not used on Python 3")
+@unittest.skipIf(six.PY3, "guess_encoding not used on Python 3")
class TestGuessEncoding(unittest.TestCase):
def setUp(self):
self.guess_encoding = builder._guess_encoding
diff --git a/astroid/tests/unittest_helpers.py b/astroid/tests/unittest_helpers.py
index 9ba3e6b3..a69c1361 100644
--- a/astroid/tests/unittest_helpers.py
+++ b/astroid/tests/unittest_helpers.py
@@ -22,6 +22,7 @@ import six
from six.moves import builtins
from astroid import bases
+from astroid import builder
from astroid import helpers
from astroid import manager
from astroid import raw_building
@@ -117,7 +118,7 @@ class TestHelpers(unittest.TestCase):
@test_utils.require_version(minver='3.0')
def test_object_type_metaclasses(self):
- module = test_utils.build_module('''
+ module = builder.parse('''
import abc
class Meta(metaclass=abc.ABCMeta):
pass
diff --git a/astroid/tests/unittest_inference.py b/astroid/tests/unittest_inference.py
index 2d6ab502..beb85e47 100644
--- a/astroid/tests/unittest_inference.py
+++ b/astroid/tests/unittest_inference.py
@@ -25,6 +25,7 @@ import unittest
import six
from astroid import InferenceError, builder, nodes
+from astroid.builder import parse
from astroid.inference import infer_end as inference_infer_end
from astroid.bases import YES, Instance, BoundMethod, UnboundMethod,\
path_wrapper, BUILTINS
@@ -123,10 +124,10 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
a, b= b, a # Gasp !
'''
- ast = test_utils.build_module(CODE, __name__)
+ ast = parse(CODE, __name__)
def test_infer_abstract_property_return_values(self):
- module = test_utils.build_module('''
+ module = parse('''
import abc
class A(object):
@@ -362,7 +363,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
a = f()
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
a = ast['a']
a_inferred = a.inferred()
self.assertEqual(a_inferred[0].value, 1)
@@ -392,7 +393,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
ex2 = ex
raise
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
ex1 = ast['ex1']
ex1_infer = ex1.infer()
ex1 = next(ex1_infer)
@@ -422,7 +423,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
a = 2
d = a
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
n = ast['b']
n_infer = n.infer()
inferred = next(n_infer)
@@ -447,7 +448,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
s = ''
s2 = '_'
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
n = ast['l']
inferred = next(n.infer())
self.assertIsInstance(inferred, nodes.List)
@@ -481,7 +482,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertEqual(inferred.getitem(0).value, '_')
code = 's = {1}'
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
n = ast['s']
inferred = next(n.infer())
self.assertIsInstance(inferred, nodes.Set)
@@ -492,7 +493,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
@test_utils.require_version(maxver='3.0')
def test_unicode_type(self):
code = '''u = u""'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
n = ast['u']
inferred = next(n.infer())
self.assertIsInstance(inferred, nodes.Const)
@@ -507,7 +508,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
statm = staticmethod(open)
clsm = classmethod('whatever')
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
statm = next(ast['A'].igetattr('statm'))
self.assertTrue(statm.callable())
clsm = next(ast['A'].igetattr('clsm'))
@@ -518,7 +519,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
class Warning(Warning):
pass
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
w = ast['Warning']
ancestors = w.ancestors()
ancestor = next(ancestors)
@@ -540,7 +541,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
from astroid.modutils import load_module_from_name
xxx = load_module_from_name('__pkginfo__')
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
xxx = ast['xxx']
self.assertSetEqual({n.__class__ for n in xxx.inferred()},
{nodes.Const, YES.__class__})
@@ -556,7 +557,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
kwargs['e_type'] = e_type.capitalize().encode()
print(args)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
arg = test_utils.get_name_node(ast['ErudiEntitySchema']['__init__'], 'e_type')
self.assertEqual([n.__class__ for n in arg.infer()],
[YES.__class__])
@@ -621,7 +622,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
if ok:
fct(a_line)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
self.assertEqual(len(list(ast['process_line'].infer_call_result(None))), 3)
self.assertEqual(len(list(ast['tupletest'].infer())), 3)
values = ['FunctionDef(first_word)', 'FunctionDef(last_word)', 'Const(NoneType)']
@@ -657,7 +658,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
something = 1.0j
return something.conjugate()
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
values = [i.value for i in test_utils.get_name_node(ast, 'something', -1).infer()]
self.assertEqual(values, [1.0, 1.0j])
@@ -715,7 +716,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertEqual(inferred.value, 97)
def test_simple_tuple(self):
- module = test_utils.build_module("""
+ module = parse("""
a = (1,)
b = (22,)
some = a + b #@
@@ -736,7 +737,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
print ([(d,e) for e,d in ([1,2], [3,4])])
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
self.assertEqual([i.value for i in
test_utils.get_name_node(ast, 'a', -1).infer()], [1, 2, 3])
self.assertEqual([i.value for i in
@@ -752,7 +753,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
code = '''
print ((d,e) for e,d in ([1,2], [3,4]))
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
self.assertEqual([i.value for i in
test_utils.get_name_node(ast, 'd', -1).infer()], [2, 4])
self.assertEqual([i.value for i in
@@ -795,7 +796,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
un = mirror(1)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = list(ast.igetattr('un'))
self.assertEqual(len(inferred), 1)
self.assertIsInstance(inferred[0], nodes.Const)
@@ -807,7 +808,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
un = mirror(1)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = list(ast.igetattr('mirror'))
self.assertEqual(len(inferred), 1)
self.assertIsInstance(inferred[0], nodes.Lambda)
@@ -829,7 +830,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
sub = Sub.instance()
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = list(ast.igetattr('sub'))
self.assertEqual(len(inferred), 1)
self.assertIsInstance(inferred[0], Instance)
@@ -844,7 +845,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
from os.path import exists as e
assert e(__file__)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = list(ast.igetattr('osp'))
self.assertEqual(len(inferred), 1)
self.assertIsInstance(inferred[0], nodes.Module)
@@ -1020,7 +1021,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
x = randint(1)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = list(ast.igetattr('x'))
self.assertEqual(len(inferred), 2)
value = [str(v) for v in inferred]
@@ -1047,7 +1048,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
def f(x):
a = ()[x]
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = list(ast['f'].ilookup('a'))
self.assertEqual(len(inferred), 1)
self.assertEqual(inferred[0], YES)
@@ -1066,7 +1067,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
def __init__(self):
self.attr = 41
"""
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
foo_class = ast['Foo']
bar_class = ast['Bar']
bar_self = ast['Bar']['__init__']['self']
@@ -1131,7 +1132,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
print(Browser)
b = Browser()
'''
- ast = test_utils.build_module(data, __name__)
+ ast = parse(data, __name__)
browser = next(test_utils.get_name_node(ast, 'Browser').infer())
self.assertIsInstance(browser, nodes.ClassDef)
bopen = list(browser.igetattr('open'))
@@ -1163,7 +1164,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
my_me = SendMailController().me
'''
decorators = set(['%s.property' % BUILTINS])
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
self.assertEqual(ast['SendMailController']['smtp'].decoratornames(),
decorators)
propinferred = list(ast.body[2].value.infer())
@@ -1193,7 +1194,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
pactions = EnvBasedTC.pactions.im_func
print (pactions)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
pactions = test_utils.get_name_node(ast, 'pactions')
inferred = list(pactions.infer())
self.assertEqual(len(inferred), 1)
@@ -1209,7 +1210,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
a += 2
print (a)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = list(test_utils.get_name_node(ast, 'a').infer())
self.assertEqual(len(inferred), 1)
@@ -1226,7 +1227,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
spam = bar(None, qux)
print (spam)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = list(test_utils.get_name_node(ast['foo'], 'spam').infer())
self.assertEqual(len(inferred), 1)
self.assertIs(inferred[0], YES)
@@ -1251,7 +1252,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
p = self.app
print (p)
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = list(Instance(ast['DataManager']).igetattr('app'))
self.assertEqual(len(inferred), 2, inferred) # None / Instance(Application)
inferred = list(test_utils.get_name_node(ast['DataManager']['test'], 'p').infer())
@@ -1277,7 +1278,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
Z = test()
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
inferred = next(ast['Z'].infer())
self.assertIsInstance(inferred, nodes.List)
self.assertEqual(len(inferred.elts), 0)
@@ -1293,7 +1294,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
n = NewTest()
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
self.assertRaises(InferenceError, list, ast['NewTest'].igetattr('arg'))
n = next(ast['n'].infer())
inferred = list(n.igetattr('arg'))
@@ -1306,7 +1307,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
class Xxx(nonregr.Aaa, nonregr.Ccc):
"doc"
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
parents = list(ast['Xxx'].ancestors())
self.assertEqual(len(parents), 3, parents) # Aaa, Ccc, object
@@ -1316,7 +1317,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
A = namedtuple('A', ['a', 'b'])
B = namedtuple('B', 'a b')
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
aclass = ast['A'].inferred()[0]
self.assertIsInstance(aclass, nodes.ClassDef)
self.assertIn('a', aclass.instance_attrs)
@@ -1348,7 +1349,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
empty = A.empty()
empty_list = A().empty_method()
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
int_node = ast['x'].inferred()[0]
self.assertIsInstance(int_node, nodes.Const)
self.assertEqual(int_node.value, 1)
@@ -1369,7 +1370,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
vararg = args
kwarg = kwargs
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
func = ast['test']
vararg = func.body[0].value
kwarg = func.body[1].value
@@ -1393,7 +1394,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
"""
# Test that inferring Thread.__init__ looks up in
# the nested scope.
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
callfunc = next(ast.nodes_of_class(nodes.Call))
func = callfunc.func
inferred = func.inferred()[0]
@@ -1409,7 +1410,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
sub = a - b
mul = a * b
"""
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
sub = ast['sub'].inferred()[0]
mul = ast['mul'].inferred()[0]
self.assertIs(sub, YES)
@@ -1428,7 +1429,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
sub = a - b
mul = a * b
"""
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
sub = ast['sub'].inferred()[0]
mul = ast['mul'].inferred()[0]
self.assertIs(sub, YES)
@@ -1448,7 +1449,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
sub = a - b
mul = a * b
"""
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
sub = ast['sub'].inferred()[0]
mul = ast['mul'].inferred()[0]
self.assertIs(sub, YES)
@@ -1466,7 +1467,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
b = A()
c = a * b
"""
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
node = ast['c']
self.assertEqual(node.inferred(), [YES])
@@ -1488,7 +1489,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
def do_a_thing():
pass
"""
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
node = ast['do_a_thing']
self.assertEqual(node.type, 'function')
@@ -1768,7 +1769,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
return "second"
'''
- ast = test_utils.build_module(code, __name__)
+ ast = parse(code, __name__)
bases = ast['Second'].bases[0]
inferred = next(bases.infer())
self.assertTrue(inferred)
@@ -1776,7 +1777,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertEqual(inferred.qname(), 'collections.Counter')
def test_inferring_with_statement_failures(self):
- module = test_utils.build_module('''
+ module = parse('''
class NoEnter(object):
pass
class NoMethod(object):
@@ -1797,7 +1798,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertRaises(InferenceError, next, module['no_elts'].infer())
def test_inferring_with_statement(self):
- module = test_utils.build_module('''
+ module = parse('''
class SelfContext(object):
def __enter__(self):
return self
@@ -1848,7 +1849,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertEqual(inferred.value, 2)
def test_inferring_with_contextlib_contextmanager(self):
- module = test_utils.build_module('''
+ module = parse('''
import contextlib
from contextlib import contextmanager
@@ -1906,7 +1907,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
# indices. This is the case of contextlib.nested, where the
# result is a list, which is mutated later on, so it's
# undetected by astroid.
- module = test_utils.build_module('''
+ module = parse('''
class Manager(object):
def __enter__(self):
return []
@@ -1916,7 +1917,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertRaises(InferenceError, next, module['a'].infer())
def test_inferring_with_contextlib_contextmanager_failures(self):
- module = test_utils.build_module('''
+ module = parse('''
from contextlib import contextmanager
def no_decorators_mgr():
@@ -2144,7 +2145,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
def test_bool_value(self):
# Verify the truth value of nodes.
- module = test_utils.build_module('''
+ module = parse('''
import collections
collections_module = collections
def function(): pass
diff --git a/astroid/tests/unittest_lookup.py b/astroid/tests/unittest_lookup.py
index 4811981d..28c60209 100644
--- a/astroid/tests/unittest_lookup.py
+++ b/astroid/tests/unittest_lookup.py
@@ -17,13 +17,15 @@
# with astroid. If not, see <http://www.gnu.org/licenses/>.
"""tests for the astroid variable lookup capabilities
"""
+import functools
import sys
-from functools import partial
import unittest
-from astroid import nodes, InferenceError, NotFoundError, UnresolvableName
-from astroid.scoped_nodes import builtin_lookup
-from astroid.bases import YES
+from astroid import bases
+from astroid import builder
+from astroid import exceptions
+from astroid import nodes
+from astroid import scoped_nodes
from astroid import test_utils
from astroid.tests import resources
@@ -48,7 +50,7 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
def func():
c = 1
'''
- astroid = test_utils.build_module(code, __name__)
+ astroid = builder.parse(code, __name__)
# a & b
a = next(astroid.nodes_of_class(nodes.Name))
self.assertEqual(a.lineno, 2)
@@ -67,19 +69,20 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
b_value = next(b_infer)
self.assertEqual(b_value.value, 1)
# c
- self.assertRaises(StopIteration, partial(next, b_infer))
+ self.assertRaises(StopIteration, functools.partial(next, b_infer))
func = astroid.locals['func'][0]
self.assertEqual(len(func.lookup('c')[1]), 1)
def test_module(self):
- astroid = test_utils.build_module('pass', __name__)
+ astroid = builder.parse('pass', __name__)
# built-in objects
none = next(astroid.ilookup('None'))
self.assertIsNone(none.value)
obj = next(astroid.ilookup('object'))
self.assertIsInstance(obj, nodes.ClassDef)
self.assertEqual(obj.name, 'object')
- self.assertRaises(InferenceError, partial(next, astroid.ilookup('YOAA')))
+ self.assertRaises(exceptions.InferenceError,
+ functools.partial(next, astroid.ilookup('YOAA')))
# XXX
self.assertEqual(len(list(self.nonregr.ilookup('enumerate'))), 2)
@@ -92,7 +95,7 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
class A(A):
pass
'''
- astroid = test_utils.build_module(code, __name__)
+ astroid = builder.parse(code, __name__)
cls1 = astroid.locals['A'][0]
cls2 = astroid.locals['A'][1]
name = next(cls2.nodes_of_class(nodes.Name))
@@ -105,8 +108,8 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
self.assertTrue(isinstance(my_dict, nodes.Dict), my_dict)
none = next(method.ilookup('None'))
self.assertIsNone(none.value)
- self.assertRaises(InferenceError, partial(next, method.ilookup('YOAA')))
-
+ self.assertRaises(exceptions.InferenceError,
+ functools.partial(next, method.ilookup('YOAA')))
def test_function_argument_with_default(self):
make_class = self.module2['make_class']
@@ -124,15 +127,15 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
obj = next(klass.ilookup('object'))
self.assertIsInstance(obj, nodes.ClassDef)
self.assertEqual(obj.name, 'object')
- self.assertRaises(InferenceError, partial(next, klass.ilookup('YOAA')))
+ self.assertRaises(exceptions.InferenceError,
+ functools.partial(next, klass.ilookup('YOAA')))
def test_inner_classes(self):
ddd = list(self.nonregr['Ccc'].ilookup('Ddd'))
self.assertEqual(ddd[0].name, 'Ddd')
-
def test_loopvar_hiding(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
x = 10
for x in range(5):
print (x)
@@ -148,7 +151,7 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
self.assertEqual(len(xnames[2].lookup('x')[1]), 2)
def test_list_comps(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
print ([ i for i in range(10) ])
print ([ i for i in range(10) ])
print ( list( i for i in range(10) ) )
@@ -163,18 +166,18 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
def test_list_comp_target(self):
"""test the list comprehension target"""
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
ten = [ var for var in range(10) ]
var
""")
var = astroid.body[1].value
if sys.version_info < (3, 0):
- self.assertEqual(var.inferred(), [YES])
+ self.assertEqual(var.inferred(), [bases.YES])
else:
- self.assertRaises(UnresolvableName, var.inferred)
+ self.assertRaises(exceptions.UnresolvableName, var.inferred)
def test_dict_comps(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
print ({ i: j for i in range(10) for j in range(10) })
print ({ i: j for i in range(10) for j in range(10) })
""", __name__)
@@ -191,7 +194,7 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
self.assertEqual(xnames[1].lookup('i')[1][0].lineno, 3)
def test_set_comps(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
print ({ i for i in range(10) })
print ({ i for i in range(10) })
""", __name__)
@@ -202,15 +205,15 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
self.assertEqual(xnames[1].lookup('i')[1][0].lineno, 3)
def test_set_comp_closure(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
ten = { var for var in range(10) }
var
""")
var = astroid.body[1].value
- self.assertRaises(UnresolvableName, var.inferred)
+ self.assertRaises(exceptions.UnresolvableName, var.inferred)
def test_generator_attributes(self):
- tree = test_utils.build_module("""
+ tree = builder.parse("""
def count():
"test"
yield 0
@@ -218,8 +221,8 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
iterer = count()
num = iterer.next()
""")
- next = tree.body[2].value.func # Getattr
- gener = next.expr.inferred()[0] # Generator
+ next = tree.body[2].value.func
+ gener = next.expr.inferred()[0]
if sys.version_info < (3, 0):
self.assertIsInstance(gener.getattr('next')[0], nodes.FunctionDef)
else:
@@ -240,18 +243,17 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
class NoName: pass
p3 = NoName()
'''
- astroid = test_utils.build_module(code, __name__)
+ astroid = builder.parse(code, __name__)
p1 = next(astroid['p1'].infer())
self.assertTrue(p1.getattr('__name__'))
p2 = next(astroid['p2'].infer())
self.assertTrue(p2.getattr('__name__'))
self.assertTrue(astroid['NoName'].getattr('__name__'))
p3 = next(astroid['p3'].infer())
- self.assertRaises(NotFoundError, p3.getattr, '__name__')
-
+ self.assertRaises(exceptions.NotFoundError, p3.getattr, '__name__')
def test_function_module_special(self):
- astroid = test_utils.build_module('''
+ astroid = builder.parse('''
def initialize(linter):
"""initialize linter with checkers in this package """
package_load(linter, __path__[0])
@@ -259,16 +261,14 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
path = [n for n in astroid.nodes_of_class(nodes.Name) if n.name == '__path__'][0]
self.assertEqual(len(path.lookup('__path__')[1]), 1)
-
def test_builtin_lookup(self):
- self.assertEqual(builtin_lookup('__dict__')[1], ())
- intstmts = builtin_lookup('int')[1]
+ self.assertEqual(scoped_nodes.builtin_lookup('__dict__')[1], ())
+ intstmts = scoped_nodes.builtin_lookup('int')[1]
self.assertEqual(len(intstmts), 1)
self.assertIsInstance(intstmts[0], nodes.ClassDef)
self.assertEqual(intstmts[0].name, 'int')
self.assertIs(intstmts[0], nodes.const_factory(1)._proxied)
-
def test_decorator_arguments_lookup(self):
code = '''
def decorator(value):
@@ -288,8 +288,7 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
obj = next(it)
self.assertIsInstance(obj, nodes.Const)
self.assertEqual(obj.value, 10)
- self.assertRaises(StopIteration, partial(next, it))
-
+ self.assertRaises(StopIteration, functools.partial(next, it))
def test_inner_decorator_member_lookup(self):
code = '''
@@ -305,8 +304,7 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
it = decname.infer()
obj = next(it)
self.assertIsInstance(obj, nodes.FunctionDef)
- self.assertRaises(StopIteration, partial(next, it))
-
+ self.assertRaises(StopIteration, functools.partial(next, it))
def test_static_method_lookup(self):
code = '''
@@ -322,12 +320,11 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
def __init__(self):
print (FileA.funcA())
'''
- astroid = test_utils.build_module(code, __name__)
+ astroid = builder.parse(code, __name__)
it = astroid['Test']['__init__'].ilookup('FileA')
obj = next(it)
self.assertIsInstance(obj, nodes.ClassDef)
- self.assertRaises(StopIteration, partial(next, it))
-
+ self.assertRaises(StopIteration, functools.partial(next, it))
def test_global_delete(self):
code = '''
@@ -343,7 +340,7 @@ class LookupTest(resources.SysPathSetup, unittest.TestCase):
def run1():
f = Frobble()
'''
- astroid = test_utils.build_module(code, __name__)
+ astroid = builder.parse(code, __name__)
stmts = astroid['run2'].lookup('Frobbel')[1]
self.assertEqual(len(stmts), 0)
stmts = astroid['run1'].lookup('Frobbel')[1]
diff --git a/astroid/tests/unittest_manager.py b/astroid/tests/unittest_manager.py
index fc11643b..7e4eeae7 100644
--- a/astroid/tests/unittest_manager.py
+++ b/astroid/tests/unittest_manager.py
@@ -20,12 +20,16 @@ import platform
import sys
import unittest
-from astroid.manager import AstroidManager
-from astroid.bases import BUILTINS
-from astroid.exceptions import AstroidBuildingException
+import six
+
+from astroid import exceptions
+from astroid import manager
from astroid.tests import resources
+BUILTINS = six.moves.builtins.__name__
+
+
def _get_file_from_object(obj):
if platform.python_implementation() == 'Jython':
return obj.__file__.split("$py.class")[0] + ".py"
@@ -41,7 +45,7 @@ class AstroidManagerTest(resources.SysPathSetup,
def setUp(self):
super(AstroidManagerTest, self).setUp()
- self.manager = AstroidManager()
+ self.manager = manager.AstroidManager()
self.manager.clear_cache(self._builtins) # take care of borg
def test_ast_from_file(self):
@@ -64,7 +68,8 @@ class AstroidManagerTest(resources.SysPathSetup,
self.assertIn('unittest', self.manager.astroid_cache)
def test_ast_from_file_name_astro_builder_exception(self):
- self.assertRaises(AstroidBuildingException, self.manager.ast_from_file, 'unhandledName')
+ self.assertRaises(exceptions.AstroidBuildingException,
+ self.manager.ast_from_file, 'unhandledName')
def test_do_not_expose_main(self):
obj = self.manager.ast_from_module_name('__main__')
@@ -83,7 +88,9 @@ class AstroidManagerTest(resources.SysPathSetup,
self.assertEqual(astroid.pure_python, False)
def test_ast_from_module_name_astro_builder_exception(self):
- self.assertRaises(AstroidBuildingException, self.manager.ast_from_module_name, 'unhandledModule')
+ self.assertRaises(exceptions.AstroidBuildingException,
+ self.manager.ast_from_module_name,
+ 'unhandledModule')
def _test_ast_from_zip(self, archive):
origpath = sys.path[:]
@@ -133,7 +140,8 @@ class AstroidManagerTest(resources.SysPathSetup,
def test_file_from_module_name_astro_building_exception(self):
"""check if the method launch a exception with a wrong module name"""
- self.assertRaises(AstroidBuildingException, self.manager.file_from_module_name, 'unhandledModule', None)
+ self.assertRaises(exceptions.AstroidBuildingException,
+ self.manager.file_from_module_name, 'unhandledModule', None)
def test_ast_from_module(self):
astroid = self.manager.ast_from_module(unittest)
@@ -171,20 +179,21 @@ class AstroidManagerTest(resources.SysPathSetup,
def test_ast_from_class_attr_error(self):
"""give a wrong class at the ast_from_class method"""
- self.assertRaises(AstroidBuildingException, self.manager.ast_from_class, None)
+ self.assertRaises(exceptions.AstroidBuildingException,
+ self.manager.ast_from_class, None)
def testFailedImportHooks(self):
def hook(modname):
if modname == 'foo.bar':
return unittest
else:
- raise AstroidBuildingException()
+ raise exceptions.AstroidBuildingException()
- with self.assertRaises(AstroidBuildingException):
+ with self.assertRaises(exceptions.AstroidBuildingException):
self.manager.ast_from_module_name('foo.bar')
self.manager.register_failed_import_hook(hook)
self.assertEqual(unittest, self.manager.ast_from_module_name('foo.bar'))
- with self.assertRaises(AstroidBuildingException):
+ with self.assertRaises(exceptions.AstroidBuildingException):
self.manager.ast_from_module_name('foo.bar.baz')
del self.manager._failed_import_hooks[0]
@@ -194,10 +203,10 @@ class BorgAstroidManagerTC(unittest.TestCase):
def test_borg(self):
"""test that the AstroidManager is really a borg, i.e. that two different
instances has same cache"""
- first_manager = AstroidManager()
+ first_manager = manager.AstroidManager()
built = first_manager.ast_from_module_name(BUILTINS)
- second_manager = AstroidManager()
+ second_manager = manager.AstroidManager()
second_built = second_manager.ast_from_module_name(BUILTINS)
self.assertIs(built, second_built)
diff --git a/astroid/tests/unittest_nodes.py b/astroid/tests/unittest_nodes.py
index 4313d3f0..4aaa968e 100644
--- a/astroid/tests/unittest_nodes.py
+++ b/astroid/tests/unittest_nodes.py
@@ -19,20 +19,22 @@
"""
import os
import sys
-import unittest
import textwrap
+import unittest
+
+import six
-from astroid.node_classes import unpack_infer
-from astroid.bases import BUILTINS, InferenceContext
-from astroid.exceptions import AstroidBuildingException, NotFoundError
from astroid import bases
from astroid import builder
+from astroid import exceptions
+from astroid import node_classes
from astroid import nodes
from astroid import test_utils
from astroid.tests import resources
abuilder = builder.AstroidBuilder()
+BUILTINS = six.moves.builtins.__name__
class AsStringTest(resources.SysPathSetup, unittest.TestCase):
@@ -159,7 +161,7 @@ class _NodeTest(unittest.TestCase):
try:
return self.__class__.__dict__['CODE_Astroid']
except KeyError:
- astroid = test_utils.build_module(self.CODE)
+ astroid = builder.parse(self.CODE)
self.__class__.CODE_Astroid = astroid
return astroid
@@ -195,15 +197,15 @@ class IfNodeTest(_NodeTest):
self.assertEqual(len(self.astroid.body), 4)
for stmt in self.astroid.body:
self.assertIsInstance(stmt, nodes.If)
- self.assertFalse(self.astroid.body[0].orelse) # simple If
- self.assertIsInstance(self.astroid.body[1].orelse[0], nodes.Pass) # If / else
- self.assertIsInstance(self.astroid.body[2].orelse[0], nodes.If) # If / elif
+ self.assertFalse(self.astroid.body[0].orelse) # simple If
+ self.assertIsInstance(self.astroid.body[1].orelse[0], nodes.Pass) # If / else
+ self.assertIsInstance(self.astroid.body[2].orelse[0], nodes.If) # If / elif
self.assertIsInstance(self.astroid.body[3].orelse[0].orelse[0], nodes.If)
def test_block_range(self):
# XXX ensure expected values
self.assertEqual(self.astroid.block_range(1), (0, 22))
- self.assertEqual(self.astroid.block_range(10), (0, 22)) # XXX (10, 22) ?
+ self.assertEqual(self.astroid.block_range(10), (0, 22)) # XXX (10, 22) ?
self.assertEqual(self.astroid.body[1].block_range(5), (5, 6))
self.assertEqual(self.astroid.body[1].block_range(6), (6, 6))
self.assertEqual(self.astroid.body[1].orelse[0].block_range(7), (7, 8))
@@ -270,6 +272,7 @@ class TryExceptFinallyNodeTest(_NodeTest):
self.assertEqual(self.astroid.body[0].block_range(6), (6, 6))
+@unittest.skipIf(six.PY3, "Python 2 specific test.")
class TryExcept2xNodeTest(_NodeTest):
CODE = """
try:
@@ -277,9 +280,9 @@ class TryExcept2xNodeTest(_NodeTest):
except AttributeError, (retval, desc):
pass
"""
+
+
def test_tuple_attribute(self):
- if sys.version_info >= (3, 0):
- self.skipTest('syntax removed from py3.x')
handler = self.astroid.body[0].handlers[0]
self.assertIsInstance(handler.name, nodes.Tuple)
@@ -317,13 +320,13 @@ class ImportNodeTest(resources.SysPathSetup, unittest.TestCase):
self.assertEqual(from_.real_name('pb'), 'ProgressBar')
imp_ = self.module['os']
self.assertEqual(imp_.real_name('os'), 'os')
- self.assertRaises(NotFoundError, imp_.real_name, 'os.path')
+ self.assertRaises(exceptions.NotFoundError, imp_.real_name, 'os.path')
imp_ = self.module['pb']
self.assertEqual(imp_.real_name('pb'), 'ProgressBar')
- self.assertRaises(NotFoundError, imp_.real_name, 'ProgressBar')
+ self.assertRaises(exceptions.NotFoundError, imp_.real_name, 'ProgressBar')
imp_ = self.module2['YO']
self.assertEqual(imp_.real_name('YO'), 'YO')
- self.assertRaises(NotFoundError, imp_.real_name, 'data')
+ self.assertRaises(exceptions.NotFoundError, imp_.real_name, 'data')
def test_as_string(self):
ast = self.module['modutils']
@@ -359,10 +362,10 @@ from ..cave import wine\n\n"""
except PickleError:
pass
'''
- astroid = test_utils.build_module(code)
+ astroid = builder.parse(code)
handler_type = astroid.body[1].handlers[0].type
- excs = list(unpack_infer(handler_type))
+ excs = list(node_classes.unpack_infer(handler_type))
# The number of returned object can differ on Python 2
# and Python 3. In one version, an additional item will
# be returned, from the _pickle module, which is not
@@ -373,7 +376,7 @@ from ..cave import wine\n\n"""
def test_absolute_import(self):
astroid = resources.build_file('data/absimport.py')
- ctx = InferenceContext()
+ ctx = bases.InferenceContext()
# will fail if absolute import failed
ctx.lookupname = 'message'
next(astroid['message'].infer(ctx))
@@ -434,10 +437,10 @@ class NameNodeTest(unittest.TestCase):
del True
"""
if sys.version_info >= (3, 0):
- with self.assertRaises(AstroidBuildingException):
- test_utils.build_module(code)
+ with self.assertRaises(exceptions.AstroidBuildingException):
+ builder.parse(code)
else:
- ast = test_utils.build_module(code)
+ ast = builder.parse(code)
ass_true = ast['True']
self.assertIsInstance(ass_true, nodes.AssignName)
self.assertEqual(ass_true.name, "True")
@@ -448,7 +451,7 @@ class NameNodeTest(unittest.TestCase):
class ArgumentsNodeTC(unittest.TestCase):
def test_linenumbering(self):
- ast = test_utils.build_module('''
+ ast = builder.parse('''
def func(a,
b): pass
x = lambda x: None
@@ -481,14 +484,14 @@ class UnboundMethodNodeTest(unittest.TestCase):
# https://bitbucket.org/logilab/astroid/issue/91, which tests
# that UnboundMethod doesn't call super when doing .getattr.
- ast = test_utils.build_module('''
+ ast = builder.parse('''
class A(object):
def test(self):
pass
meth = A.test
''')
node = next(ast['meth'].infer())
- with self.assertRaises(NotFoundError):
+ with self.assertRaises(exceptions.NotFoundError):
node.getattr('__missssing__')
name = node.getattr('__name__')[0]
self.assertIsInstance(name, nodes.Const)
@@ -498,7 +501,7 @@ class UnboundMethodNodeTest(unittest.TestCase):
class BoundMethodNodeTest(unittest.TestCase):
def test_is_property(self):
- ast = test_utils.build_module('''
+ ast = builder.parse('''
import abc
def cached_property():
diff --git a/astroid/tests/unittest_peephole.py b/astroid/tests/unittest_peephole.py
index 0dcc39f2..78349898 100644
--- a/astroid/tests/unittest_peephole.py
+++ b/astroid/tests/unittest_peephole.py
@@ -24,6 +24,7 @@ import unittest
import astroid
from astroid import astpeephole
+from astroid import builder
from astroid import manager
from astroid import test_utils
from astroid.tests import resources
@@ -104,7 +105,7 @@ class PeepholeOptimizer(unittest.TestCase):
def test_optimisation_disabled(self):
try:
MANAGER.optimize_ast = False
- module = test_utils.build_module("""
+ module = builder.parse("""
'1' + '2' + '3'
""")
self.assertIsInstance(module.body[0], astroid.Expr)
diff --git a/astroid/tests/unittest_scoped_nodes.py b/astroid/tests/unittest_scoped_nodes.py
index a03abedb..1a1134fd 100644
--- a/astroid/tests/unittest_scoped_nodes.py
+++ b/astroid/tests/unittest_scoped_nodes.py
@@ -108,7 +108,7 @@ class ModuleNodeTest(ModuleLoader, unittest.TestCase):
res = sorted(m.wildcard_import_names())
self.assertEqual(res, ['Aaa', 'func', 'name', 'other'])
- m = test_utils.build_module('''
+ m = builder.parse('''
from missing import tzop
trop = "test"
__all__ = (trop, "test1", tzop, 42)
@@ -116,7 +116,7 @@ class ModuleNodeTest(ModuleLoader, unittest.TestCase):
res = sorted(m.wildcard_import_names())
self.assertEqual(res, ["test", "test1"])
- m = test_utils.build_module('''
+ m = builder.parse('''
test = tzop = 42
__all__ = ('test', ) + ('tzop', )
''')
@@ -129,7 +129,7 @@ class ModuleNodeTest(ModuleLoader, unittest.TestCase):
appli += 2
del appli
'''
- astroid = test_utils.build_module(data, __name__)
+ astroid = builder.parse(data, __name__)
# test del statement not returned by getattr
self.assertEqual(len(astroid.getattr('appli')), 2,
astroid.getattr('appli'))
@@ -161,7 +161,7 @@ class ModuleNodeTest(ModuleLoader, unittest.TestCase):
def test_import_1(self):
data = '''from . import subpackage'''
sys.path.insert(0, resources.find('data'))
- astroid = test_utils.build_module(data, 'package', 'data/package/__init__.py')
+ astroid = builder.parse(data, 'package', 'data/package/__init__.py')
try:
m = astroid.import_module('', level=1)
self.assertEqual(m.name, 'package')
@@ -174,7 +174,7 @@ class ModuleNodeTest(ModuleLoader, unittest.TestCase):
def test_import_2(self):
data = '''from . import subpackage as pouet'''
- astroid = test_utils.build_module(data, 'package', 'data/package/__init__.py')
+ astroid = builder.parse(data, 'package', 'data/package/__init__.py')
sys.path.insert(0, resources.find('data'))
try:
m = astroid.import_module('', level=1)
@@ -188,7 +188,7 @@ class ModuleNodeTest(ModuleLoader, unittest.TestCase):
def test_file_stream_in_memory(self):
data = '''irrelevant_variable is irrelevant'''
- astroid = test_utils.build_module(data, 'in_memory')
+ astroid = builder.parse(data, 'in_memory')
with warnings.catch_warnings(record=True):
self.assertEqual(astroid.file_stream.read().decode(), data)
@@ -280,7 +280,7 @@ class FunctionNodeTest(ModuleLoader, unittest.TestCase):
def nested_args(a, (b, c, d)):
"nested arguments test"
'''
- tree = test_utils.build_module(code)
+ tree = builder.parse(code)
func = tree['nested_args']
self.assertEqual(sorted(func.locals), ['a', 'b', 'c', 'd'])
self.assertEqual(func.args.format_args(), 'a, (b, c, d)')
@@ -353,12 +353,12 @@ class FunctionNodeTest(ModuleLoader, unittest.TestCase):
def f():
g = lambda: None
'''
- astroid = test_utils.build_module(data)
+ astroid = builder.parse(data)
g = list(astroid['f'].ilookup('g'))[0]
self.assertEqual(g.pytype(), '%s.function' % BUILTINS)
def test_lambda_qname(self):
- astroid = test_utils.build_module('lmbd = lambda: None', __name__)
+ astroid = builder.parse('lmbd = lambda: None', __name__)
self.assertEqual('%s.<lambda>' % __name__, astroid['lmbd'].parent.value.qname())
def test_is_method(self):
@@ -380,7 +380,7 @@ class FunctionNodeTest(ModuleLoader, unittest.TestCase):
def sfunction():
return -1
'''
- astroid = test_utils.build_module(data)
+ astroid = builder.parse(data)
self.assertTrue(astroid['A']['meth1'].is_method())
self.assertTrue(astroid['A']['meth2'].is_method())
self.assertTrue(astroid['A']['meth3'].is_method())
@@ -392,7 +392,7 @@ class FunctionNodeTest(ModuleLoader, unittest.TestCase):
code = 'def f(a, (b, c), *args, **kwargs): pass'
else:
code = 'def f(a, b, c, *args, **kwargs): pass'
- astroid = test_utils.build_module(code, __name__)
+ astroid = builder.parse(code, __name__)
self.assertEqual(astroid['f'].argnames(), ['a', 'b', 'c', 'args', 'kwargs'])
def test_return_nothing(self):
@@ -403,7 +403,7 @@ class FunctionNodeTest(ModuleLoader, unittest.TestCase):
a = func()
'''
- astroid = test_utils.build_module(data)
+ astroid = builder.parse(data)
call = astroid.body[1].value
func_vals = call.inferred()
self.assertEqual(len(func_vals), 1)
@@ -419,7 +419,7 @@ class FunctionNodeTest(ModuleLoader, unittest.TestCase):
test.bar = 1
test()
"""
- astroid = test_utils.build_module(data, 'mod')
+ astroid = builder.parse(data, 'mod')
func = astroid.body[2].value.func.inferred()[0]
self.assertIsInstance(func, nodes.FunctionDef)
self.assertEqual(func.name, 'test')
@@ -428,7 +428,7 @@ class FunctionNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqual(one.value, 1)
def test_type_builtin_descriptor_subclasses(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
class classonlymethod(classmethod):
pass
class staticonlymethod(staticmethod):
@@ -459,7 +459,7 @@ class FunctionNodeTest(ModuleLoader, unittest.TestCase):
'staticmethod')
def test_decorator_builtin_descriptors(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
def static_decorator(platform=None, order=50):
def wrapper(f):
f.cgm_module = True
@@ -582,7 +582,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqual(len(cls.getattr('__mro__')), 1)
def test_cls_special_attributes_2(self):
- astroid = test_utils.build_module('''
+ astroid = builder.parse('''
class A: pass
class B: pass
@@ -611,7 +611,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqual(r_sibling.name, 'YOUPI')
def test_local_attr_ancestors(self):
- module = test_utils.build_module('''
+ module = builder.parse('''
class A():
def __init__(self): pass
class B(A): pass
@@ -646,7 +646,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertRaises(StopIteration, partial(next, it))
def test_local_attr_mro(self):
- module = test_utils.build_module('''
+ module = builder.parse('''
class A(object):
def __init__(self): pass
class B(A):
@@ -748,7 +748,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
return cls
registered = classmethod(registered)
'''
- astroid = test_utils.build_module(data, __name__)
+ astroid = builder.parse(data, __name__)
cls = astroid['WebAppObject']
self.assertEqual(sorted(cls.locals.keys()),
['appli', 'config', 'registered', 'schema'])
@@ -760,7 +760,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
appli += 2
del self.appli
'''
- astroid = test_utils.build_module(data, __name__)
+ astroid = builder.parse(data, __name__)
cls = astroid['WebAppObject']
# test del statement not returned by getattr
self.assertEqual(len(cls.getattr('appli')), 2)
@@ -774,7 +774,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.appli += 2
del self.appli
'''
- astroid = test_utils.build_module(data)
+ astroid = builder.parse(data)
inst = Instance(astroid['WebAppObject'])
# test del statement not returned by getattr
self.assertEqual(len(inst.getattr('appli')), 2)
@@ -798,7 +798,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
val = self.bb
self.aa += val
'''
- astroid = test_utils.build_module(data)
+ astroid = builder.parse(data)
inst = Instance(astroid['Klass'])
self.assertEqual(len(inst.getattr('aa')), 3, inst.getattr('aa'))
self.assertEqual(len(inst.getattr('bb')), 1, inst.getattr('bb'))
@@ -821,7 +821,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
inst = Clazz()
inst.m4 = func
'''
- astroid = test_utils.build_module(data)
+ astroid = builder.parse(data)
cls = astroid['Clazz']
# test del statement not returned by getattr
for method in ('m1', 'm2', 'm3'):
@@ -846,7 +846,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
class Past(Present):
pass
'''
- astroid = test_utils.build_module(data)
+ astroid = builder.parse(data)
past = astroid['Past']
attr = past.getattr('attr')
self.assertEqual(len(attr), 1)
@@ -866,7 +866,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
def g2():
pass
'''
- astroid = test_utils.build_module(data)
+ astroid = builder.parse(data)
self.assertEqual(astroid['g1'].fromlineno, 4)
self.assertEqual(astroid['g1'].tolineno, 5)
self.assertEqual(astroid['g2'].fromlineno, 9)
@@ -874,7 +874,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
@test_utils.require_version(maxver='3.0')
def test_simple_metaclass(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
class Test(object):
__metaclass__ = type
""")
@@ -884,7 +884,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqual(metaclass.name, 'type')
def test_metaclass_error(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
class Test(object):
__metaclass__ = typ
""")
@@ -893,7 +893,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
@test_utils.require_version(maxver='3.0')
def test_metaclass_imported(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
from abc import ABCMeta
class Test(object):
__metaclass__ = ABCMeta
@@ -905,7 +905,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqual(metaclass.name, 'ABCMeta')
def test_metaclass_yes_leak(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
# notice `ab` instead of `abc`
from ab import ABCMeta
@@ -917,7 +917,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
@test_utils.require_version(maxver='3.0')
def test_newstyle_and_metaclass_good(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
from abc import ABCMeta
class Test:
__metaclass__ = ABCMeta
@@ -925,7 +925,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
klass = astroid['Test']
self.assertTrue(klass.newstyle)
self.assertEqual(klass.metaclass().name, 'ABCMeta')
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
from abc import ABCMeta
__metaclass__ = ABCMeta
class Test:
@@ -937,7 +937,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
@test_utils.require_version(maxver='3.0')
def test_nested_metaclass(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
from abc import ABCMeta
class A(object):
__metaclass__ = ABCMeta
@@ -960,7 +960,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
@test_utils.require_version(maxver='3.0')
def test_parent_metaclass(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
from abc import ABCMeta
class Test:
__metaclass__ = ABCMeta
@@ -974,7 +974,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
@test_utils.require_version(maxver='3.0')
def test_metaclass_ancestors(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
from abc import ABCMeta
class FirstMeta(object):
@@ -1074,7 +1074,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertIsNone(inferred.metaclass())
def test_nonregr_infer_callresult(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
class Delegate(object):
def __get__(self, obj, cls):
return getattr(obj._subject, self.attribute)
@@ -1091,7 +1091,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqual(list(instance.infer()), [YES])
def test_slots(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
from collections import deque
from textwrap import dedent
@@ -1138,7 +1138,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
@test_utils.require_version(maxver='3.0')
def test_slots_py2(self):
- module = test_utils.build_module("""
+ module = builder.parse("""
class UnicodeSlots(object):
__slots__ = (u"a", u"b", "c")
""")
@@ -1150,7 +1150,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
@test_utils.require_version(maxver='3.0')
def test_slots_py2_not_implemented(self):
- module = test_utils.build_module("""
+ module = builder.parse("""
class OldStyle:
__slots__ = ("a", "b")
""")
@@ -1160,7 +1160,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqual(str(cm.exception), msg)
def test_slots_empty_list_of_slots(self):
- module = test_utils.build_module("""
+ module = builder.parse("""
class Klass(object):
__slots__ = ()
""")
@@ -1199,7 +1199,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertTrue(node.newstyle)
def test_with_metaclass_mro(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
import six
class C(object):
@@ -1212,7 +1212,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqualMro(astroid['A'], ['A', 'B', 'C', 'object'])
def test_mro(self):
- astroid = test_utils.build_module("""
+ astroid = builder.parse("""
class C(object): pass
class D(dict, C): pass
@@ -1346,7 +1346,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqual(inferred.value, 42)
def test_has_dynamic_getattr(self):
- module = test_utils.build_module("""
+ module = builder.parse("""
class Getattr(object):
def __getattr__(self, attrname):
pass
@@ -1370,7 +1370,7 @@ class ClassNodeTest(ModuleLoader, unittest.TestCase):
self.assertFalse(module['timedelta'].has_dynamic_getattr())
def test_duplicate_bases_namedtuple(self):
- module = test_utils.build_module("""
+ module = builder.parse("""
import collections
_A = collections.namedtuple('A', 'a')