From f41c7578384ec333ac163a0581e08cc9bf9cbc4d Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Mon, 18 May 2026 13:21:23 +0200 Subject: [PATCH] tests(parser): complete simple annotation lexer tests --- tests/lexer/test_annotation_lexer.py | 85 ++++++++++++++++++++++++---- 1 file changed, 75 insertions(+), 10 deletions(-) diff --git a/tests/lexer/test_annotation_lexer.py b/tests/lexer/test_annotation_lexer.py index 4d08f7f..2e35d18 100644 --- a/tests/lexer/test_annotation_lexer.py +++ b/tests/lexer/test_annotation_lexer.py @@ -7,20 +7,85 @@ from lexer.token import Token, TokenType def scan(source: str) -> list[Token]: return AnnotationLexer(source).process() + def assert_n_tokens(tokens: list[Token], n: int): assert len(tokens) == n + 1 assert tokens[-1].type == TokenType.EOF -@pytest.mark.parametrize("src,expected", [ - ("(", TokenType.LEFT_PAREN), - (")", TokenType.RIGHT_PAREN), - ("[", TokenType.LEFT_BRACKET), - ("]", TokenType.RIGHT_BRACKET), - (":", TokenType.COLON), - (",", TokenType.COMMA), - ("_", TokenType.UNDERSCORE), -]) + +@pytest.mark.parametrize( + "src,expected", + [ + ("(", TokenType.LEFT_PAREN), + (")", TokenType.RIGHT_PAREN), + ("[", TokenType.LEFT_BRACKET), + ("]", TokenType.RIGHT_BRACKET), + (":", TokenType.COLON), + (",", TokenType.COMMA), + ("_", TokenType.UNDERSCORE), + ], +) def test_punctuation(src: str, expected: TokenType): tokens: list[Token] = scan(src) assert_n_tokens(tokens, 1) - assert tokens[0].type == expected \ No newline at end of file + assert tokens[0].type == expected + + +@pytest.mark.parametrize( + "src,expected", + [ + ("+", TokenType.PLUS), + (">", TokenType.GREATER), + (">=", TokenType.GREATER_EQUAL), + ("<", TokenType.LESS), + ("<=", TokenType.LESS_EQUAL), + ("=", TokenType.EQUAL), + ("==", TokenType.EQUAL_EQUAL), + ("!=", TokenType.BANG_EQUAL), + ], +) +def test_operators(src: str, expected: TokenType): + tokens: list[Token] = scan(src) + assert_n_tokens(tokens, 1) + assert tokens[0].type == expected + + +@pytest.mark.parametrize( + "src,expected", + [ + ("a", TokenType.IDENTIFIER), + ("foo", TokenType.IDENTIFIER), + ("foo1", TokenType.IDENTIFIER), + ("foo_", TokenType.IDENTIFIER), + ("foo_bar1_baz2", TokenType.IDENTIFIER), + ("FOO_BAR1_BAZ2", TokenType.IDENTIFIER), + ("0", TokenType.NUMBER), + ("0.0", TokenType.NUMBER), + ("1234.56", TokenType.NUMBER), + ("True", TokenType.TRUE), + ("False", TokenType.FALSE), + ("None", TokenType.NONE), + ], +) +def test_literals(src: str, expected: TokenType): + tokens: list[Token] = scan(src) + assert_n_tokens(tokens, 1) + assert tokens[0].type == expected + + +@pytest.mark.parametrize( + "src,expected", + [ + ("#", TokenType.COMMENT), + ("# This is a comment", TokenType.COMMENT), + (" ", TokenType.WHITESPACE), + ("\t", TokenType.WHITESPACE), + ("\r", TokenType.WHITESPACE), + (" \t \t", TokenType.WHITESPACE), + ("\n", TokenType.NEWLINE), + ], +) +def test_misc(src: str, expected: TokenType): + tokens: list[Token] = scan(src) + assert_n_tokens(tokens, 1) + assert tokens[0].type == expected