class TreeManagement: ''' "TreeManagement" class defines trees used to store tests data. Each class instance is composed by the following attributes: - nodeList: auxiliar array used to associate child nodes to its parent node; - - subTree: auxiliar tree used to store subtests data, which is later merged into the "mainTree" - mainTree: tree used to store test data - nodeRoot: used to intialize "mainTree" root ''' def __init__(self): self.nodeList = [None] * 100 self.node = None self.subTree = Tree() self.mainTree = Tree() self.nodeRoot = self.mainTree.create_node(tag="Root", identifier="root", data=TreeNode( "root", "root")) def CreateTestOkNode(self, value): ''' This method creates a "ok" status test node and adds it to the tree Arguments: - value: node identification ''' if self.subTree != None: self.node = self.mainTree.create_node(value, value, parent=self.nodeRoot, data=TreeNode("OK", "")) self.mainTree.merge(value, self.subTree) else: self.mainTree.create_node(value, value, parent=self.nodeRoot, data=TreeNode("OK", "")) def CreateSubtestOkNode(self, value): ''' This method creates a "ok" status subtest node and adds it to the tree Arguments: - value: node identification ''' n = GetTreeLevel(value) if n == 1: if self.subTree != None: self.node = self.subTree.get_node("aux") if self.node == None: self.subTree = Tree() self.nodeList[n - 1] = self.subTree.create_node("aux", "aux", data=TreeNode( "OK", "")) self.nodeList[n] = self.subTree.create_node(value, value, parent=self.nodeList[n - 1], data=TreeNode("OK", "")) def CreateTestNotOkNode(self, value): ''' This method creates a "not ok" status test node and adds it to the tree Arguments: - value: node identification ''' if self.subTree != None: self.node = self.mainTree.create_node(value, value, parent=self.nodeRoot, data=TreeNode("OK", "")) self.mainTree.merge(value, self.subTree) else: self.mainTree.create_node(value, value, parent=self.nodeRoot, data=TreeNode("OK", "")) def CreateSubtestNotOkNode(self, value): ''' This method creates a "not ok" status subtest node and adds it to the tree Arguments: - value: node identification ''' n = GetTreeLevel(value) if n == 1: if self.subTree != None: self.node = self.subTree.get_node("aux") if self.node == None: self.subTree = Tree() self.nodeList[n - 1] = self.subTree.create_node("aux", "aux", data=TreeNode( "NOT OK", "")) self.nodeList[n] = self.subTree.create_node( value, value, parent=self.nodeList[n - 1], data=TreeNode("NOT OK", ""))
def test_merge(self): # merge on empty initial tree t1 = Tree(identifier='t1') t2 = self.get_t2() t1.merge(nid=None, new_tree=t2) self.assertEqual(t1.identifier, 't1') self.assertEqual(t1.root, 'r2') self.assertEqual(set(t1._nodes.keys()), {'r2', 'c', 'd', 'd1'}) self.assertEqual(t1.show(stdout=False), '''root2 ├── C └── D └── D1 ''') # merge empty new_tree (on root) t1 = self.get_t1() t2 = Tree(identifier='t2') t1.merge(nid='r', new_tree=t2) self.assertEqual(t1.identifier, 't1') self.assertEqual(t1.root, 'r') self.assertEqual(set(t1._nodes.keys()), {'r', 'a', 'a1', 'b'}) self.assertEqual(t1.show(stdout=False), '''root ├── A │ └── A1 └── B ''') # merge at root t1 = self.get_t1() t2 = self.get_t2() t1.merge(nid='r', new_tree=t2) self.assertEqual(t1.identifier, 't1') self.assertEqual(t1.root, 'r') self.assertNotIn('r2', t1._nodes.keys()) self.assertEqual(set(t1._nodes.keys()), {'r', 'a', 'a1', 'b', 'c', 'd', 'd1'}) self.assertEqual( t1.show(stdout=False), '''root ├── A │ └── A1 ├── B ├── C └── D └── D1 ''') # merge on node t1 = self.get_t1() t2 = self.get_t2() t1.merge(nid='b', new_tree=t2) self.assertEqual(t1.identifier, 't1') self.assertEqual(t1.root, 'r') self.assertNotIn('r2', t1._nodes.keys()) self.assertEqual(set(t1._nodes.keys()), {'r', 'a', 'a1', 'b', 'c', 'd', 'd1'}) self.assertEqual( t1.show(stdout=False), '''root ├── A │ └── A1 └── B ├── C └── D └── D1 ''')