示例#1
0
def test_invalid_token_parser(text: str, parser: Parser):
    stream = CharStream(text)
    production = parser.parse(stream)
    assert str(production) == ''
    assert not production
示例#2
0
def test_valid_not_parser(text, parser):
    parser = NotCharParser(parser)
    stream = CharStream(text)
    produce = parser.parse(stream)
    assert str(produce) == ''
    assert produce
示例#3
0
def test_valid_onemany_parser(text: str, parser: Parser):
    parser = OneManyParser(parser)
    stream = CharStream(text)
    production = parser.parse(stream)
    assert str(production) == text
    assert production
示例#4
0
def test_valid_token_parser(text: str, parser: Parser):
    stream = CharStream(text)
    production = parser.parse(stream)
    assert text.startswith(str(production))
    assert production
示例#5
0
def test_invalid_seq_parser_returns_nothing(text, parsers):
    parser = SeqParser(*parsers)
    stream = CharStream(text)
    production = parser.parse(stream)
    assert str(production) == ''
    assert not production
示例#6
0
def test_valid_zeromany_parser(text, parser):
    parser = ZeroManyParser(parser)
    stream = CharStream(text)
    production = parser.parse(stream)
    assert str(production) == text
    assert production
示例#7
0
def test_is_next_char():
    stream = CharStream('a3')
    assert stream.get(0).value == 'a'
    assert not stream.get(1).value == 'C'
    assert stream.get(1).value == '3'
示例#8
0
def test_stream_length():
    stream = CharStream('abc')
    assert len(stream) == 3
示例#9
0
def test_empty_text_is_eof():
    stream = CharStream()
    assert stream.get().is_eof()
示例#10
0
def test_char_values():
    text = 'i76hj-'
    stream = CharStream(text)
    values = ''.join([stream.get(i).value for i, _ in enumerate(text)])
    assert values == text
示例#11
0
def test_char_column():
    text = 'ab\nc\n\nd'
    stream = CharStream(text)
    lines = [stream.get(i).column for i, _ in enumerate(text)]
    assert lines == [0, 1, 2, 0, 1, 0, 0]
示例#12
0
def test_char_line():
    text = 'ab\nc\n\nd'
    stream = CharStream(text)
    lines = [stream.get(i).line for i, _ in enumerate(text)]
    assert lines == [0, 0, 0, 1, 1, 2, 3]
示例#13
0
def test_char_type(test_input, method):
    stream = CharStream(test_input)
    ch = stream.get()
    assert getattr(ch, method)()
示例#14
0
def test_valid_one_of_parser(text, parsers):
    parser = OneOfParser(*parsers)
    stream = CharStream(text)
    production = parser.parse(stream)
    assert str(production) == text
    assert production
示例#15
0
def test_valid_seq_parser(text, parsers):
    parser = SeqParser(*parsers)
    stream = CharStream(text)
    production = parser.parse(stream)
    assert str(production) == text
    assert production
示例#16
0
def test_valid_optional_parser(text, parser):
    parser = OptionalParser(parser)
    stream = CharStream(text)
    assert parser.parse(stream)
示例#17
0
def test_empty_text_has_zero_length():
    stream = CharStream()
    assert len(stream) == 0