Para mi caso, quise probar que al tener ambas expresiones (identificadores y enteros) se estuviera devolviendo bien la cadena, sin embargo, gracias a este test me di cuenta que en el archivo ast.py
estábamos devolviendo el statement sin “;” desde el dunder methos de __str__
, eso hacía que el test fallara porque “foo” era diferente de “foo;” (lo expectado), así que lo primero que hice fue arreglar el dunder method __str__
de la clase ExpressionStatement
:
def __str__(self) -> str:
return f"{str(self.expression)};"
Y por último, ahora si puse mis tests que revisan ambas expresiones, integers e identificadores 😄
def test_expression_statement(self) -> None:
program: Program = Program(statements=[
ExpressionStatement(
token=Token(TokenType.IDENT, literal="foobar"),
expression=Identifier(
token=Token(TokenType.IDENT, literal="foobar"),
value="foobar"
)
),
ExpressionStatement(
token=Token(TokenType.INT, literal="5"),
expression=Identifier(
token=Token(TokenType.INT, literal="5"),
value="5"
)
)
])
program_str = str(program)
self.assertEquals(program_str, "foobar;5;")
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.