def get_project(module, name=None): """return a astroid project representation""" # flush cache MANAGER._modules_by_name = {} def _astroid_wrapper(func, modname): return func(modname) return MANAGER.project_from_files([module], _astroid_wrapper, project_name=name)
def test_functional_relation_extraction(self): """functional test of relations extraction; different classes possibly in different modules""" # XXX should be catching pyreverse environnement problem but doesn't # pyreverse doesn't extracts the relations but this test ok project = MANAGER.project_from_files(['data'], astroid_wrapper) handler = DiadefsHandler( Config() ) diadefs = handler.get_diadefs(project, Linker(project, tag=True) ) cd = diadefs[1] relations = _process_relations(cd.relationships) self.assertEqual(relations, self._should_rels)
def test_known_values2(self): project = MANAGER.project_from_files(['data.clientmodule_test'], astroid_wrapper) dd = DefaultDiadefGenerator(Linker(project), HANDLER).visit(project) self.assertEqual(len(dd), 1) keys = [d.TYPE for d in dd] self.assertEqual(keys, ['class']) cd = dd[0] self.assertEqual(cd.title, 'classes No Name') classes = _process_classes(cd.objects) self.assertEqual(classes, [(True, 'Ancestor'), (True, 'DoNothing'), (True, 'Specialization')] )
import unittest import sys import astroid from astroid import MANAGER from astroid.inspector import Linker from pylint.pyreverse.diadefslib import * from utils import Config def astroid_wrapper(func, modname): return func(modname) PROJECT = MANAGER.project_from_files(['data'], astroid_wrapper) CONFIG = Config() HANDLER = DiadefsHandler(CONFIG) def _process_classes(classes): """extract class names of a list""" return sorted([(isinstance(c.node, astroid.Class), c.title) for c in classes]) def _process_relations(relations): """extract relation indices from a relation list""" result = [] for rel_type, rels in relations.iteritems(): for rel in rels: result.append( (rel_type, rel.from_object.title, rel.to_object.title) )