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        public void addObject(String expression, Object object)
020        {
021            expressions.put(expression, object);
022        }
023        
024        public void clearObjects()
025        {
026            expressions.clear();
027        }
028    
029        public Object evaluate(String expression, Class expectedType, VariableResolver resolver, FunctionMapper mapper) throws ELException
030        {
031            Object object = expressions.get(expression);
032            if(null == object)
033            {
034                throw new ELException("No object for expression " + expression + " defined.");
035            }
036            if(!object.getClass().equals(expectedType))
037            {
038                throw new ELException("Expected type " + expectedType + " for expression " + expression + " but actual type is " + object.getClass());
039            }
040            return object;
041        }
042    
043        public Expression parseExpression(String expression, Class expectedType, FunctionMapper mapper) throws ELException
044        {
045            return new MockExpression(this, expression, expectedType, mapper);
046        }
047    }