def test_008_trace_mode(self): """test MsgTree in trace mode""" tree = MsgTree(mode=MODE_TRACE) tree.add("item1", b"message0") self.assertEqual(len(tree), 1) tree.add("item2", b"message2") tree.add("item3", b"message2") tree.add("item4", b"message3") tree.add("item2", b"message4") tree.add("item3", b"message4") self.assertEqual(len(tree), 4) self.assertEqual(tree["item1"], b"message0") self.assertEqual(tree.get("item1"), b"message0") self.assertEqual(tree["item2"], b"message2\nmessage4") self.assertEqual(tree.get("item2"), b"message2\nmessage4") self.assertEqual(tree.get("item5", b"default_buf"), b"default_buf") self.assertEqual(tree._depth(), 2) self.assertEqual(len(list(tree.walk())), 4) # /!\ results are not sorted result = [(m, sorted(k), d, c) for m, k, d, c in sorted(list(tree.walk_trace()))] self.assertEqual(result, [(b'message0', ['item1'], 1, 0), (b'message2', ['item2', 'item3'], 1, 1), (b'message3', ['item4'], 1, 0), (b'message4', ['item2', 'item3'], 2, 0)])
def test_007_shift_mode(self): """test MsgTree in shift mode""" tree = MsgTree(mode=MODE_SHIFT) tree.add("item1", "message0") self.assertEqual(len(tree), 1) tree.add("item2", "message2") tree.add("item3", "message2") tree.add("item4", "message3") tree.add("item2", "message4") tree.add("item3", "message4") self.assertEqual(len(tree), 4) self.assertEqual(tree["item1"], "message0") self.assertEqual(tree.get("item1"), "message0") self.assertEqual(tree["item2"], "message2\nmessage4") self.assertEqual(tree.get("item2"), "message2\nmessage4") self.assertEqual(tree.get("item5", "default_buf"), "default_buf") self.assertEqual(tree._depth(), 2) self.assertEqual(len(list(tree.walk())), 3)
def test_004_getitem(self): """test MsgTree get and __getitem__""" # build tree... tree = MsgTree() tree.add("item1", "message0") self.assertEqual(len(tree), 1) tree.add("item2", "message2") tree.add("item3", "message2") tree.add("item4", "message3") tree.add("item2", "message4") tree.add("item3", "message4") self.assertEqual(len(tree), 4) self.assertEqual(tree["item1"], "message0") self.assertEqual(tree.get("item1"), "message0") self.assertEqual(tree["item2"], "message2\nmessage4") self.assertEqual(tree.get("item2"), "message2\nmessage4") self.assertEqual(tree.get("item5", "default_buf"), "default_buf") self.assertEqual(tree._depth(), 2)
def test_008_trace_mode(self): """test MsgTree in trace mode""" tree = MsgTree(mode=MODE_TRACE) tree.add("item1", "message0") self.assertEqual(len(tree), 1) tree.add("item2", "message2") tree.add("item3", "message2") tree.add("item4", "message3") tree.add("item2", "message4") tree.add("item3", "message4") self.assertEqual(len(tree), 4) self.assertEqual(tree["item1"], "message0") self.assertEqual(tree.get("item1"), "message0") self.assertEqual(tree["item2"], "message2\nmessage4") self.assertEqual(tree.get("item2"), "message2\nmessage4") self.assertEqual(tree.get("item5", "default_buf"), "default_buf") self.assertEqual(tree._depth(), 2) self.assertEqual(len(list(tree.walk())), 4) self.assertEqual(list(tree.walk_trace()), \ [('message0', ['item1'], 1, 0), ('message2', ['item2', 'item3'], 1, 1), ('message4', ['item2', 'item3'], 2, 0), ('message3', ['item4'], 1, 0)])
def test_003_iterators(self): """test MsgTree iterators""" # build tree... tree = MsgTree() self.assertEqual(len(tree), 0) tree.add(("item1", "key"), "message0") self.assertEqual(len(tree), 1) tree.add(("item2", "key"), "message2") self.assertEqual(len(tree), 2) tree.add(("item3", "key"), "message3") self.assertEqual(len(tree), 3) tree.add(("item4", "key"), "message3") tree.add(("item2", "newkey"), "message4") self.assertEqual(len(tree), 5) self.assertEqual(tree._depth(), 1) # test standard iterator (over keys) cnt = 0 what = set([ ("item1", "key"), ("item2", "key"), ("item3", "key"), \ ("item4", "key"), ("item2", "newkey") ]) for key in tree: cnt += 1 what.remove(key) self.assertEqual(cnt, 5) self.assertEqual(len(what), 0) # test keys() iterator cnt = 0 for key in tree.keys(): # keep this test for return value check cnt += 1 self.assertEqual(cnt, 5) self.assertEqual(len(list(iter(tree.keys()))), 5) # test messages() iterator (iterate over different messages) cnt = 0 for msg in tree.messages(): cnt += 1 self.assertEqual(len(msg), len("message0")) self.assertEqual(msg[0][:-1], "message") self.assertEqual(cnt, 4) self.assertEqual(len(list(iter(tree.messages()))), 4) # test items() iterator (iterate over all key, msg pairs) cnt = 0 for key, msg in tree.items(): cnt += 1 self.assertEqual(cnt, 5) self.assertEqual(len(list(iter(tree.items()))), 5) # test walk() iterator (iterate by msg and give the list of # associated keys) cnt = 0 cnt_2 = 0 for msg, keys in tree.walk(): cnt += 1 if len(keys) == 2: self.assertEqual(msg, "message3") cnt_2 += 1 self.assertEqual(cnt, 4) self.assertEqual(cnt_2, 1) self.assertEqual(len(list(iter(tree.walk()))), 4) # test walk() with provided key-filter cnt = 0 for msg, keys in tree.walk(match=lambda s: s[1] == "newkey"): cnt += 1 self.assertEqual(cnt, 1) # test walk() with provided key-mapper cnt = 0 cnt_2 = 0 for msg, keys in tree.walk(mapper=itemgetter(0)): cnt += 1 if len(keys) == 2: for k in keys: self.assertEqual(type(k), str) cnt_2 += 1 self.assertEqual(cnt, 4) self.assertEqual(cnt_2, 1) # test walk with full options: key-filter and key-mapper cnt = 0 for msg, keys in tree.walk(match=lambda k: k[1] == "newkey", mapper=itemgetter(0)): cnt += 1 self.assertEqual(msg, "message4") self.assertEqual(keys[0], "item2") self.assertEqual(cnt, 1) cnt = 0 for msg, keys in tree.walk(match=lambda k: k[1] == "key", mapper=itemgetter(0)): cnt += 1 self.assertEqual(keys[0][:-1], "item") self.assertEqual(cnt, 3) # 3 and not 4 because item3 and item4 are merged