def test_010_remove_in_defer_mode(self): """test MsgTree remove in defer mode""" tree = MsgTree(mode=MODE_DEFER) tree.add("item1", "message0") self.assertEqual(len(tree), 1) tree.add("item2", "message1") self.assertEqual(len(tree), 2) tree.add("item3", "message2") self.assertEqual(len(tree), 3) tree.add("item2", "message4") tree.add("item1", "message3") tree.remove(lambda k: k == "item2") self.assertEqual(tree["item1"], "message0\nmessage3") self.assertRaises(KeyError, tree.__getitem__, "item2") # calling walk with call _update_keys() and change to MODE_SHIFT self.assertEqual([(k, e.message()) for e, k in tree.walk()], [(['item1'], 'message0\nmessage3'), (['item3'], 'message2')]) self.assertEqual(tree.mode, MODE_SHIFT) # further tree modifications should be safe... tree.add("item1", "message5") tree.add("item2", "message6") self.assertEqual(tree["item1"], "message0\nmessage3\nmessage5") self.assertEqual(tree["item2"], "message6") self.assertEqual([(k, e.message()) for e, k in tree.walk()], [(['item1'], 'message0\nmessage3\nmessage5'), (['item3'], 'message2'), (['item2'], 'message6')])
def test_005_remove(self): """test MsgTree.remove()""" # build tree tree = MsgTree() self.assertEqual(len(tree), 0) tree.add(("w1", "key1"), "message0") self.assertEqual(len(tree), 1) tree.add(("w1", "key2"), "message0") self.assertEqual(len(tree), 2) tree.add(("w1", "key3"), "message0") self.assertEqual(len(tree), 3) tree.add(("w2", "key4"), "message1") self.assertEqual(len(tree), 4) tree.remove(lambda k: k[1] == "key2") self.assertEqual(len(tree), 3) for msg, keys in tree.walk(match=lambda k: k[0] == "w1", mapper=itemgetter(1)): self.assertEqual(msg, "message0") self.assertEqual(len(keys), 2) tree.remove(lambda k: k[0] == "w1") self.assertEqual(len(tree), 1) tree.remove(lambda k: k[0] == "w2") self.assertEqual(len(tree), 0) tree.clear() self.assertEqual(len(tree), 0)