Exemple #1
0
    def test_ancestors_from_level_fails_at_level_below_baselevel(self):
        from hwp5.treeop import prefix_ancestors_from_level
        level_prefixed = [
            (7, 'a7'), # baselevel 7
            (8, 'a7-a8'),
            (9, 'a7-a8-a9'),
            (6, 'b7'), # level below the base level
        ]
        try:
            list(prefix_ancestors_from_level(level_prefixed))
            # TODO: 현재로서는 스택에 기본으로 root_item을 넣어놓는 구현 방식 때문에
            # base level 바로 아래 level은 에러가 나지 않음
            #self.fail('exception expected')
        except:
            pass

        level_prefixed = [
            (7, 'a7'), # baselevel 7
            (8, 'a7-a8'),
            (9, 'a7-a8-a9'),
            (5, 'b7'), # level below the base level
        ]
        try:
            list(prefix_ancestors_from_level(level_prefixed))
            self.fail('exception expected')
        except:
            pass
Exemple #2
0
    def test_ancestors_from_level_fails_at_level_below_baselevel(self):
        level_prefixed = [
            (7, 'a7'),  # baselevel 7
            (8, 'a7-a8'),
            (9, 'a7-a8-a9'),
            (6, 'b7'),  # level below the base level
        ]
        try:
            list(prefix_ancestors_from_level(level_prefixed))
            # TODO: 현재로서는 스택에 기본으로 root_item을 넣어놓는 구현 방식 때문에
            # base level 바로 아래 level은 에러가 나지 않음
            # self.fail('exception expected')
        except:
            pass

        level_prefixed = [
            (7, 'a7'),  # baselevel 7
            (8, 'a7-a8'),
            (9, 'a7-a8-a9'),
            (5, 'b7'),  # level below the base level
        ]
        try:
            list(prefix_ancestors_from_level(level_prefixed))
            self.fail('exception expected')
        except:
            pass
Exemple #3
0
    def test_ancestors_from_level(self):

        from hwp5.treeop import prefix_ancestors_from_level

        level_prefixed = [
            (0, 'a0'),
            (0, 'b0'),   # sibling
            (1, 'b0-a1'), # child
            (2, 'b0-a1-a2'), #child
            (1, 'b0-b1'), # jump to parent level
            (2, 'b0-b1-b2'), # child
            (0, 'c0'), # jump to grand-parent level
        ]

        ancestors_prefixed = prefix_ancestors_from_level(level_prefixed)
        result = list((list(ancestors), item)
                      for ancestors, item in ancestors_prefixed)

        self.assertEquals(result.pop(0), ([None], 'a0'))
        self.assertEquals(result.pop(0), ([None], 'b0'))
        self.assertEquals(result.pop(0), ([None, 'b0'], 'b0-a1'))
        self.assertEquals(result.pop(0), ([None, 'b0', 'b0-a1'], 'b0-a1-a2'))
        self.assertEquals(result.pop(0), ([None, 'b0'], 'b0-b1'))
        self.assertEquals(result.pop(0), ([None, 'b0', 'b0-b1'], 'b0-b1-b2'))
        self.assertEquals(result.pop(0), ([None], 'c0'))
Exemple #4
0
    def test_ancestors_from_level(self):

        from hwp5.treeop import prefix_ancestors_from_level

        level_prefixed = [
            (0, 'a0'),
            (0, 'b0'),  # sibling
            (1, 'b0-a1'),  # child
            (2, 'b0-a1-a2'),  #child
            (1, 'b0-b1'),  # jump to parent level
            (2, 'b0-b1-b2'),  # child
            (0, 'c0'),  # jump to grand-parent level
        ]

        ancestors_prefixed = prefix_ancestors_from_level(level_prefixed)
        result = list(
            (list(ancestors), item) for ancestors, item in ancestors_prefixed)

        self.assertEquals(result.pop(0), ([None], 'a0'))
        self.assertEquals(result.pop(0), ([None], 'b0'))
        self.assertEquals(result.pop(0), ([None, 'b0'], 'b0-a1'))
        self.assertEquals(result.pop(0), ([None, 'b0', 'b0-a1'], 'b0-a1-a2'))
        self.assertEquals(result.pop(0), ([None, 'b0'], 'b0-b1'))
        self.assertEquals(result.pop(0), ([None, 'b0', 'b0-b1'], 'b0-b1-b2'))
        self.assertEquals(result.pop(0), ([None], 'c0'))
