relation extraction tests

--HG--
branch : astng2
This commit is contained in:
Emile Anclin 2009-03-17 15:48:24 +01:00
parent 57a4a49081
commit 7af79e6021
2 changed files with 44 additions and 5 deletions

View File

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

View File

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