summaryrefslogtreecommitdiff
path: root/pylint/test/unittest_pyreverse_diadefs.py
diff options
context:
space:
mode:
Diffstat (limited to 'pylint/test/unittest_pyreverse_diadefs.py')
-rw-r--r--pylint/test/unittest_pyreverse_diadefs.py171
1 files changed, 171 insertions, 0 deletions
diff --git a/pylint/test/unittest_pyreverse_diadefs.py b/pylint/test/unittest_pyreverse_diadefs.py
new file mode 100644
index 0000000..5f775aa
--- /dev/null
+++ b/pylint/test/unittest_pyreverse_diadefs.py
@@ -0,0 +1,171 @@
+# Copyright (c) 2000-2013 LOGILAB S.A. (Paris, FRANCE).
+# http://www.logilab.fr/ -- mailto:contact@logilab.fr
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+"""
+unittest for the extensions.diadefslib modules
+"""
+
+import unittest
+import sys
+
+import six
+
+import astroid
+from astroid import MANAGER
+from astroid.inspector import Linker
+
+from pylint.pyreverse.diadefslib import *
+
+from unittest_pyreverse_writer import Config, get_project
+
+PROJECT = get_project('data')
+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 six.iteritems(relations):
+ 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"""
+ handler = DiadefsHandler(Config())
+ df_h = DiaDefGenerator(Linker(PROJECT), handler)
+ cl_config = Config()
+ cl_config.classes = ['Specialization']
+ cl_h = DiaDefGenerator(Linker(PROJECT), DiadefsHandler(cl_config) )
+ self.assertEqual( (0, 0), df_h._get_levels())
+ self.assertEqual( False, df_h.module_names)
+ self.assertEqual( (-1, -1), cl_h._get_levels())
+ self.assertEqual( True, cl_h.module_names)
+ for hndl in [df_h, cl_h]:
+ hndl.config.all_ancestors = True
+ hndl.config.all_associated = True
+ hndl.config.module_names = True
+ hndl._set_default_options()
+ self.assertEqual( (-1, -1), hndl._get_levels())
+ self.assertEqual( True, hndl.module_names)
+ handler = DiadefsHandler( Config())
+ df_h = DiaDefGenerator(Linker(PROJECT), handler)
+ cl_config = Config()
+ cl_config.classes = ['Specialization']
+ cl_h = DiaDefGenerator(Linker(PROJECT), DiadefsHandler(cl_config) )
+ for hndl in [df_h, cl_h]:
+ hndl.config.show_ancestors = 2
+ hndl.config.show_associated = 1
+ hndl.config.module_names = False
+ hndl._set_default_options()
+ self.assertEqual( (2, 1), hndl._get_levels())
+ self.assertEqual( False, hndl.module_names)
+ #def test_default_values(self):
+ """test efault values for package or class diagrams"""
+ # TODO : should test difference between default values for package
+ # or class diagrams
+
+class DefaultDiadefGeneratorTC(unittest.TestCase):
+ def test_known_values1(self):
+ dd = DefaultDiadefGenerator(Linker(PROJECT), HANDLER).visit(PROJECT)
+ self.assertEqual(len(dd), 2)
+ keys = [d.TYPE for d in dd]
+ self.assertEqual(keys, ['package', 'class'])
+ pd = dd[0]
+ self.assertEqual(pd.title, 'packages No Name')
+ modules = sorted([(isinstance(m.node, astroid.Module), m.title)
+ for m in pd.objects])
+ self.assertEqual(modules, [(True, 'data'),
+ (True, 'data.clientmodule_test'),
+ (True, 'data.suppliermodule_test')])
+ cd = dd[1]
+ self.assertEqual(cd.title, 'classes No Name')
+ classes = _process_classes(cd.objects)
+ self.assertEqual(classes, [(True, 'Ancestor'),
+ (True, 'DoNothing'),
+ (True, 'Interface'),
+ (True, 'Specialization')]
+ )
+
+ _should_rels = [('association', 'DoNothing', 'Ancestor'),
+ ('association', 'DoNothing', 'Specialization'),
+ ('implements', 'Ancestor', 'Interface'),
+ ('specialization', 'Specialization', 'Ancestor')]
+ 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)
+ self.assertEqual(relations, self._should_rels)
+
+ 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 = get_project('data')
+ 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 = get_project('data.clientmodule_test')
+ 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')]
+ )
+
+class ClassDiadefGeneratorTC(unittest.TestCase):
+ def test_known_values1(self):
+ HANDLER.config.classes = ['Specialization']
+ cdg = ClassDiadefGenerator(Linker(PROJECT), HANDLER)
+ special = 'data.clientmodule_test.Specialization'
+ cd = cdg.class_diagram(PROJECT, special)
+ self.assertEqual(cd.title, special)
+ classes = _process_classes(cd.objects)
+ self.assertEqual(classes, [(True, 'data.clientmodule_test.Ancestor'),
+ (True, special),
+ (True, 'data.suppliermodule_test.DoNothing'),
+ ])
+
+ def test_known_values2(self):
+ HANDLER.config.module_names = False
+ cd = ClassDiadefGenerator(Linker(PROJECT), HANDLER).class_diagram(PROJECT, 'data.clientmodule_test.Specialization')
+ self.assertEqual(cd.title, 'data.clientmodule_test.Specialization')
+ classes = _process_classes(cd.objects)
+ self.assertEqual(classes, [(True, 'Ancestor'),
+ (True, 'DoNothing'),
+ (True, 'Specialization')
+ ])
+
+
+if __name__ == '__main__':
+ unittest.main()