package test.concordion.internal;
import org.concordion.internal.SimpleEvaluator;
import junit.framework.TestCase;
public class SimpleEvaluatorTest extends TestCase {
private SimpleEvaluator evaluator = new SimpleEvaluator(this);
public void testSupportsTemporaryVariables() throws Exception {
evaluator.setVariable("#temp", "Fred");
assertEquals("Fred", evaluator.evaluate("#temp"));
}
public void testVariablesCanBeOverwritten() {
evaluator.setVariable("#temp", "Fred");
evaluator.setVariable("#temp", "Barney");
assertEquals("Barney", evaluator.evaluate("#temp"));
}
public void testVariablesCanBePassedToMethods() {
evaluator.setVariable("#temp", "Fred");
assertEquals("Fred", evaluator.evaluate("myMethod(#temp)"));
}
public String myMethod(String s) {
return s;
}
public void testVariablesAreCoercedToFitMethodParameters() throws Exception {
evaluator.setVariable("#age", "15");
assertEquals(15L, evaluator.evaluate("myLongMethod(#age)"));
evaluator.setVariable("#age", "12.34");
assertEquals(12.34d, evaluator.evaluate("myDoubleMethod(#age)"));
}
public long myLongMethod(long value) {
return value;
}
public double myDoubleMethod(double value) {
return value;
}
public int square(int x) {
return x * x;
}
public Outer getOuter() {
return new Outer();
}
public class Outer {
private Inner inner;
public Outer() {
inner = new Inner();
}
public Inner getInner() {
return inner;
}
public class Inner {
public int getValue() {
return 1;
}
}
}
public void testAccessInnerVariable() {
evaluator.setVariable("#result", this);
assertEquals(1, evaluator.evaluate("#result.outer.inner.value"));
}
public void testEvaluationsCanCreateVariables() throws Exception {
evaluator.setVariable("#x", "10");
evaluator.evaluate("#y = square(#x)");
assertEquals(100, evaluator.evaluate("#y"));
assertEquals(100, evaluator.getVariable("#y"));
}
}