| | |
| | from __future__ import absolute_import |
| | from __future__ import print_function |
| | from __future__ import unicode_literals |
| | from unittest import TestCase |
| |
|
| | from hwp5.treeop import STARTEVENT, ENDEVENT |
| | from hwp5.treeop import build_subtree |
| | from hwp5.treeop import iter_subevents |
| | from hwp5.treeop import prefix_ancestors_from_level |
| | from hwp5.treeop import tree_events |
| |
|
| |
|
| | class Test_ancestors_from_level(TestCase): |
| |
|
| | def test_ancestors_from_level(self): |
| |
|
| | level_prefixed = [ |
| | (0, 'a0'), |
| | (0, 'b0'), |
| | (1, 'b0-a1'), |
| | (2, 'b0-a1-a2'), |
| | (1, 'b0-b1'), |
| | (2, 'b0-b1-b2'), |
| | (0, 'c0'), |
| | ] |
| |
|
| | ancestors_prefixed = prefix_ancestors_from_level(level_prefixed) |
| | result = list((list(ancestors), item) |
| | for ancestors, item in ancestors_prefixed) |
| |
|
| | self.assertEqual(result.pop(0), ([None], 'a0')) |
| | self.assertEqual(result.pop(0), ([None], 'b0')) |
| | self.assertEqual(result.pop(0), ([None, 'b0'], 'b0-a1')) |
| | self.assertEqual(result.pop(0), ([None, 'b0', 'b0-a1'], 'b0-a1-a2')) |
| | self.assertEqual(result.pop(0), ([None, 'b0'], 'b0-b1')) |
| | self.assertEqual(result.pop(0), ([None, 'b0', 'b0-b1'], 'b0-b1-b2')) |
| | self.assertEqual(result.pop(0), ([None], 'c0')) |
| |
|
| | def test_ancestors_from_level_from_nonzero_baselevel(self): |
| | level_prefixed = [ |
| | (7, 'a0'), |
| | (8, 'a0-a1'), |
| | (9, 'a0-a1-a2'), |
| | (7, 'b0'), |
| | ] |
| | ancestors_prefixed = prefix_ancestors_from_level(level_prefixed) |
| | result = list((list(ancestors), item) |
| | for ancestors, item in ancestors_prefixed) |
| | self.assertEqual(result.pop(0), ([None], 'a0')) |
| | self.assertEqual(result.pop(0), ([None, 'a0'], 'a0-a1')) |
| | self.assertEqual(result.pop(0), ([None, 'a0', 'a0-a1'], 'a0-a1-a2')) |
| | self.assertEqual(result.pop(0), ([None], 'b0')) |
| |
|
| | def test_ancestors_from_level_fails_at_level_below_baselevel(self): |
| | level_prefixed = [ |
| | (7, 'a7'), |
| | (8, 'a7-a8'), |
| | (9, 'a7-a8-a9'), |
| | (6, 'b7'), |
| | ] |
| | try: |
| | list(prefix_ancestors_from_level(level_prefixed)) |
| | |
| | |
| | |
| | except: |
| | pass |
| |
|
| | level_prefixed = [ |
| | (7, 'a7'), |
| | (8, 'a7-a8'), |
| | (9, 'a7-a8-a9'), |
| | (5, 'b7'), |
| | ] |
| | try: |
| | list(prefix_ancestors_from_level(level_prefixed)) |
| | self.fail('exception expected') |
| | except: |
| | pass |
| |
|
| | def test_ancestors_from_level_assert_fails_at_invalid_level_jump(self): |
| |
|
| | level_prefixed = [ |
| | (0, 'a0'), |
| | (2, 'a0-a1-a2'), |
| | ] |
| | ancestors_prefixed = prefix_ancestors_from_level(level_prefixed) |
| | try: |
| | list(ancestors_prefixed) |
| | self.fail('assert fails expected') |
| | except: |
| | pass |
| |
|
| |
|
| | class TestTreeEvents(TestCase): |
| | def test_tree_events(self): |
| | event_prefixed_items = [(STARTEVENT, 'a'), (ENDEVENT, 'a')] |
| | rootitem, childs = build_subtree(iter(event_prefixed_items[1:])) |
| | self.assertEqual('a', rootitem) |
| | self.assertEqual(0, len(childs)) |
| |
|
| | event_prefixed_items = [ |
| | (STARTEVENT, 'a'), |
| | (STARTEVENT, 'b'), |
| | (ENDEVENT, 'b'), |
| | (ENDEVENT, 'a') |
| | ] |
| | self.assertEqual( |
| | ('a', [('b', [])]), |
| | build_subtree(iter(event_prefixed_items[1:])) |
| | ) |
| |
|
| | event_prefixed_items = [ |
| | (STARTEVENT, 'a'), |
| | (STARTEVENT, 'b'), |
| | (STARTEVENT, 'c'), (ENDEVENT, 'c'), |
| | (STARTEVENT, 'd'), (ENDEVENT, 'd'), |
| | (ENDEVENT, 'b'), |
| | (ENDEVENT, 'a') |
| | ] |
| |
|
| | result = build_subtree(iter(event_prefixed_items[1:])) |
| | self.assertEqual( |
| | ('a', [('b', [('c', []), ('d', [])])]), |
| | result |
| | ) |
| |
|
| | back = list(tree_events(*result)) |
| | self.assertEqual(event_prefixed_items, back) |
| |
|
| |
|
| | class TestSubevents(TestCase): |
| |
|
| | def test_iter_subevents(self): |
| |
|
| | events = iter([(STARTEVENT, 'a'), (ENDEVENT, 'a')]) |
| | next(events) |
| | subevents = iter_subevents(events) |
| | self.assertEqual([(ENDEVENT, 'a')], list(subevents)) |
| |
|
| | events = iter([(STARTEVENT, 'a'), |
| | (STARTEVENT, 'b'), |
| | (None, 'c'), |
| | (ENDEVENT, 'b'), |
| | (ENDEVENT, 'a')]) |
| | next(events) |
| | subevents = iter_subevents(events) |
| | self.assertEqual([(STARTEVENT, 'b'), |
| | (None, 'c'), |
| | (ENDEVENT, 'b'), |
| | (ENDEVENT, 'a')], list(subevents)) |
| |
|
| | events = iter([(STARTEVENT, 'a'), |
| | (None, 'c'), |
| | (ENDEVENT, 'a'), |
| | (STARTEVENT, 'b'), |
| | (None, 'd'), |
| | (ENDEVENT, 'b')]) |
| | next(events) |
| | subevents = iter_subevents(events) |
| | self.assertEqual([(None, 'c'), |
| | (ENDEVENT, 'a')], list(subevents)) |
| | self.assertEqual([(STARTEVENT, 'b'), |
| | (None, 'd'), |
| | (ENDEVENT, 'b')], list(events)) |
| |
|