import unittest
from af.model.hierarchies.BaseHierarchy import BaseHierarchy
from af.model.hierarchies.Node import Node
from af.exceptions import InfoException
[docs]class TestHierarchies(unittest.TestCase):
[docs] def setUp(self):
self.h = BaseHierarchy()
self.saved_hierarchy = {1: {2: {3: None}}}
[docs] def test_hierarchy_should_have_supression_node_by_default(self):
self.assertTrue(self.h.root_node is not None, "Hierarchy base node should not be None")
self.assertTrue(isinstance(self.h.root_node, Node), "Root node should be a Node")
self.assertEqual(BaseHierarchy.supression_node().value, self.h.root_node.value, "Root node should have * as value")
self.assertTrue(len(self.h.leaf_nodes) == 1, "Root node should be added to the leaf nodes")
[docs] def test_supression_node_ok(self):
sup_node = self.h.create_supression_node()
self.assertEqual(BaseHierarchy.supression_node().value, sup_node.value, "Root node should be * x 10")
self.assertEqual(None, sup_node.parent, "Root node should have no parent on creation")
self.assertEqual(None, sup_node.nodes, "Root node should have no leaf nodes on creation")
[docs] def test_get_leaf_node_ok(self):
leaf_node = self.h.get_leaf_node(self.h.root_node.value)
self.assertEqual(self.h.root_node, leaf_node, "The leaf node found should be the root")
[docs] def test_adding_nodes_ok(self):
node = Node(1)
self.h.add_node(self.h.root_node, node)
self.assertTrue(len(self.h.leaf_nodes) == 1, "Hierarchy should have only one leaf node after addition")
self.assertEqual(node, self.h.leaf_nodes[0], "The leaf node should be the one added")
self.assertTrue(node in self.h.root_node.nodes, "New node should be son of root node")
self.assertTrue(node.parent == self.h.root_node, "New node should have root node as parent")
[docs] def test_finding_nodes_ok(self):
node = Node(1)
self.h.add_node(self.h.root_node, node)
found_node = self.h.find_node(node.value)
self.assertEqual(node, found_node, "Not the same node found")
[docs] def test_maintain_leaf_nodes_ok(self):
node = Node(22)
self.h.maintain_leaf_nodes(node, 'add')
self.assertTrue(len(self.h.leaf_nodes) == 2, "Hierarchy should have only one leaf node after addition")
self.assertEqual(node, self.h.leaf_nodes[1], "The node should be among the leaf nodes")
self.h.maintain_leaf_nodes(node, 'remove')
self.assertTrue(len(self.h.leaf_nodes) == 1, "Hierarchy should have only one leaf node after addition")
self.assertEqual(self.h.root_node, self.h.leaf_nodes[0], "Leaf nodes should contain only the root node")
[docs] def test_maintain_leaf_nodes_raise_exception_unknown_action(self):
failed = False
try:
node = Node(22)
self.h.maintain_leaf_nodes(node, 'asdfasdfsadf')
except Exception:
failed = True
self.assertTrue(failed, "Method should have failed")
[docs] def test_get_generalization_level_ok(self):
node1 = Node(1)
node2 = Node(2)
self.h.add_node(self.h.root_node, node1)
self.h.add_node(node1, node2)
gen_node_0 = self.h.get_generalization_level_representation(node2, 0)
gen_node_1 = self.h.get_generalization_level_representation(node2, 1)
gen_node_2 = self.h.get_generalization_level_representation(node2, 2)
gen_node_3 = self.h.get_generalization_level_representation(node2, 3)
self.assertEqual(gen_node_0, node2, "Should be the same node")
self.assertEqual(gen_node_1, node1, "Should be the same node")
self.assertEqual(gen_node_2, self.h.root_node, "Should be the same node")
self.assertEqual(gen_node_3, self.h.root_node, "Should be the same node")
[docs] def test_hierarchy_representation_ok(self):
node1 = Node(1)
self.h.add_node(self.h.root_node, node1)
representation_expected = {self.h.root_node.value: {node1.value: None}}
self.assertEqual(representation_expected, self.h.hierarchy_representation(), "The representations don't match")
[docs] def test_populate_nodes_ok(self):
self.h.populate_nodes(self.h.root_node, self.saved_hierarchy, int)
self.assertTrue(len(self.h.leaf_nodes) == 1, "There should be only one leaf node")
self.assertEqual(3, self.h.leaf_nodes[0].value, "The leaf node should be of value 3")
self.assertTrue(len(self.h.root_node.nodes) == 1, "The root node should have only one node")
self.assertEqual(1, self.h.root_node.nodes[0].value, "The values dont match")
[docs] def test_hierarchy_depth_ok_leaf_nodes(self):
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
self.h.add_node(self.h.root_node, node1)
self.h.add_node(node1, node2)
self.h.add_node(node1, node3)
node4 = Node(4)
node5 = Node(5)
self.h.add_node(node2, node4)
self.h.add_node(node3, node5)
self.assertTrue(self.h.validate_hierarchy_depth())
[docs] def test_hierarchy_depth_ok_only_root(self):
node1 = Node(1)
self.h.add_node(self.h.root_node, node1)
self.assertTrue(self.h.validate_hierarchy_depth())
[docs] def test_hierarchy_depth_failed(self):
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
self.h.add_node(self.h.root_node, node1)
self.h.add_node(node1, node2)
self.h.add_node(node1, node3)
node4 = Node(4)
node5 = Node(5)
self.h.add_node(node2, node4)
self.h.add_node(node2, node5)
self.assertFalse(self.h.validate_hierarchy_depth())