diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | astroid/__init__.py | 1 | ||||
-rw-r--r-- | astroid/builder.py | 129 | ||||
-rw-r--r-- | astroid/scoped_nodes.py | 2 | ||||
-rw-r--r-- | astroid/test_utils.py | 18 | ||||
-rw-r--r-- | astroid/tests/unittest_brain.py | 11 | ||||
-rw-r--r-- | astroid/tests/unittest_builder.py | 72 | ||||
-rw-r--r-- | astroid/tests/unittest_helpers.py | 3 | ||||
-rw-r--r-- | astroid/tests/unittest_inference.py | 99 | ||||
-rw-r--r-- | astroid/tests/unittest_lookup.py | 79 | ||||
-rw-r--r-- | astroid/tests/unittest_manager.py | 35 | ||||
-rw-r--r-- | astroid/tests/unittest_nodes.py | 51 | ||||
-rw-r--r-- | astroid/tests/unittest_peephole.py | 3 | ||||
-rw-r--r-- | astroid/tests/unittest_scoped_nodes.py | 86 |
14 files changed, 305 insertions, 290 deletions
@@ -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') |