summaryrefslogtreecommitdiff
path: root/astroid/tests
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2016-02-13 15:01:03 +0000
committerClaudiu Popa <pcmanticore@gmail.com>2016-02-13 16:51:02 +0000
commitffa1ba873ca879ae2d259903b8add63f6e6eb2ac (patch)
treee9b81be8638ed01eae5f2e9ecff4327c406619bf /astroid/tests
parenta4a12428946b533dfebd5ecc38bcbef39288b499 (diff)
downloadastroid-git-ffa1ba873ca879ae2d259903b8add63f6e6eb2ac.tar.gz
Move testdata back into tests.
Diffstat (limited to 'astroid/tests')
-rw-r--r--astroid/tests/resources.py26
-rw-r--r--astroid/tests/testdata/data/MyPyPa-0.1.0-py2.5.eggbin0 -> 1222 bytes
-rw-r--r--astroid/tests/testdata/data/MyPyPa-0.1.0-py2.5.zipbin0 -> 1222 bytes
-rw-r--r--astroid/tests/testdata/data/SSL1/Connection1.py14
-rw-r--r--astroid/tests/testdata/data/SSL1/__init__.py1
-rw-r--r--astroid/tests/testdata/data/__init__.py1
-rw-r--r--astroid/tests/testdata/data/absimp/__init__.py5
-rw-r--r--astroid/tests/testdata/data/absimp/sidepackage/__init__.py3
-rw-r--r--astroid/tests/testdata/data/absimp/string.py3
-rw-r--r--astroid/tests/testdata/data/absimport.py3
-rw-r--r--astroid/tests/testdata/data/all.py9
-rw-r--r--astroid/tests/testdata/data/appl/__init__.py3
-rw-r--r--astroid/tests/testdata/data/appl/myConnection.py12
-rw-r--r--astroid/tests/testdata/data/descriptor_crash.py11
-rw-r--r--astroid/tests/testdata/data/email.py1
-rw-r--r--astroid/tests/testdata/data/find_test/__init__.py0
-rw-r--r--astroid/tests/testdata/data/find_test/module.py0
-rw-r--r--astroid/tests/testdata/data/find_test/module2.py0
-rw-r--r--astroid/tests/testdata/data/find_test/noendingnewline.py0
-rw-r--r--astroid/tests/testdata/data/find_test/nonregr.py0
-rw-r--r--astroid/tests/testdata/data/format.py34
-rw-r--r--astroid/tests/testdata/data/lmfp/__init__.py2
-rw-r--r--astroid/tests/testdata/data/lmfp/foo.py6
-rw-r--r--astroid/tests/testdata/data/module.py88
-rw-r--r--astroid/tests/testdata/data/module1abs/__init__.py4
-rw-r--r--astroid/tests/testdata/data/module1abs/core.py1
-rw-r--r--astroid/tests/testdata/data/module2.py142
-rw-r--r--astroid/tests/testdata/data/noendingnewline.py36
-rw-r--r--astroid/tests/testdata/data/nonregr.py57
-rw-r--r--astroid/tests/testdata/data/notall.py8
-rw-r--r--astroid/tests/testdata/data/notamodule/file.py0
-rw-r--r--astroid/tests/testdata/data/package/__init__.py4
-rw-r--r--astroid/tests/testdata/data/package/absimport.py6
-rw-r--r--astroid/tests/testdata/data/package/hello.py2
-rw-r--r--astroid/tests/testdata/data/package/import_package_subpackage_module.py49
-rw-r--r--astroid/tests/testdata/data/package/subpackage/__init__.py1
-rw-r--r--astroid/tests/testdata/data/package/subpackage/module.py1
-rw-r--r--astroid/tests/testdata/data/recursion.py3
-rw-r--r--astroid/tests/testdata/data/unicode_package/__init__.py1
-rw-r--r--astroid/tests/testdata/data/unicode_package/core/__init__.py0
-rw-r--r--astroid/tests/unittest_builder.py51
-rw-r--r--astroid/tests/unittest_modutils.py2
-rw-r--r--astroid/tests/unittest_nodes.py1
-rw-r--r--astroid/tests/unittest_scoped_nodes.py22
44 files changed, 597 insertions, 16 deletions
diff --git a/astroid/tests/resources.py b/astroid/tests/resources.py
index 175b9d17..1390088c 100644
--- a/astroid/tests/resources.py
+++ b/astroid/tests/resources.py
@@ -15,8 +15,12 @@
#
# You should have received a copy of the GNU Lesser General Public License along
# with astroid. If not, see <http://www.gnu.org/licenses/>.
+import binascii
+import contextlib
import os
import sys
+import shutil
+import tempfile
import pkg_resources
import six
@@ -25,12 +29,30 @@ from astroid import builder
from astroid import MANAGER
-DATA_DIR = 'testdata/python{}/'.format(sys.version_info[0])
+DATA_DIR = 'testdata'
BUILTINS = six.moves.builtins.__name__
+
+@contextlib.contextmanager
+def _temporary_file():
+ name = binascii.hexlify(os.urandom(5)).decode()
+ path = find(name)
+ try:
+ yield path
+ finally:
+ os.remove(path)
+
+@contextlib.contextmanager
+def tempfile_with_content(content):
+ with _temporary_file() as tmp:
+ with open(tmp, 'wb') as stream:
+ stream.write(content)
+ yield tmp
+
+
def find(name):
return pkg_resources.resource_filename(
- pkg_resources.Requirement.parse('astroid'),
+ 'astroid.tests',
os.path.normpath(os.path.join(DATA_DIR, name)))
diff --git a/astroid/tests/testdata/data/MyPyPa-0.1.0-py2.5.egg b/astroid/tests/testdata/data/MyPyPa-0.1.0-py2.5.egg
new file mode 100644
index 00000000..f62599c7
--- /dev/null
+++ b/astroid/tests/testdata/data/MyPyPa-0.1.0-py2.5.egg
Binary files differ
diff --git a/astroid/tests/testdata/data/MyPyPa-0.1.0-py2.5.zip b/astroid/tests/testdata/data/MyPyPa-0.1.0-py2.5.zip
new file mode 100644
index 00000000..f62599c7
--- /dev/null
+++ b/astroid/tests/testdata/data/MyPyPa-0.1.0-py2.5.zip
Binary files differ
diff --git a/astroid/tests/testdata/data/SSL1/Connection1.py b/astroid/tests/testdata/data/SSL1/Connection1.py
new file mode 100644
index 00000000..7373271d
--- /dev/null
+++ b/astroid/tests/testdata/data/SSL1/Connection1.py
@@ -0,0 +1,14 @@
+"""M2Crypto.SSL.Connection
+
+Copyright (c) 1999-2004 Ng Pheng Siong. All rights reserved."""
+
+RCS_id='$Id: Connection1.py,v 1.1 2005-06-13 20:55:22 syt Exp $'
+
+#Some code deleted here
+
+class Connection:
+
+ """An SSL connection."""
+
+ def __init__(self, ctx, sock=None):
+ print('init Connection')
diff --git a/astroid/tests/testdata/data/SSL1/__init__.py b/astroid/tests/testdata/data/SSL1/__init__.py
new file mode 100644
index 00000000..c83ededc
--- /dev/null
+++ b/astroid/tests/testdata/data/SSL1/__init__.py
@@ -0,0 +1 @@
+from .Connection1 import Connection
diff --git a/astroid/tests/testdata/data/__init__.py b/astroid/tests/testdata/data/__init__.py
new file mode 100644
index 00000000..332e2e72
--- /dev/null
+++ b/astroid/tests/testdata/data/__init__.py
@@ -0,0 +1 @@
+__revision__="$Id: __init__.py,v 1.1 2005-06-13 20:55:20 syt Exp $"
diff --git a/astroid/tests/testdata/data/absimp/__init__.py b/astroid/tests/testdata/data/absimp/__init__.py
new file mode 100644
index 00000000..b98444df
--- /dev/null
+++ b/astroid/tests/testdata/data/absimp/__init__.py
@@ -0,0 +1,5 @@
+"""a package with absolute import activated
+"""
+
+from __future__ import absolute_import
+
diff --git a/astroid/tests/testdata/data/absimp/sidepackage/__init__.py b/astroid/tests/testdata/data/absimp/sidepackage/__init__.py
new file mode 100644
index 00000000..239499a6
--- /dev/null
+++ b/astroid/tests/testdata/data/absimp/sidepackage/__init__.py
@@ -0,0 +1,3 @@
+"""a side package with nothing in it
+"""
+
diff --git a/astroid/tests/testdata/data/absimp/string.py b/astroid/tests/testdata/data/absimp/string.py
new file mode 100644
index 00000000..e68e7496
--- /dev/null
+++ b/astroid/tests/testdata/data/absimp/string.py
@@ -0,0 +1,3 @@
+from __future__ import absolute_import, print_function
+import string
+print(string)
diff --git a/astroid/tests/testdata/data/absimport.py b/astroid/tests/testdata/data/absimport.py
new file mode 100644
index 00000000..f98effa6
--- /dev/null
+++ b/astroid/tests/testdata/data/absimport.py
@@ -0,0 +1,3 @@
+from __future__ import absolute_import
+import email
+from email import message
diff --git a/astroid/tests/testdata/data/all.py b/astroid/tests/testdata/data/all.py
new file mode 100644
index 00000000..dd86abc5
--- /dev/null
+++ b/astroid/tests/testdata/data/all.py
@@ -0,0 +1,9 @@
+
+name = 'a'
+_bla = 2
+other = 'o'
+class Aaa: pass
+
+def func(): pass
+
+__all__ = 'Aaa', '_bla', 'name'
diff --git a/astroid/tests/testdata/data/appl/__init__.py b/astroid/tests/testdata/data/appl/__init__.py
new file mode 100644
index 00000000..d652ffd9
--- /dev/null
+++ b/astroid/tests/testdata/data/appl/__init__.py
@@ -0,0 +1,3 @@
+"""
+Init
+"""
diff --git a/astroid/tests/testdata/data/appl/myConnection.py b/astroid/tests/testdata/data/appl/myConnection.py
new file mode 100644
index 00000000..398484ad
--- /dev/null
+++ b/astroid/tests/testdata/data/appl/myConnection.py
@@ -0,0 +1,12 @@
+from __future__ import print_function
+from data import SSL1
+class MyConnection(SSL1.Connection):
+
+ """An SSL connection."""
+
+ def __init__(self, dummy):
+ print('MyConnection init')
+
+if __name__ == '__main__':
+ myConnection = MyConnection(' ')
+ input('Press Enter to continue...')
diff --git a/astroid/tests/testdata/data/descriptor_crash.py b/astroid/tests/testdata/data/descriptor_crash.py
new file mode 100644
index 00000000..11fbb4a2
--- /dev/null
+++ b/astroid/tests/testdata/data/descriptor_crash.py
@@ -0,0 +1,11 @@
+
+import urllib
+
+class Page(object):
+ _urlOpen = staticmethod(urllib.urlopen)
+
+ def getPage(self, url):
+ handle = self._urlOpen(url)
+ data = handle.read()
+ handle.close()
+ return data
diff --git a/astroid/tests/testdata/data/email.py b/astroid/tests/testdata/data/email.py
new file mode 100644
index 00000000..dc593564
--- /dev/null
+++ b/astroid/tests/testdata/data/email.py
@@ -0,0 +1 @@
+"""fake email module to test absolute import doesn't grab this one"""
diff --git a/astroid/tests/testdata/data/find_test/__init__.py b/astroid/tests/testdata/data/find_test/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/astroid/tests/testdata/data/find_test/__init__.py
diff --git a/astroid/tests/testdata/data/find_test/module.py b/astroid/tests/testdata/data/find_test/module.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/astroid/tests/testdata/data/find_test/module.py
diff --git a/astroid/tests/testdata/data/find_test/module2.py b/astroid/tests/testdata/data/find_test/module2.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/astroid/tests/testdata/data/find_test/module2.py
diff --git a/astroid/tests/testdata/data/find_test/noendingnewline.py b/astroid/tests/testdata/data/find_test/noendingnewline.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/astroid/tests/testdata/data/find_test/noendingnewline.py
diff --git a/astroid/tests/testdata/data/find_test/nonregr.py b/astroid/tests/testdata/data/find_test/nonregr.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/astroid/tests/testdata/data/find_test/nonregr.py
diff --git a/astroid/tests/testdata/data/format.py b/astroid/tests/testdata/data/format.py
new file mode 100644
index 00000000..73797061
--- /dev/null
+++ b/astroid/tests/testdata/data/format.py
@@ -0,0 +1,34 @@
+"""A multiline string
+"""
+
+function('aeozrijz\
+earzer', hop)
+# XXX write test
+x = [i for i in range(5)
+ if i % 4]
+
+fonction(1,
+ 2,
+ 3,
+ 4)
+
+def definition(a,
+ b,
+ c):
+ return a + b + c
+
+class debile(dict,
+ object):
+ pass
+
+if aaaa: pass
+else:
+ aaaa,bbbb = 1,2
+ aaaa,bbbb = bbbb,aaaa
+# XXX write test
+hop = \
+ aaaa
+
+
+__revision__.lower();
+
diff --git a/astroid/tests/testdata/data/lmfp/__init__.py b/astroid/tests/testdata/data/lmfp/__init__.py
new file mode 100644
index 00000000..74b26b82
--- /dev/null
+++ b/astroid/tests/testdata/data/lmfp/__init__.py
@@ -0,0 +1,2 @@
+# force a "direct" python import
+from . import foo
diff --git a/astroid/tests/testdata/data/lmfp/foo.py b/astroid/tests/testdata/data/lmfp/foo.py
new file mode 100644
index 00000000..8f7de1e8
--- /dev/null
+++ b/astroid/tests/testdata/data/lmfp/foo.py
@@ -0,0 +1,6 @@
+import sys
+if not getattr(sys, 'bar', None):
+ sys.just_once = []
+# there used to be two numbers here because
+# of a load_module_from_path bug
+sys.just_once.append(42)
diff --git a/astroid/tests/testdata/data/module.py b/astroid/tests/testdata/data/module.py
new file mode 100644
index 00000000..84185cfa
--- /dev/null
+++ b/astroid/tests/testdata/data/module.py
@@ -0,0 +1,88 @@
+"""test module for astroid
+"""
+
+__revision__ = '$Id: module.py,v 1.2 2005-11-02 11:56:54 syt Exp $'
+from astroid.tree.node_classes import Name as NameNode
+from astroid import modutils
+from astroid.utils import *
+import os.path
+MY_DICT = {}
+
+def global_access(key, val):
+ """function test"""
+ local = 1
+ MY_DICT[key] = val
+ for i in val:
+ if i:
+ del MY_DICT[i]
+ continue
+ else:
+ break
+ else:
+ return local
+
+
+class YO:
+ """hehe"""
+ a = 1
+
+ def __init__(self):
+ try:
+ self.yo = 1
+ except ValueError as ex:
+ pass
+ except (NameError, TypeError):
+ raise XXXError()
+ except:
+ raise
+
+
+
+class YOUPI(YO):
+ class_attr = None
+
+ def __init__(self):
+ self.member = None
+
+ def method(self):
+ """method test"""
+ try:
+ MY_DICT = {}
+ local = None
+ autre = [a for (a, b) in MY_DICT if b]
+ if b in autre:
+ return b
+ else:
+ if a in autre:
+ return a
+ global_access(local, val=autre)
+ finally:
+ return local
+
+ def static_method():
+ """static method test"""
+ assert MY_DICT, '???'
+ static_method = staticmethod(static_method)
+
+ def class_method(cls):
+ """class method test"""
+ pass
+ class_method = classmethod(class_method)
+
+
+def four_args(a, b, c, d):
+ """four arguments (was nested_args)"""
+ pass
+ while 1:
+ if a:
+ break
+ a += +1
+ else:
+ b += -2
+ if c:
+ d = ((a) and (b)) or (c)
+ else:
+ c = ((a) and (b)) or (d)
+ list(map(lambda x, y: (y, x), a))
+redirect = four_args
+
diff --git a/astroid/tests/testdata/data/module1abs/__init__.py b/astroid/tests/testdata/data/module1abs/__init__.py
new file mode 100644
index 00000000..42949a44
--- /dev/null
+++ b/astroid/tests/testdata/data/module1abs/__init__.py
@@ -0,0 +1,4 @@
+from __future__ import absolute_import, print_function
+from . import core
+from .core import *
+print(sys.version)
diff --git a/astroid/tests/testdata/data/module1abs/core.py b/astroid/tests/testdata/data/module1abs/core.py
new file mode 100644
index 00000000..de101117
--- /dev/null
+++ b/astroid/tests/testdata/data/module1abs/core.py
@@ -0,0 +1 @@
+import sys
diff --git a/astroid/tests/testdata/data/module2.py b/astroid/tests/testdata/data/module2.py
new file mode 100644
index 00000000..72d08c51
--- /dev/null
+++ b/astroid/tests/testdata/data/module2.py
@@ -0,0 +1,142 @@
+from __future__ import print_function
+from data.module import YO, YOUPI
+import data
+
+
+class Specialization(YOUPI, YO):
+ pass
+
+
+
+class Metaclass(type):
+ pass
+
+
+
+class Interface:
+ pass
+
+
+
+class MyIFace(Interface):
+ pass
+
+
+
+class AnotherIFace(Interface):
+ pass
+
+
+
+class MyException(Exception):
+ pass
+
+
+
+class MyError(MyException):
+ pass
+
+
+
+class AbstractClass(object):
+
+ def to_override(self, whatever):
+ raise NotImplementedError()
+
+ def return_something(self, param):
+ if param:
+ return 'toto'
+ return
+
+
+
+class Concrete0:
+ __implements__ = MyIFace
+
+
+
+class Concrete1:
+ __implements__ = (MyIFace, AnotherIFace)
+
+
+
+class Concrete2:
+ __implements__ = (MyIFace, AnotherIFace)
+
+
+
+class Concrete23(Concrete1):
+ pass
+
+del YO.member
+del YO
+[SYN1, SYN2] = (Concrete0, Concrete1)
+assert repr(1)
+b = (1) | (((2) & (3)) ^ (8))
+bb = ((1) | (two)) | (6)
+ccc = ((one) & (two)) & (three)
+dddd = ((x) ^ (o)) ^ (r)
+
+def raise_string(a=2, *args, **kwargs):
+ raise Exception('yo')
+ yield 'coucou'
+ yield
+a = (b) + (2)
+c = (b) * (2)
+c = (b) / (2)
+c = (b) // (2)
+c = (b) - (2)
+c = (b) % (2)
+c = (b) ** (2)
+c = (b) << (2)
+c = (b) >> (2)
+c = ~b
+c = not b
+d = [c]
+e = d[:]
+e = d[a:b:c]
+raise_string(*args, **kwargs)
+print('bonjour', file=stream)
+print('salut', end=' ', file=stream)
+
+def make_class(any, base=data.module.YO, *args, **kwargs):
+ """check base is correctly resolved to Concrete0"""
+
+
+ class Aaaa(base):
+ """dynamic class"""
+
+
+ return Aaaa
+from os.path import abspath
+import os as myos
+
+
+class A:
+ pass
+
+
+
+class A(A):
+ pass
+
+
+def generator():
+ """A generator."""
+ yield
+
+def not_a_generator():
+ """A function that contains generator, but is not one."""
+
+ def generator():
+ yield
+ genl = lambda : (yield)
+
+def with_metaclass(meta, *bases):
+ return meta('NewBase', bases, {})
+
+
+class NotMetaclass(with_metaclass(Metaclass)):
+ pass
+
+
diff --git a/astroid/tests/testdata/data/noendingnewline.py b/astroid/tests/testdata/data/noendingnewline.py
new file mode 100644
index 00000000..e17b92cc
--- /dev/null
+++ b/astroid/tests/testdata/data/noendingnewline.py
@@ -0,0 +1,36 @@
+import unittest
+
+
+class TestCase(unittest.TestCase):
+
+ def setUp(self):
+ unittest.TestCase.setUp(self)
+
+
+ def tearDown(self):
+ unittest.TestCase.tearDown(self)
+
+ def testIt(self):
+ self.a = 10
+ self.xxx()
+
+
+ def xxx(self):
+ if False:
+ pass
+ print('a')
+
+ if False:
+ pass
+ pass
+
+ if False:
+ pass
+ print('rara')
+
+
+if __name__ == '__main__':
+ print('test2')
+ unittest.main()
+
+
diff --git a/astroid/tests/testdata/data/nonregr.py b/astroid/tests/testdata/data/nonregr.py
new file mode 100644
index 00000000..813469fe
--- /dev/null
+++ b/astroid/tests/testdata/data/nonregr.py
@@ -0,0 +1,57 @@
+from __future__ import generators, print_function
+
+try:
+ enumerate = enumerate
+except NameError:
+
+ def enumerate(iterable):
+ """emulates the python2.3 enumerate() function"""
+ i = 0
+ for val in iterable:
+ yield i, val
+ i += 1
+
+def toto(value):
+ for k, v in value:
+ print(v.get('yo'))
+
+
+import imp
+fp, mpath, desc = imp.find_module('optparse',a)
+s_opt = imp.load_module('std_optparse', fp, mpath, desc)
+
+class OptionParser(s_opt.OptionParser):
+
+ def parse_args(self, args=None, values=None, real_optparse=False):
+ if real_optparse:
+ pass
+## return super(OptionParser, self).parse_args()
+ else:
+ import optcomp
+ optcomp.completion(self)
+
+
+class Aaa(object):
+ """docstring"""
+ def __init__(self):
+ self.__setattr__('a','b')
+ pass
+
+ def one_public(self):
+ """docstring"""
+ pass
+
+ def another_public(self):
+ """docstring"""
+ pass
+
+class Ccc(Aaa):
+ """docstring"""
+
+ class Ddd(Aaa):
+ """docstring"""
+ pass
+
+ class Eee(Ddd):
+ """docstring"""
+ pass
diff --git a/astroid/tests/testdata/data/notall.py b/astroid/tests/testdata/data/notall.py
new file mode 100644
index 00000000..9d35aa3a
--- /dev/null
+++ b/astroid/tests/testdata/data/notall.py
@@ -0,0 +1,8 @@
+
+name = 'a'
+_bla = 2
+other = 'o'
+class Aaa: pass
+
+def func(): print('yo')
+
diff --git a/astroid/tests/testdata/data/notamodule/file.py b/astroid/tests/testdata/data/notamodule/file.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/astroid/tests/testdata/data/notamodule/file.py
diff --git a/astroid/tests/testdata/data/package/__init__.py b/astroid/tests/testdata/data/package/__init__.py
new file mode 100644
index 00000000..575d18b1
--- /dev/null
+++ b/astroid/tests/testdata/data/package/__init__.py
@@ -0,0 +1,4 @@
+"""package's __init__ file"""
+
+
+from . import subpackage
diff --git a/astroid/tests/testdata/data/package/absimport.py b/astroid/tests/testdata/data/package/absimport.py
new file mode 100644
index 00000000..33ed117c
--- /dev/null
+++ b/astroid/tests/testdata/data/package/absimport.py
@@ -0,0 +1,6 @@
+from __future__ import absolute_import, print_function
+import import_package_subpackage_module # fail
+print(import_package_subpackage_module)
+
+from . import hello as hola
+
diff --git a/astroid/tests/testdata/data/package/hello.py b/astroid/tests/testdata/data/package/hello.py
new file mode 100644
index 00000000..b154c844
--- /dev/null
+++ b/astroid/tests/testdata/data/package/hello.py
@@ -0,0 +1,2 @@
+"""hello module"""
+
diff --git a/astroid/tests/testdata/data/package/import_package_subpackage_module.py b/astroid/tests/testdata/data/package/import_package_subpackage_module.py
new file mode 100644
index 00000000..ad442c16
--- /dev/null
+++ b/astroid/tests/testdata/data/package/import_package_subpackage_module.py
@@ -0,0 +1,49 @@
+# pylint: disable-msg=I0011,C0301,W0611
+"""I found some of my scripts trigger off an AttributeError in pylint
+0.8.1 (with common 0.12.0 and astroid 0.13.1).
+
+Traceback (most recent call last):
+ File "/usr/bin/pylint", line 4, in ?
+ lint.Run(sys.argv[1:])
+ File "/usr/lib/python2.4/site-packages/pylint/lint.py", line 729, in __init__
+ linter.check(args)
+ File "/usr/lib/python2.4/site-packages/pylint/lint.py", line 412, in check
+ self.check_file(filepath, modname, checkers)
+ File "/usr/lib/python2.4/site-packages/pylint/lint.py", line 426, in check_file
+ astroid = self._check_file(filepath, modname, checkers)
+ File "/usr/lib/python2.4/site-packages/pylint/lint.py", line 450, in _check_file
+ self.check_astroid_module(astroid, checkers)
+ File "/usr/lib/python2.4/site-packages/pylint/lint.py", line 494, in check_astroid_module
+ self.astroid_events(astroid, [checker for checker in checkers
+ File "/usr/lib/python2.4/site-packages/pylint/lint.py", line 511, in astroid_events
+ self.astroid_events(child, checkers, _reversed_checkers)
+ File "/usr/lib/python2.4/site-packages/pylint/lint.py", line 511, in astroid_events
+ self.astroid_events(child, checkers, _reversed_checkers)
+ File "/usr/lib/python2.4/site-packages/pylint/lint.py", line 508, in astroid_events
+ checker.visit(astroid)
+ File "/usr/lib/python2.4/site-packages/logilab/astroid/utils.py", line 84, in visit
+ method(node)
+ File "/usr/lib/python2.4/site-packages/pylint/checkers/variables.py", line 295, in visit_import
+ self._check_module_attrs(node, module, name_parts[1:])
+ File "/usr/lib/python2.4/site-packages/pylint/checkers/variables.py", line 357, in _check_module_attrs
+ self.add_message('E0611', args=(name, module.name),
+AttributeError: Import instance has no attribute 'name'
+
+
+You can reproduce it by:
+(1) create package structure like the following:
+
+package/
+ __init__.py
+ subpackage/
+ __init__.py
+ module.py
+
+(2) in package/__init__.py write:
+
+import subpackage
+
+(3) run pylint with a script importing package.subpackage.module.
+"""
+__revision__ = '$Id: import_package_subpackage_module.py,v 1.1 2005-11-10 15:59:32 syt Exp $'
+import package.subpackage.module
diff --git a/astroid/tests/testdata/data/package/subpackage/__init__.py b/astroid/tests/testdata/data/package/subpackage/__init__.py
new file mode 100644
index 00000000..dc4782e6
--- /dev/null
+++ b/astroid/tests/testdata/data/package/subpackage/__init__.py
@@ -0,0 +1 @@
+"""package.subpackage"""
diff --git a/astroid/tests/testdata/data/package/subpackage/module.py b/astroid/tests/testdata/data/package/subpackage/module.py
new file mode 100644
index 00000000..4b7244ba
--- /dev/null
+++ b/astroid/tests/testdata/data/package/subpackage/module.py
@@ -0,0 +1 @@
+"""package.subpackage.module"""
diff --git a/astroid/tests/testdata/data/recursion.py b/astroid/tests/testdata/data/recursion.py
new file mode 100644
index 00000000..85f65134
--- /dev/null
+++ b/astroid/tests/testdata/data/recursion.py
@@ -0,0 +1,3 @@
+""" For issue #25 """
+class Base(object):
+ pass \ No newline at end of file
diff --git a/astroid/tests/testdata/data/unicode_package/__init__.py b/astroid/tests/testdata/data/unicode_package/__init__.py
new file mode 100644
index 00000000..713e5591
--- /dev/null
+++ b/astroid/tests/testdata/data/unicode_package/__init__.py
@@ -0,0 +1 @@
+x = "șțîâ" \ No newline at end of file
diff --git a/astroid/tests/testdata/data/unicode_package/core/__init__.py b/astroid/tests/testdata/data/unicode_package/core/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/astroid/tests/testdata/data/unicode_package/core/__init__.py
diff --git a/astroid/tests/unittest_builder.py b/astroid/tests/unittest_builder.py
index 206c7da2..813c2e3d 100644
--- a/astroid/tests/unittest_builder.py
+++ b/astroid/tests/unittest_builder.py
@@ -39,7 +39,41 @@ BUILTINS = six.moves.builtins.__name__
class FromToLineNoTest(unittest.TestCase):
def setUp(self):
- self.astroid = resources.build_file('data/format.py')
+ self.astroid = builder.parse('''
+ """A multiline string
+ """
+
+ function('aeozrijz\
+ earzer', hop)
+ # XXX write test
+ x = [i for i in range(5)
+ if i % 4]
+
+ fonction(1,
+ 2,
+ 3,
+ 4)
+
+ def definition(a,
+ b,
+ c):
+ return a + b + c
+
+ class debile(dict,
+ object):
+ pass
+
+ if aaaa: pass
+ else:
+ aaaa,bbbb = 1,2
+ aaaa,bbbb = bbbb,aaaa
+ # XXX write test
+ hop = \
+ aaaa
+
+
+ __revision__.lower();
+ ''')
def test_callfunc_lineno(self):
stmts = self.astroid.body
@@ -48,16 +82,16 @@ class FromToLineNoTest(unittest.TestCase):
# earzer', hop)
discard = stmts[0]
self.assertIsInstance(discard, nodes.Expr)
- self.assertEqual(discard.fromlineno, 4)
+ self.assertEqual(discard.fromlineno, 5)
self.assertEqual(discard.tolineno, 5)
callfunc = discard.value
self.assertIsInstance(callfunc, nodes.Call)
- self.assertEqual(callfunc.fromlineno, 4)
+ self.assertEqual(callfunc.fromlineno, 5)
self.assertEqual(callfunc.tolineno, 5)
name = callfunc.func
self.assertIsInstance(name, nodes.Name)
- self.assertEqual(name.fromlineno, 4)
- self.assertEqual(name.tolineno, 4)
+ self.assertEqual(name.fromlineno, 5)
+ self.assertEqual(name.tolineno, 5)
strarg = callfunc.args[0]
self.assertIsInstance(strarg, nodes.Const)
if hasattr(sys, 'pypy_version_info'):
@@ -263,10 +297,6 @@ class BuilderTest(unittest.TestCase):
with self.assertRaises(exceptions.AstroidSyntaxError):
self.builder.string_build('"\\x1"')
- def test_missing_newline(self):
- """check that a file with no trailing new line is parseable"""
- resources.build_file('data/noendingnewline.py')
-
def test_missing_file(self):
with self.assertRaises(exceptions.AstroidBuildingError):
resources.build_file('data/inexistant.py')
@@ -711,7 +741,8 @@ class FileBuildTest(unittest.TestCase):
def test_unknown_encoding(self):
with self.assertRaises(exceptions.AstroidSyntaxError):
- resources.build_file('data/invalid_encoding.py')
+ with resources.tempfile_with_content(b'# -*- coding: lala -*-') as tmp:
+ builder.AstroidBuilder().file_build(tmp)
class ModuleBuildTest(resources.SysPathSetup, FileBuildTest):
diff --git a/astroid/tests/unittest_modutils.py b/astroid/tests/unittest_modutils.py
index 3740aa26..6dfd3bd8 100644
--- a/astroid/tests/unittest_modutils.py
+++ b/astroid/tests/unittest_modutils.py
@@ -244,6 +244,7 @@ class GetModuleFilesTest(unittest.TestCase):
def test_get_module_files_1(self):
package = resources.find('data/find_test')
modules = set(modutils.get_module_files(package, []))
+
expected = ['__init__.py', 'module.py', 'module2.py',
'noendingnewline.py', 'nonregr.py']
self.assertEqual(modules,
@@ -254,6 +255,7 @@ class GetModuleFilesTest(unittest.TestCase):
"""
non_package = resources.find('data/notamodule')
modules = modutils.get_module_files(non_package, [], list_all=True)
+
self.assertEqual(
modules,
[os.path.join(non_package, 'file.py')],
diff --git a/astroid/tests/unittest_nodes.py b/astroid/tests/unittest_nodes.py
index fab82eef..acfb817c 100644
--- a/astroid/tests/unittest_nodes.py
+++ b/astroid/tests/unittest_nodes.py
@@ -106,6 +106,7 @@ class AsStringTest(resources.SysPathSetup, unittest.TestCase):
with open(resources.find('data/module.py'), 'r') as fobj:
self.assertMultiLineEqual(module.as_string(), fobj.read())
+ maxDiff = None
def test_module2_as_string(self):
"""check as_string on a whole module prepared to be returned identically
"""
diff --git a/astroid/tests/unittest_scoped_nodes.py b/astroid/tests/unittest_scoped_nodes.py
index d9600365..edc72caa 100644
--- a/astroid/tests/unittest_scoped_nodes.py
+++ b/astroid/tests/unittest_scoped_nodes.py
@@ -110,9 +110,23 @@ class ModuleNodeTest(ModuleLoader, unittest.TestCase):
self.assertRaises(InferenceError, self.nonregr.igetattr, 'YOAA')
def test_wildcard_import_names(self):
- m = resources.build_file('data/all.py', 'all')
+ m = builder.parse('''
+ name = 'a'
+ _bla = 2
+ other = 'o'
+ class Aaa: pass
+ def func(): print('yo')
+ __all__ = 'Aaa', '_bla', 'name'
+ ''')
self.assertEqual(m.wildcard_import_names(), ['Aaa', '_bla', 'name'])
- m = resources.build_file('data/notall.py', 'notall')
+ m = builder.parse('''
+ name = 'a'
+ _bla = 2
+ other = 'o'
+ class Aaa: pass
+
+ def func(): return 'yo'
+ ''')
res = sorted(m.wildcard_import_names())
self.assertEqual(res, ['Aaa', 'func', 'name', 'other'])
@@ -214,14 +228,14 @@ class ModuleNodeTest(ModuleLoader, unittest.TestCase):
self.assertEqual(stream.read().decode(), data)
def test_file_stream_physical(self):
- path = resources.find('data/all.py')
+ path = resources.find('data/absimport.py')
astroid = builder.AstroidBuilder().file_build(path, 'all')
with open(path, 'rb') as file_io:
with astroid.stream() as stream:
self.assertEqual(stream.read(), file_io.read())
def test_stream_api(self):
- path = resources.find('data/all.py')
+ path = resources.find('data/absimport.py')
astroid = builder.AstroidBuilder().file_build(path, 'all')
stream = astroid.stream()
self.assertTrue(hasattr(stream, 'close'))