001 package com.mockrunner.mock.web;
002
003 import java.util.HashMap;
004 import java.util.Map;
005
006 import javax.servlet.jsp.el.ELException;
007 import javax.servlet.jsp.el.Expression;
008 import javax.servlet.jsp.el.ExpressionEvaluator;
009 import javax.servlet.jsp.el.FunctionMapper;
010 import javax.servlet.jsp.el.VariableResolver;
011
012 /**
013 * Mock implementation of <code>ExpressionEvaluator</code>.
014 * This implementation cannot be used for real EL
015 * expressions. Real EL expression support is only
016 * available for the <b>Unified Expression Language</b> API
017 * using the {@link JasperJspFactory}.
018 */
019 public class MockExpressionEvaluator extends ExpressionEvaluator
020 {
021 private Map expressions = new HashMap();
022
023 /**
024 * Adds an object as a result for the specified expression.
025 * @param expression the expression
026 * @param object the object
027 */
028 public void addObject(String expression, Object object)
029 {
030 expressions.put(expression, object);
031 }
032
033 /**
034 * Clears all expressions and corresponding objects.
035 */
036 public void clearObjects()
037 {
038 expressions.clear();
039 }
040
041 public Object evaluate(String expression, Class expectedType, VariableResolver resolver, FunctionMapper mapper) throws ELException
042 {
043 Object object = expressions.get(expression);
044 if(null == object)
045 {
046 throw new ELException("No object for expression " + expression + " defined.");
047 }
048 if(!object.getClass().equals(expectedType))
049 {
050 throw new ELException("Expected type " + expectedType + " for expression " + expression + " but actual type is " + object.getClass());
051 }
052 return object;
053 }
054
055 public Expression parseExpression(String expression, Class expectedType, FunctionMapper mapper) throws ELException
056 {
057 return new MockExpression(this, expression, expectedType, mapper);
058 }
059 }