From 032a6d9109fd75f198feafe04911003bcb0dd639 Mon Sep 17 00:00:00 2001 From: Antoine Viallon Date: Fri, 26 Jul 2024 00:12:37 +0200 Subject: [PATCH] tests: lexer: simplify code, add blocks and whitespaces test-cases --- compiler/tests/test_lexer.py | 45 +++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/compiler/tests/test_lexer.py b/compiler/tests/test_lexer.py index 996624e..befeca4 100644 --- a/compiler/tests/test_lexer.py +++ b/compiler/tests/test_lexer.py @@ -3,30 +3,47 @@ import io from compiler.lexer import Tokens, TextIOWithMemory, Lexer, Token +def _check_token_type(lexer: Lexer, expected_tokens: list[Tokens]): + tokens = [] + + tok: Token = Token(Tokens.Unknown) + while tok.kind != Tokens.EOF: + tok = next(lexer) + tokens += [tok.kind] + + assert tuple(tokens) == tuple(expected_tokens) + + 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 - + _check_token_type(my_lexer, [Tokens.BEGIN, Tokens.EOF]) def test_lexer_arithmetic(): - data_raw = io.StringIO("1+5-4*2/1") + data_raw = io.StringIO("1+5-41*2/1") data = TextIOWithMemory(data_raw) my_lexer = Lexer(input_stream=data) - tokens = [] - expected_tokens = [Tokens.BEGIN, Tokens.Integer, Tokens.Op_Plus, Tokens.Integer, + _check_token_type(my_lexer, [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] + 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 +def test_lexer_blocks(): + data = TextIOWithMemory(io.StringIO(""" + { + { 1+1; {}; } + } + """)) + + my_lexer = Lexer(input_stream=data) + _check_token_type(my_lexer, [ + Tokens.BEGIN, Tokens.Newline, + Tokens.Blank, Tokens.Brace_Left, Tokens.Newline, + Tokens.Blank, Tokens.Brace_Left, Tokens.Blank, Tokens.Integer, Tokens.Op_Plus, Tokens.Integer, Tokens.Semicolon, + Tokens.Blank, Tokens.Brace_Left, Tokens.Brace_Right, Tokens.Semicolon, Tokens.Blank, Tokens.Brace_Right, + Tokens.Newline, + Tokens.Blank, Tokens.Brace_Right, Tokens.Newline, + Tokens.Blank, Tokens.EOF])