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) )