package test.ql.evaluator;
import static org.junit.Assert.assertEquals;
import org.junit.BeforeClass;
import org.junit.Test;
import ql.Value;
import ql.ast.Expression;
import ql.ast.QLNode;
import ql.ast.Statement;
import ql.ast.expression.Identifier;
import ql.ast.visitor.evaluator.Evaluator;
import ql.ast.visitor.evaluator.ValueEnvironment;
import ql.parser.Parser;
import ql.value.BooleanValue;
import ql.value.FloatValue;
import ql.value.IntegerValue;
import ql.value.StringValue;
public abstract class BaseTest {
private QLNode inputNode;
private Value expected;
private static ValueEnvironment register = new ValueEnvironment();
public BaseTest(String input, Value 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 Evaluator ***");
System.out.println("=========================");
register.store(new Identifier("integerQuestion"), new IntegerValue(10));
register.store(new Identifier("floatQuestion"), new FloatValue((float) 10.5));
register.store(new Identifier("booleanQuestion"), new BooleanValue(true));
register.store(new Identifier("stringQuestion"), new StringValue("A string"));
}
@Test
public void test() {
Value expressionValue;
if(inputNode instanceof Expression) {
expressionValue = Evaluator.check((Expression) inputNode, register);
} else {
expressionValue = Evaluator.check((Statement) inputNode, register);
}
System.out.println(" Result: " + expressionValue);
assertEquals(expected, expressionValue);
}
}