public void testFunctions() throws Exception {
System.setProperty("javax.servlet.jsp.functions.allowed", "true");
Map m = getSampleMethodMap();
Evaluator e = new Evaluator();
Object o;
o = e.evaluate("", "4", Integer.class, null, null, m, "foo");
assertEquals("4", o.toString());
o = e.evaluate("", "${4}", Integer.class, null, null, m, "foo");
assertEquals("4", o.toString());
o = e.evaluate("", "${2+2}", Integer.class, null, null, m, "foo");
assertEquals("4", o.toString());
o = e.evaluate("", "${foo:add(2, 3)}", Integer.class, null, null, m, "foo");
assertEquals("5", o.toString());
o = e.evaluate("", "${foo:multiply(2, 3)}", Integer.class, null, null, m, "foo");
assertEquals("6", o.toString());
o = e.evaluate("", "${add(2, 3)}", Integer.class, null, null, m, "foo");
assertEquals("5", o.toString());
o = e.evaluate("", "${multiply(2, 3)}", Integer.class, null, null, m, "foo");
assertEquals("6", o.toString());
o = e.evaluate("", "${add(2, 3) + 5}", Integer.class, null, null, m, "foo");
assertEquals("10", o.toString());
o = e.evaluate("", "${getInt(getInteger(getInt(5)))}", Integer.class, null, null, m, "foo");
assertEquals("5", o.toString());
o = e.evaluate("", "${getInteger(getInt(getInteger(5)))}", Integer.class, null, null, m, "foo");
assertEquals("5", o.toString());
o = e.evaluate("", "${getInt(getInt(getInt(5)))}", Integer.class, null, null, m, "foo");
assertEquals("5", o.toString());
o = e.evaluate("", "${getInteger(getInteger(getInteger(5)))}", Integer.class, null, null, m, "foo");
assertEquals("5", o.toString());
}