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 */
015 public class MockExpressionEvaluator extends ExpressionEvaluator
016 {
017 private Map expressions = new HashMap();
018
019 /**
020 * Adds an object as a result for the specified expression.
021 * @param expression the expression
022 * @param object the object
023 */
024 public void addObject(String expression, Object object)
025 {
026 expressions.put(expression, object);
027 }
028
029 /**
030 * Clears all expressions and corresponding objects.
031 */
032 public void clearObjects()
033 {
034 expressions.clear();
035 }
036
037 public Object evaluate(String expression, Class expectedType, VariableResolver resolver, FunctionMapper mapper) throws ELException
038 {
039 Object object = expressions.get(expression);
040 if(null == object)
041 {
042 throw new ELException("No object for expression " + expression + " defined.");
043 }
044 if(!object.getClass().equals(expectedType))
045 {
046 throw new ELException("Expected type " + expectedType + " for expression " + expression + " but actual type is " + object.getClass());
047 }
048 return object;
049 }
050
051 public Expression parseExpression(String expression, Class expectedType, FunctionMapper mapper) throws ELException
052 {
053 return new MockExpression(this, expression, expectedType, mapper);
054 }
055 }