From 7af79e602152aa122328063d5d7d5a16c65e594a Mon Sep 17 00:00:00 2001 From: Emile Anclin Date: Tue, 17 Mar 2009 15:48:24 +0100 Subject: [PATCH] relation extraction tests --HG-- branch : astng2 --- test/unittest_pyreverse_diadefs.py | 38 ++++++++++++++++++++++++++++++ test/utils.py | 11 +++++---- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/test/unittest_pyreverse_diadefs.py b/test/unittest_pyreverse_diadefs.py index ee848dc24..c8859e57f 100644 --- a/test/unittest_pyreverse_diadefs.py +++ b/test/unittest_pyreverse_diadefs.py @@ -35,6 +35,7 @@ CONFIG = Config() HANDLER = DiadefsHandler(CONFIG) def _process_classes(classes): + """extract class names of a list""" result = [] for classe in classes: result.append({'node' : isinstance(classe.node, astng.Class), @@ -43,6 +44,7 @@ def _process_classes(classes): return result def _process_modules(modules): + """extract module names from a list""" result = [] for module in modules: result.append({'node' : isinstance(module.node, astng.Module), @@ -50,6 +52,19 @@ def _process_modules(modules): result.sort() return result +def _process_relations(relations): + """extract relation indices from a relation list""" + result = [] + print "processing relations" + for rel_type, rels in relations.items(): + print rel_type + for rel in rels: + result.append( (rel_type, rel.from_object.title, + rel.to_object.title) ) + result.sort() + return result + + class DiaDefGeneratorTC(unittest.TestCase): def test_option_values(self): """test for ancestor, associated and module options""" @@ -107,6 +122,29 @@ class DefaultDiadefGeneratorTC(unittest.TestCase): {'node': True, 'name': 'Specialization'}] ) + def test_exctract_relations(self): + """test extract_relations between classes""" + cd = DefaultDiadefGenerator(Linker(PROJECT), HANDLER).visit(PROJECT)[1] + cd.extract_relationships() + relations = _process_relations(cd.relationships) + should = [('association', 'DoNothing', 'Specialization'), + ('implements', 'Ancestor', 'Interface'), + ('specialization', 'Specialization', 'Ancestor')] + self._relations = should + self.assertEquals(relations, should) + + 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 = ASTNGManager().project_from_files(['data'], astng_wrapper) + handler = DiadefsHandler( Config() ) + diadefs = handler.get_diadefs(project, Linker(project, tag=True) ) + cd = diadefs[1] + relations = _process_relations(cd.relationships) + self.assertEquals(relations, self._relations) + def test_known_values2(self): project = ASTNGManager().project_from_files(['data.clientmodule_test'], astng_wrapper) dd = DefaultDiadefGenerator(Linker(project), HANDLER).visit(project) diff --git a/test/utils.py b/test/utils.py index e965cd3c1..474e32759 100644 --- a/test/utils.py +++ b/test/utils.py @@ -104,15 +104,16 @@ def get_project(module, name=None): return manager.project_from_files([module], _astng_wrapper, project_name=name) -attrs = {'all_ancestors': None, 'show_associated': None, 'module_names': None, - 'output_format': 'dot', 'diadefs_file': None, 'quiet': 0, - 'show_ancestors': None, 'classes': (), 'all_associated': None, - 'mode': 'PUB_ONLY', 'show_builtin': False, 'only_classnames': False} +DEFAULTS = {'all_ancestors': None, 'show_associated': None, + 'module_names': None, + 'output_format': 'dot', 'diadefs_file': None, 'quiet': 0, + 'show_ancestors': None, 'classes': (), 'all_associated': None, + 'mode': 'PUB_ONLY', 'show_builtin': False, 'only_classnames': False} class Config(object): """config object for tests""" def __init__(self): - for attr, value in attrs.items(): + for attr, value in DEFAULTS.items(): setattr(self, attr, value) class FileTC(unittest.TestCase):