tests(parser): complete simple annotation lexer tests
This commit is contained in:
@@ -7,11 +7,15 @@ from lexer.token import Token, TokenType
|
|||||||
def scan(source: str) -> list[Token]:
|
def scan(source: str) -> list[Token]:
|
||||||
return AnnotationLexer(source).process()
|
return AnnotationLexer(source).process()
|
||||||
|
|
||||||
|
|
||||||
def assert_n_tokens(tokens: list[Token], n: int):
|
def assert_n_tokens(tokens: list[Token], n: int):
|
||||||
assert len(tokens) == n + 1
|
assert len(tokens) == n + 1
|
||||||
assert tokens[-1].type == TokenType.EOF
|
assert tokens[-1].type == TokenType.EOF
|
||||||
|
|
||||||
@pytest.mark.parametrize("src,expected", [
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"src,expected",
|
||||||
|
[
|
||||||
("(", TokenType.LEFT_PAREN),
|
("(", TokenType.LEFT_PAREN),
|
||||||
(")", TokenType.RIGHT_PAREN),
|
(")", TokenType.RIGHT_PAREN),
|
||||||
("[", TokenType.LEFT_BRACKET),
|
("[", TokenType.LEFT_BRACKET),
|
||||||
@@ -19,8 +23,69 @@ def assert_n_tokens(tokens: list[Token], n: int):
|
|||||||
(":", TokenType.COLON),
|
(":", TokenType.COLON),
|
||||||
(",", TokenType.COMMA),
|
(",", TokenType.COMMA),
|
||||||
("_", TokenType.UNDERSCORE),
|
("_", TokenType.UNDERSCORE),
|
||||||
])
|
],
|
||||||
|
)
|
||||||
def test_punctuation(src: str, expected: TokenType):
|
def test_punctuation(src: str, expected: TokenType):
|
||||||
tokens: list[Token] = scan(src)
|
tokens: list[Token] = scan(src)
|
||||||
assert_n_tokens(tokens, 1)
|
assert_n_tokens(tokens, 1)
|
||||||
assert tokens[0].type == expected
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user