Пример #1
0
def test_parse_django():
    parser = PegParser()

    f = parser.parse_django("include alpha.html")
    assert f.__class__.__name__ == 'Django'
    assert f.name == 'include'
    assert f.restline == 'alpha.html'

    f = parser.parse_django(
        "include alpha.html bravo charlie.html delta=object.pk")
    assert f.__class__.__name__ == 'Django'
    assert f.name == 'include'
    assert f.restline == 'alpha.html bravo charlie.html delta=object.pk'
Пример #2
0
def test_parse_tag():
    parser = PegParser()

    f = parser.parse_tag("tag")
    assert str(f) == '''tag'''
    assert not hasattr(f, 'args')

    f = parser.parse_tag("tag()")
    assert str(f) == '''tag'''
    assert len(f.args) == 0

    f = parser.parse_tag("tag(a=alpha, b=2, c='charlie')")
    assert str(f) == '''tag'''
    assert len(f.args) == 3
    arg1 = f.args[0]
    assert arg1.key == 'a'
    assert arg1.value == 'alpha'
    arg1 = f.args[1]
    assert arg1.key == 'b'
    assert arg1.value == '2'
    arg1 = f.args[2]
    assert arg1.key == 'c'
    assert arg1.value == "'charlie'"

    f = parser.parse_tag("tag.cls1()")
    assert str(f) == '''tag.cls1'''
    assert f.classes == ['cls1']
    assert f.id is None
    assert len(f.args) == 0

    f = parser.parse_tag("tag.cls1.cls2()")
    assert str(f) == '''tag.cls1.cls2'''
    assert f.classes == ['cls1', 'cls2']
    assert f.id is None
    assert len(f.args) == 0

    f = parser.parse_tag("tag#id1()")
    assert str(f) == '''tag#id1'''
    assert f.classes == []
    assert f.id == 'id1'
    assert len(f.args) == 0

    f = parser.parse_tag("tag.cls1.cls2#id1()")
    assert str(f) == '''tag.cls1.cls2#id1'''
    assert f.classes == ['cls1', 'cls2']
    assert f.id == 'id1'
    assert len(f.args) == 0

    f = parser.parse_tag("tag 'content'")
    assert str(f) == '''tag ...'''
    assert not hasattr(f, 'args')
Пример #3
0
def test_parse_call():
    parser = PegParser()

    f = parser.parse_call("function(alpha, bravo, charlie)")
    assert f.__class__.__name__ == 'Call'
    assert f.name == 'function'
    assert f.arguments == ['alpha', 'bravo', 'charlie']

    f = parser.parse_call("function('Alpha', 1)")
    assert f.__class__.__name__ == 'Call'
    assert f.name == 'function'
    assert f.arguments == ["'Alpha'", '1']

    f = parser.parse_call("function(1, bravo=2, charlie=3)")
    assert f.__class__.__name__ == 'Call'
    assert f.name == 'function'
    assert f.arguments == ['1', ('bravo', '2'), ('charlie', '3')]
Пример #4
0
    def __init__(self, include_paths):
        self.HANDLERS = {
            LineToken.LINE_TYPE_ROOT: self.handle_root,
            LineToken.LINE_TYPE_COMMENT: self.handle_comment,
            LineToken.LINE_TYPE_CODE: self.handle_code,
            LineToken.LINE_TYPE_DJANGO: self.handle_django,
            LineToken.LINE_TYPE_TAG: self.handle_tag,
            LineToken.LINE_TYPE_CALL: self.handle_call,
        }
        # Code variables (for now, later it will be more complex... with IFs
        # and FORs and expand_vars...
        self.functions = {}
        self.variables = {}
        self.include_paths = include_paths

        from pypugly.peg_parser import PegParser
        self.__parser = PegParser()
Пример #5
0
def test_parse_code():
    parser = PegParser()

    f = parser.parse_code("var alpha = 'bravo'")
    assert f.__class__.__name__ == 'Assignment'
    assert f.left == 'alpha'
    assert f.right == '\'bravo\''
    assert str(f) == '''assign(alpha, 'bravo')'''

    f = parser.parse_code("for i in 10:")
    assert f.__class__.__name__ == 'ForLoop'
    assert f.var == 'i'
    assert f.iterator == '10'
    assert str(f) == '''forloop(i, 10)'''

    f = parser.parse_code("def alpha(bravo, charlie)")
    assert f.__class__.__name__ == 'Def'
    assert f.name == 'alpha'
    assert f.parameters == [('bravo', None), ('charlie', None)]