def test_parse_one_level(self):
        data = """\
... one
    # Comment on two
... two
*** line with some data
... three
"""
        parser = TreeParser(data)
        assert parser._text_generated() == """\
... one
    # Comment on two
... two
*** line with some data
... three
... ~end-marker~
"""
        assert parser.as_nested_list == ['one', '# Comment on two', 'two',
                                         'line with some data', 'three']
        ##pprint(parser.as_json)
        assert parser.as_json == {
            '_leaves': ['one', 'three', 'two', 'z-2cf54f23'],
            '_root': {'members': ['one', 'two', 'z-2cf54f23', 'three']},
            '_tree': [u'... one',
                      '    # Comment on two',
                      '... two',
                      '*** line with some data',
                      '... three'],
            'one': {'groups': ['_root']},
            'three': {'groups': ['_root']},
            'two': {'comments': ['# Comment on two'], 'groups': ['_root']},
            'z-2cf54f23': {'data': 'line with some data', 'groups': ['_root']}
        }
        assert parser.as_tree == data
    def test_parse_one_level_initial_indent(self):
        # Blank line is ignored
        data = """\
    ... one
    ... two

    ... three
"""
        parser = TreeParser(data)
        assert parser._text_generated() == """\
    ... one
    ... two
    ... three
    ... ~end-marker~
"""
        assert parser.as_nested_list == ['one', 'two', 'three']
        # No need to keep the initial indent in the data
        assert parser.as_tree == """\
... one
... two
... three
"""
        print("+++++++++++++++++++++++++++++++++++++++++++++++++")
        pprint(parser.as_json)
        assert parser.as_json == {
            u'_leaves': [u'one', u'three', u'two'],
            u'_root': {u'members': [u'one', u'two', u'three']},
            u'_tree': [u'... one', u'... two', u'... three'],
            u'one': {u'groups': [u'_root']},
            u'three': {u'groups': [u'_root']},
            u'two': {u'groups': [u'_root']}
        }
    def test_parse_to_nested_list(self):
        data = """\
... one
    ... alpha
... two
    ... beta
        ... beta_01
    ... gamma
... three
    ... delta
... four
"""
        parser = TreeParser(data)
        assert parser._text_generated() == """\
... one
    ... alpha
... two
    ... beta
        ... beta_01
    ... gamma
... three
    ... delta
... four
... ~end-marker~
"""
        assert parser.as_nested_list == [
            'one', ['alpha'],
            'two', ['beta', ['beta_01'], 'gamma'],
            'three', ['delta'],
            'four'
        ]
        ##print("+=" * 35)
        ##pprint(parser.as_json)
        assert parser.as_json == {
            '_leaves': ['alpha', 'beta_01', 'delta', 'four', 'gamma'],
            '_root': {'members': ['one', 'two', 'three', 'four']},
            '_tree': ['... one',
                      '    ... alpha',
                      '... two',
                      '    ... beta',
                      '        ... beta_01',
                      '    ... gamma',
                      '... three',
                      '    ... delta',
                      '... four'],
            'alpha': {'groups': ['one']},
            'beta': {'groups': ['two'], 'members': ['beta_01']},
            'beta_01': {'groups': ['beta']},
            'delta': {'groups': ['three']},
            'four': {'groups': ['_root']},
            'gamma': {'groups': ['two']},
            'one': {'groups': ['_root'], 'members': ['alpha']},
            'three': {'groups': ['_root'], 'members': ['delta']},
            'two': {'groups': ['_root'], 'members': ['beta', 'gamma']},
        }
        assert parser.as_tree == data
    def test_parse_one_level_with_comments(self):
        # Check nested list, and that tree formed is identical
        data = """\
    # Comment on one
... one
... two # Inline comment on two
    # Comment on three
... three
"""
        parser = TreeParser(data)
        assert parser._text_generated() == """\
    # Comment on one
... one
    # Inline comment on two
... two
    # Comment on three
... three
... ~end-marker~
"""
        assert parser.as_nested_list == ['# Comment on one', 'one',
                                         '# Inline comment on two', 'two',
                                         '# Comment on three', 'three']

        ##pprint(parser.as_json)
        assert parser.as_json == {
            '_leaves': ['one', 'three', 'two'],
            '_root': {'members': ['one', 'two', 'three']},
            '_tree': ['    # Comment on one',
                      '... one',
                      '    # Inline comment on two',
                      '... two',
                      '    # Comment on three',
                      '... three'],
            'one': {'comments': ['# Comment on one'], 'groups': ['_root']},
            'three': {'comments': ['# Comment on three'], 'groups': ['_root']},
            'two': {'comments': ['# Inline comment on two'],
                    'groups': ['_root']}}
        assert parser.as_tree == """\