from logilab.common.testlib import unittest_main, TestCase
from logilab.astng import ResolveError, MANAGER as m, Instance, YES
from logilab.astng.builder import ASTNGBuilder, build_module
import sys
from os.path import abspath
sys.path.insert(1, abspath('regrtest_data'))
class NonRegressionTC(TestCase):
## def test_resolve1(self):
## mod = m.astng_from_module_name('data.nonregr')
## cls = mod['OptionParser']
## self.assertRaises(ResolveError, cls.resolve_dotted, cls.basenames[0])
## #self.assert_(cls is not cls.resolve_dotted(cls.basenames[0]))
def test_module_path(self):
mod = m.astng_from_module_name('import_package_subpackage_module')
package = mod.igetattr('package').next()
self.failUnlessEqual(package.name, 'package')
subpackage = package.igetattr('subpackage').next()
self.failUnlessEqual(subpackage.name, 'package.subpackage')
module = subpackage.igetattr('module').next()
self.failUnlessEqual(module.name, 'package.subpackage.module')
def test_living_property(self):
builder = ASTNGBuilder()
builder._done = {}
builder._module = sys.modules[__name__]
builder.object_build(build_module('module_name', ''), Whatever)
def test_new_style_class_detection(self):
try:
import pygtk
except ImportError:
self.skip('test skipped: pygtk is not available')
else:
builder = ASTNGBuilder()
data = """
import pygtk
pygtk.require("2.6")
import gobject
class A(gobject.GObject):
def __init__(self, val):
gobject.GObject.__init__(self)
self._val = val
def _get_val(self):
print "get"
return self._val
def _set_val(self, val):
print "set"
self._val = val
val = property(_get_val, _set_val)
if __name__ == "__main__":
print gobject.GObject.__bases__
a = A(7)
print a.val
a.val = 6
print a.val
"""
astng = builder.string_build(data, __name__, __file__)
a = astng['A']
self.assert_(a.newstyle)
def test_pylint_config_attr(self):
mod = m.astng_from_module_name('pylint.lint')
pylinter = mod['PyLinter']
self.assertEquals([c.name for c in pylinter.ancestors()],
['OptionsManagerMixIn', 'object', 'MessagesHandlerMixIn',
'ReportsHandlerMixIn', 'BaseRawChecker', 'BaseChecker',
'OptionsProviderMixIn', 'ASTWalker'])
self.assert_(list(Instance(pylinter).getattr('config')))
infered = list(Instance(pylinter).igetattr('config'))
self.assertEquals(len(infered), 2)
infered = [c for c in infered if not c is YES]
self.assertEquals(len(infered), 1)
self.assertEquals(infered[0].root().name, 'optparse')
self.assertEquals(infered[0].name, 'Values')
class Whatever(object):
a = property(lambda x: x, lambda x: x)
if __name__ == '__main__':
unittest_main()
syntax highlighted by Code2HTML, v. 0.9.1