|
|
|
|
@ -161,4 +161,38 @@ class ParserTest {
|
|
|
|
|
assertTrue(ifStmt.thenBranch is Print)
|
|
|
|
|
assertTrue(ifStmt.elseBranch is Print)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun `valid code with while statement`() {
|
|
|
|
|
val code = """
|
|
|
|
|
while (1 < 2) print "true";
|
|
|
|
|
""".trimIndent()
|
|
|
|
|
val scanner = Scanner(code)
|
|
|
|
|
val tokens = scanner.scanTokens()
|
|
|
|
|
val parser = Parser(tokens)
|
|
|
|
|
val statements = parser.parse()
|
|
|
|
|
assertEquals(1,statements.size)
|
|
|
|
|
val stmt = statements.first()
|
|
|
|
|
assertTrue(stmt is While)
|
|
|
|
|
val whileStmt = stmt as While
|
|
|
|
|
assertTrue(whileStmt.condition is Binary)
|
|
|
|
|
assertTrue(whileStmt.body is Print)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun `valid code with for statement`() {
|
|
|
|
|
val code = """
|
|
|
|
|
for (var i = 0; i < 10; i = i + 1) print i;
|
|
|
|
|
""".trimIndent()
|
|
|
|
|
val scanner = Scanner(code)
|
|
|
|
|
val tokens = scanner.scanTokens()
|
|
|
|
|
val parser = Parser(tokens)
|
|
|
|
|
val statements = parser.parse()
|
|
|
|
|
assertEquals(1,statements.size)
|
|
|
|
|
val stmt = statements.first()
|
|
|
|
|
assertTrue(stmt is Block)
|
|
|
|
|
val block = stmt as Block
|
|
|
|
|
val blockStatements = block.statements
|
|
|
|
|
assertEquals(2,blockStatements.size)
|
|
|
|
|
}
|
|
|
|
|
}
|