tests: add basic lexer tests

This commit is contained in:
Antoine Viallon 2024-05-16 23:13:23 +02:00
parent 4d13cdfb46
commit 0a042d0696
Signed by: aviallon
GPG key ID: 186FC35EDEB25716

View file

@ -0,0 +1,32 @@
import io
from compiler.lexer import Tokens, TextIOWithMemory, Lexer, Token
def test_lexer_empty():
data_raw = io.StringIO("")
data = TextIOWithMemory(data_raw)
my_lexer = Lexer(input_stream=data)
assert next(my_lexer).kind == Tokens.BEGIN
assert next(my_lexer).kind == Tokens.EOF
def test_lexer_arithmetic():
data_raw = io.StringIO("1+5-4*2/1")
data = TextIOWithMemory(data_raw)
my_lexer = Lexer(input_stream=data)
tokens = []
expected_tokens = [Tokens.BEGIN, Tokens.Integer, Tokens.Op_Plus, Tokens.Integer,
Tokens.Op_Minus, Tokens.Integer, Tokens.Op_Multiply, Tokens.Integer,
Tokens.Op_Divide, Tokens.Integer, Tokens.EOF]
tok: Token = Token(Tokens.Unknown)
while tok.kind != Tokens.EOF:
tok = next(my_lexer)
tokens += [tok]
assert len(tokens) == len(expected_tokens)
for tok, expected in zip(tokens, expected_tokens):
assert tok.kind == expected