package me.august.lumen; import me.august.lumen.compile.parser.ast.ClassNode; import me.august.lumen.compile.parser.ast.CodeBlock; import me.august.lumen.compile.parser.ast.MethodNode; import me.august.lumen.compile.parser.ast.ProgramNode; import me.august.lumen.compile.parser.ast.stmt.IfStmt; import me.august.lumen.compile.parser.ast.stmt.VarStmt; import me.august.lumen.compile.parser.ast.stmt.WhileStmt; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class MethodTest { private static final String TEST_METHOD_FILE = "/test_method.lm"; private static final String TEST_STATEMENTS_FILE = "/test_statements.lm"; @Test public void testMethod() { ProgramNode program = Util.parse(Util.readResource(TEST_METHOD_FILE)); ClassNode cls = program.getClassNode(); assertEquals( "Expected 1 method in class", 1, cls.getMethods().size() ); MethodNode method = cls.getMethods().get(0); assertEquals( "Expected one code block", 1, method.getBody().getChildren().size() ); CodeBlock code = method.getBody().getChildren().get(0); assertTrue( "Expected code to be a variable declaration", code instanceof VarStmt ); VarStmt var = (VarStmt) code; assertEquals( "Expected variable name to be 'bar'", "bar", var.getName() ); assertEquals( "Expected variable type to be 'String'", "String", var.getUnresolvedType().getBaseName() ); assertTrue( "Expected variable to have default value", var.getDefaultValue() != null ); } @Test public void testStatements() { ProgramNode program = Util.parse(Util.readResource(TEST_STATEMENTS_FILE)); ClassNode cls = program.getClassNode(); MethodNode method = cls.getMethods().get(0); testIfStatement(method, 0); testWhileStatement(method, 1); } private void testIfStatement(MethodNode method, int idx) { CodeBlock code = method.getBody().getChildren().get(idx); assertTrue( "Expected if statement", code instanceof IfStmt ); } private void testWhileStatement(MethodNode method, int idx) { CodeBlock code = method.getBody().getChildren().get(idx); assertTrue( "Expected while statement", code instanceof WhileStmt ); } }