Exemple #5
0
def parse_models_with_parent(context_models):
    level_prefixed = ((model['level'], (context, model))
                      for context, model in context_models)
    root_item = (dict(), dict())
    ancestors_prefixed = prefix_ancestors_from_level(level_prefixed, root_item)
    for ancestors, (context, model) in ancestors_prefixed:
        context['parent'] = ancestors[-1]
        parse_model(context, model)
        yield context, model
Exemple #6
0
def parse_models_with_parent(context_models):
    level_prefixed = ((model['level'], (context, model))
                      for context, model in context_models)
    root_item = (dict(), dict())
    ancestors_prefixed = prefix_ancestors_from_level(level_prefixed, root_item)
    for ancestors, (context, model) in ancestors_prefixed:
        context['parent'] = ancestors[-1]
        parse_model(context, model)
        yield context, model
Exemple #7
0
    def test_ancestors_from_level_assert_fails_at_invalid_level_jump(self):

        level_prefixed = [
            (0, 'a0'),
            (2, 'a0-a1-a2'),  # invalid level jump
        ]
        ancestors_prefixed = prefix_ancestors_from_level(level_prefixed)
        try:
            list(ancestors_prefixed)
            self.fail('assert fails expected')
        except:
            pass
Exemple #8
0
    def test_ancestors_from_level_assert_fails_at_invalid_level_jump(self):

        level_prefixed = [
            (0, 'a0'),
            (2, 'a0-a1-a2'),  # invalid level jump
        ]
        ancestors_prefixed = prefix_ancestors_from_level(level_prefixed)
        try:
            list(ancestors_prefixed)
            self.fail('assert fails expected')
        except:
            pass
Exemple #9
0
 def test_ancestors_from_level_from_nonzero_baselevel(self):
     level_prefixed = [
         (7, 'a0'),  # baselevel 7
         (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.assertEquals(result.pop(0), ([None], 'a0'))
     self.assertEquals(result.pop(0), ([None, 'a0'], 'a0-a1'))
     self.assertEquals(result.pop(0), ([None, 'a0', 'a0-a1'], 'a0-a1-a2'))
     self.assertEquals(result.pop(0), ([None], 'b0'))
Exemple #10
0
 def test_ancestors_from_level_from_nonzero_baselevel(self):
     level_prefixed = [
         (7, 'a0'),  # baselevel 7
         (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'))
Exemple #11
0
def resolve_models(context, records):
    model_contexts = (dict(context, record=record, model=dict(record))
                      for record in records)

    level_prefixed = ((context['model']['level'], context)
                      for context in model_contexts)
    root_item = {}
    ancestors_prefixed = prefix_ancestors_from_level(level_prefixed, root_item)
    for ancestors, context in ancestors_prefixed:
        parent = ancestors[-1]
        context['parent'] = parent, parent.get('model', {})

        record_frame = context['record']
        context['type'] = RecordModel
        context['name'] = record_frame['tagname']
        yield STARTEVENT, context
        for x in resolve_model_events(context, context['model']):
            yield x
        event, item = x
        context['value'] = item
        yield ENDEVENT, context
Exemple #12
0
def resolve_models(context, records):
    model_contexts = (dict(context, record=record, model=dict(record))
                      for record in records)

    level_prefixed = ((context['model']['level'], context)
                      for context in model_contexts)
    root_item = {}
    ancestors_prefixed = prefix_ancestors_from_level(level_prefixed, root_item)
    for ancestors, context in ancestors_prefixed:
        parent = ancestors[-1]
        context['parent'] = parent, parent.get('model', {})

        record_frame = context['record']
        context['type'] = RecordModel
        context['name'] = record_frame['tagname']
        yield STARTEVENT, context
        for x in resolve_model_events(context, context['model']):
            yield x
        event, item = x
        context['value'] = item
        yield ENDEVENT, context