package org.openflexo.antar.binding;
import java.util.Hashtable;
import java.util.List;
import junit.framework.TestCase;
import org.openflexo.antar.expr.Expression;
import org.openflexo.antar.expr.TypeMismatchException;
import org.openflexo.antar.expr.Variable;
import org.openflexo.antar.expr.parser.ExpressionParser;
import org.openflexo.antar.expr.parser.ParseException;
public class TestExpression extends TestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
}
public void testVariable1() {
try {
List<Variable> vars = Expression.extractVariables("this+is+a+test");
System.out.println("Variables:" + vars);
assertEquals(4, vars.size());
assertTrue(vars.contains(new Variable("this")));
assertTrue(vars.contains(new Variable("is")));
assertTrue(vars.contains(new Variable("a")));
assertTrue(vars.contains(new Variable("test")));
} catch (ParseException e) {
e.printStackTrace();
fail();
} catch (TypeMismatchException e) {
e.printStackTrace();
fail();
}
}
public void testVariable2() {
try {
List<Variable> vars = Expression.extractVariables("i+(am-a/test)+2");
System.out.println("Variables:" + vars);
assertEquals(4, vars.size());
assertTrue(vars.contains(new Variable("i")));
assertTrue(vars.contains(new Variable("am")));
assertTrue(vars.contains(new Variable("a")));
assertTrue(vars.contains(new Variable("test")));
} catch (ParseException e) {
e.printStackTrace();
fail();
} catch (TypeMismatchException e) {
e.printStackTrace();
fail();
}
}
public void testVariable3() {
try {
List<Variable> vars = Expression.extractVariables("this.is.a.little.test+and+this+is.not()");
System.out.println("Variables:" + vars);
assertEquals(4, vars.size());
assertTrue(vars.contains(new Variable("this.is.a.little.test")));
assertTrue(vars.contains(new Variable("and")));
assertTrue(vars.contains(new Variable("this")));
assertTrue(vars.contains(new Variable("is.not()")));
} catch (ParseException e) {
e.printStackTrace();
fail();
} catch (TypeMismatchException e) {
e.printStackTrace();
fail();
}
}
public void testPrimitive1() {
try {
List<Expression> vars = Expression.extractPrimitives("i+am+a+test");
System.out.println("Variables:" + vars);
assertEquals(4, vars.size());
assertTrue(vars.contains(new Variable("i")));
assertTrue(vars.contains(new Variable("am")));
assertTrue(vars.contains(new Variable("a")));
assertTrue(vars.contains(new Variable("test")));
} catch (ParseException e) {
e.printStackTrace();
fail();
} catch (TypeMismatchException e) {
e.printStackTrace();
fail();
}
}
public void testPrimitive2() {
try {
List<Expression> vars = Expression.extractPrimitives("i+(am-a/test)+2");
System.out.println("Variables:" + vars);
assertEquals(4, vars.size());
assertTrue(vars.contains(new Variable("i")));
assertTrue(vars.contains(new Variable("am")));
assertTrue(vars.contains(new Variable("a")));
assertTrue(vars.contains(new Variable("test")));
} catch (ParseException e) {
e.printStackTrace();
fail();
} catch (TypeMismatchException e) {
e.printStackTrace();
fail();
}
}
public void testPrimitive3() {
try {
List<Expression> vars = Expression.extractPrimitives("i.am.a.little.test+and+following+is.not()");
System.out.println("Variables:" + vars);
assertEquals(4, vars.size());
assertTrue(vars.contains(new Variable("i.am.a.little.test")));
assertTrue(vars.contains(new Variable("and")));
assertTrue(vars.contains(new Variable("following")));
assertTrue(vars.contains(new Variable("is.not()")));
} catch (ParseException e) {
e.printStackTrace();
fail();
} catch (TypeMismatchException e) {
e.printStackTrace();
fail();
}
}
public void testEvaluate1() {
try {
Expression e = ExpressionParser.parse("a+(b-c)/2");
Hashtable<String, Object> variables = new Hashtable<String, Object>();
variables.put("a", 1);
variables.put("b", 10);
variables.put("c", 3);
Expression evaluated = e.evaluate(variables);
System.out.println("evaluated=" + evaluated);
assertEquals(ExpressionParser.parse("4.5"), evaluated);
} catch (ParseException e) {
e.printStackTrace();
fail();
} catch (TypeMismatchException e) {
e.printStackTrace();
fail();
}
}
public void testEvaluate2() {
try {
Expression e = ExpressionParser.parse("a+(b-2-c)/2");
Hashtable<String, Object> variables = new Hashtable<String, Object>();
variables.put("a", 1);
variables.put("b", 10);
Expression evaluated = e.evaluate(variables);
System.out.println("evaluated=" + evaluated);
assertEquals(ExpressionParser.parse("1+(8-c)/2"), evaluated);
} catch (ParseException e) {
e.printStackTrace();
fail();
} catch (TypeMismatchException e) {
e.printStackTrace();
fail();
}
}
}