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 }