package uva.ql.test;
import static org.junit.Assert.assertEquals;
import java.io.FileInputStream;
import java.io.IOException;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
import org.junit.Test;
import uva.ql.ast.Node;
import uva.ql.ast.Prog;
import uva.ql.ast.expression.evaluation.ValueTable;
import uva.ql.parser.QLLexer;
import uva.ql.parser.QLMainVisitor;
import uva.ql.parser.QLParser;
public class TestExpressionEvaluator {
private ParseTree getParseTree(String fromPath){
ANTLRInputStream inputStream = null;
try{
inputStream = new ANTLRInputStream(new FileInputStream(fromPath));
}
catch (IOException e){
System.out.println("Exception: " + e.getMessage());
}
QLLexer lexer = new QLLexer(inputStream);
CommonTokenStream stream = new CommonTokenStream(lexer);
QLParser parser = new QLParser(stream);
ParseTree tree = parser.prog();
return tree;
}
private Node getAbstractSyntaxTree(ParseTree fromTree){
QLMainVisitor visitor = new QLMainVisitor();
Node ast = visitor.visit(fromTree);
return ast;
}
@Test
public void testExpressionEvaluator_ValueTable(){
ParseTree tree = this.getParseTree("src/uva/ql/test/source/Evaluator.ql");
Prog prog = (Prog)this.getAbstractSyntaxTree(tree);
ValueTable table = new ValueTable(prog);
int a = (int)table.getValue("a").getValue();
int b = (int)table.getValue("b").getValue();
int c = (int)table.getValue("c").getValue();
assertEquals(a, 0);
assertEquals(b, 2);
assertEquals(c, 2);
}
}