package test.ql.typechecker;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import ql.ast.Expression;
import ql.ast.QLNode;
import ql.ast.Statement;
import ql.ast.visitor.typechecker.TypeChecker;
import ql.ast.visitor.typechecker.TypeEnvironment;
import ql.errorhandling.ErrorEnvironment;
import ql.parser.Parser;
public abstract class BaseTest {
private QLNode inputNode;
private boolean expected;
private static TypeEnvironment register;
public BaseTest(String input, boolean expected) {
System.out.println("Testing: " + input);
inputNode = Parser.parse(input);
this.expected = expected;
}
@BeforeClass
public static void setupEnvironment() {
System.out.println("===============================");
System.out.println("*** Testing QL Type Checker ***");
System.out.println("===============================");
}
@Before
public void setupTest() {
// Clear the register to avoid problems.
register = new TypeEnvironment();
}
@Test
public void test() {
ErrorEnvironment errors;
if(inputNode instanceof Expression) {
errors = TypeChecker.check((Expression) inputNode, register);
} else {
errors = TypeChecker.check((Statement) inputNode, register);
}
boolean result = !errors.hasErrors();
if(result != expected) {
System.out.println(errors.getErrors());
}
System.out.println(" Result: " + result);
assertEquals(expected, result);
}
}