def test_replace_child(self): node = tree.StructuredTreeNode(('keyA', ), 'partial_hashA') child = node.set_child(('keyA', 'keyB'), tree.StructuredTreeNode(('keyA', 'keyB'), 'partial_hashAB')) # Replace child_new = node.replace_child( tree.StructuredTreeNode(('keyA', 'keyB'), 'something_else')) self.assertIsNot(child, child_new) self.assertEqual('something_else', child_new.partial_hash)
def test_set_child_existing(self): node = tree.StructuredTreeNode(('keyA', ), 'partial_hashA') child = node.set_child(('keyA', 'keyB'), tree.StructuredTreeNode(('keyA', 'keyB'), 'partial_hashAB')) # Set again child_new = node.set_child(('keyA', 'keyB'), tree.StructuredTreeNode(('keyA', 'keyB'), 'something_else')) self.assertIs(child, child_new) self.assertEqual('partial_hashAB', child_new.partial_hash)
def test_getitem(self): children = tree.ChildrenList() children.add(tree.StructuredTreeNode(('keyA', 'keyB'))) children.add(tree.StructuredTreeNode(('keyA', 'keyC'))) # Not found raised = False try: children[('keyA', 'keyD')] except KeyError: raised = True self.assertTrue(raised) self.assertEqual(children[('keyA', 'keyB')], tree.StructuredTreeNode(('keyA', 'keyB')))
def test_compare(self): # Same nodes, same list children1 = tree.ChildrenList() children1.add(tree.StructuredTreeNode(('keyA', 'keyB'))) children1.add(tree.StructuredTreeNode(('keyA', 'keyC'))) children2 = tree.ChildrenList() children2.add(tree.StructuredTreeNode(('keyA', 'keyC'))) children2.add(tree.StructuredTreeNode(('keyA', 'keyB'))) self.assertEqual(children1, children2) self.assertEqual(str(children1), str(children2)) children2.add(tree.StructuredTreeNode(('keyA', 'keyD'))) self.assertNotEqual(children1, children2)
def test_set_child(self): # Test with default node = tree.StructuredTreeNode(('keyA', ), 'partial_hashA') child = node.set_child(('keyA', 'keyB')) self.assertEqual(1, len(node.get_children())) self.assertTrue( isinstance(node.get_children()[0], tree.StructuredTreeNode)) self.assertIs(child, node.get_children()[0]) self.assertEqual(('keyA', 'keyB'), child.key) self.assertIsNone(child.partial_hash) # Test passing node child = node.set_child(('keyA', 'keyC'), tree.StructuredTreeNode(('keyA', 'keyC'), 'partial_hashAC')) self.assertEqual(2, len(node.get_children())) self.assertEqual(('keyA', 'keyC'), child.key) self.assertEqual('partial_hashAC', child.partial_hash)
def test_initialize(self): node = tree.StructuredTreeNode(('key', ), 'partial_hash', metadata={'foo': True}) self.assertEqual(('key', ), node.key) self.assertEqual('partial_hash', node.partial_hash) self.assertEqual('partial_hash', node.full_hash) self.assertTrue(isinstance(node._children, tree.ChildrenList)) self.assertTrue(isinstance(node.get_children(), tuple)) self.assertEqual({'foo': True}, node.metadata)
def test_sorted_add(self): children = tree.ChildrenList() # Append some children.add(tree.StructuredTreeNode(('keyA', 'keyB'))) self.assertEqual(0, children.index(('keyA', 'keyB'))) children.add(tree.StructuredTreeNode(('keyA', 'keyC'))) self.assertEqual(1, children.index(('keyA', 'keyC'))) children.add(tree.StructuredTreeNode(('keyA', 'keyZ'))) self.assertEqual(2, children.index(('keyA', 'keyZ'))) # Insert in the middle children.add(tree.StructuredTreeNode(('keyA', 'keyD'))) self.assertEqual(2, children.index(('keyA', 'keyD'))) self.assertEqual(3, children.index(('keyA', 'keyZ'))) # Insert in front children.add(tree.StructuredTreeNode(('keyA', 'key'))) self.assertEqual(0, children.index(('keyA', 'key'))) # Verify whole list self.assertEqual([ tree.StructuredTreeNode(('keyA', 'key')), tree.StructuredTreeNode(('keyA', 'keyB')), tree.StructuredTreeNode(('keyA', 'keyC')), tree.StructuredTreeNode(('keyA', 'keyD')), tree.StructuredTreeNode(('keyA', 'keyZ')) ], children._stash)
def test_remove_child(self): node = tree.StructuredTreeNode(('keyA', ), 'partial_hashA') # Nothing happens node.remove_child(('keyA', 'keyB')) # Add some children and then delete them node.replace_child( tree.StructuredTreeNode(('keyA', 'keyB'), 'partial_hashAB')) node.replace_child( tree.StructuredTreeNode(('keyA', 'keyC'), 'partial_hashAC')) node.replace_child( tree.StructuredTreeNode(('keyA', 'keyZ'), 'partial_hashAZ')) self.assertEqual(3, len(node._children)) node.remove_child(('keyA', 'keyC')) # Verify the right one was removed self.assertEqual((tree.StructuredTreeNode( ('keyA', 'keyB')), tree.StructuredTreeNode(('keyA', 'keyZ'))), node.get_children())
def test_get_child(self): node = tree.StructuredTreeNode(('keyA', ), 'partial_hashA') node.replace_child( tree.StructuredTreeNode(('keyA', 'keyB'), 'partial_hashAB')) node.replace_child( tree.StructuredTreeNode(('keyA', 'keyC'), 'partial_hashAC')) node.replace_child( tree.StructuredTreeNode(('keyA', 'keyZ'), 'partial_hashAZ')) # Doesn't exist self.assertIsNone(node.get_child(('keyA', 'keyY'))) # Returns Default on non existing self.assertEqual('nope', node.get_child(('keyA', 'keyY'), default='nope')) # Found! self.assertEqual(tree.StructuredTreeNode(('keyA', 'keyC')), node.get_child(('keyA', 'keyC'))) # Adding Default doesn't change the result self.assertEqual(tree.StructuredTreeNode(('keyA', 'keyC')), node.get_child(('keyA', 'keyC'), default='nope'))