package ql.tests;
import ql.ast.AstNode;
import ql.ast.expression.Expr;
import ql.ast.form.Form;
import ql.semantics.ExprEvaluator;
import ql.semantics.TypeChecker;
import ql.semantics.ValueTable;
import ql.semantics.errors.Message;
import ql.semantics.errors.Messages;
import ql.semantics.values.Value;
import ql.util.ParserHelper;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
/**
* Created by bore on 17/02/15.
*/
public class TestHelper
{
public static <T> T as(Object o, Class<T> t)
{
return t.isInstance(o) ? t.cast(o) : null;
}
public static Messages analyse(String formPath)
{
Form f = TestHelper.as(ParserHelper.ParseForm(formPath), Form.class);
return TypeChecker.check(f);
}
public static <T> void assertChildType(AstNode child, Class<T> type)
{
assertTrue(type.isInstance(child));
}
public static Value evaluate(String expr, ValueTable valueTable)
{
Expr e = TestHelper.as(ParserHelper.ParseExpression(expr), Expr.class);
assertNotNull(e);
return ExprEvaluator.evaluate(e, valueTable);
}
public static void assertMsContainError(Messages ms, String error)
{
assertTrue(msContainError(ms, error));
}
private static boolean msContainError(Messages ms, String error)
{
for (Message m : ms)
{
if (m.getMessage().equals(error))
{
return true;
}
}
return false;
}
}