|
|
|
|
@ -989,4 +989,41 @@ var a = "global";
|
|
|
|
|
System.setOut(standardOut)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun `Inheriting a method should work`() {
|
|
|
|
|
val standardOut = System.out
|
|
|
|
|
val outputStreamCaptor = ByteArrayOutputStream()
|
|
|
|
|
|
|
|
|
|
System.setOut(PrintStream(outputStreamCaptor))
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
val code = """
|
|
|
|
|
class Doughnut {
|
|
|
|
|
cook() {
|
|
|
|
|
print "Fry until golden brown.";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class BostonCream < Doughnut {}
|
|
|
|
|
|
|
|
|
|
BostonCream().cook();
|
|
|
|
|
""".trimIndent()
|
|
|
|
|
val scanner = Scanner(code)
|
|
|
|
|
val tokens = scanner.scanTokens()
|
|
|
|
|
val parser = Parser(tokens)
|
|
|
|
|
val statements = parser.parse()
|
|
|
|
|
assertEquals(3, statements.size)
|
|
|
|
|
|
|
|
|
|
val interpreter = Interpreter()
|
|
|
|
|
|
|
|
|
|
val resolver = Resolver(interpreter)
|
|
|
|
|
resolver.resolve(statements)
|
|
|
|
|
|
|
|
|
|
interpreter.interpret(statements)
|
|
|
|
|
val output = outputStreamCaptor.toString().trim()
|
|
|
|
|
assertEquals("Fry until golden brown.", output)
|
|
|
|
|
} finally {
|
|
|
|
|
System.setOut(standardOut)
|
|
|
|
|
}
|
|
|
|
|
}}
|
|
|
|
|
|