def test_invalid_token_parser(text: str, parser: Parser): stream = CharStream(text) production = parser.parse(stream) assert str(production) == '' assert not production
def test_valid_not_parser(text, parser): parser = NotCharParser(parser) stream = CharStream(text) produce = parser.parse(stream) assert str(produce) == '' assert produce
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
def test_valid_token_parser(text: str, parser: Parser): stream = CharStream(text) production = parser.parse(stream) assert text.startswith(str(production)) assert production
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
def test_valid_zeromany_parser(text, parser): parser = ZeroManyParser(parser) stream = CharStream(text) production = parser.parse(stream) assert str(production) == text assert production
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'
def test_stream_length(): stream = CharStream('abc') assert len(stream) == 3
def test_empty_text_is_eof(): stream = CharStream() assert stream.get().is_eof()
def test_char_values(): text = 'i76hj-' stream = CharStream(text) values = ''.join([stream.get(i).value for i, _ in enumerate(text)]) assert values == text
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]
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]
def test_char_type(test_input, method): stream = CharStream(test_input) ch = stream.get() assert getattr(ch, method)()
def test_valid_one_of_parser(text, parsers): parser = OneOfParser(*parsers) stream = CharStream(text) production = parser.parse(stream) assert str(production) == text assert production
def test_valid_seq_parser(text, parsers): parser = SeqParser(*parsers) stream = CharStream(text) production = parser.parse(stream) assert str(production) == text assert production
def test_valid_optional_parser(text, parser): parser = OptionalParser(parser) stream = CharStream(text) assert parser.parse(stream)
def test_empty_text_has_zero_length(): stream = CharStream() assert len(stream) == 0