1/*2 * $Id: MVELAttributeEvaluatorTest.java 817009 2009-09-20 11:26:26Z apetrelli $3 *4 * Licensed to the Apache Software Foundation (ASF) under one5 * or more contributor license agreements. See the NOTICE file6 * distributed with this work for additional information7 * regarding copyright ownership. The ASF licenses this file8 * to you under the Apache License, Version 2.0 (the9 * "License"); you may not use this file except in compliance10 * with the License. You may obtain a copy of the License at11 *12 * http://www.apache.org/licenses/LICENSE-2.013 *14 * Unless required by applicable law or agreed to in writing,15 * software distributed under the License is distributed on an16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY17 * KIND, either express or implied. See the License for the18 * specific language governing permissions and limitations19 * under the License.20 */21package org.apache.tiles.mvel;
2223import java.util.HashMap;
24import java.util.Map;
2526import junit.framework.TestCase;
2728import org.apache.tiles.Attribute;
29import org.apache.tiles.Expression;
30import org.apache.tiles.TilesApplicationContext;
31import org.apache.tiles.context.TilesRequestContext;
32import org.apache.tiles.context.TilesRequestContextHolder;
33import org.apache.tiles.mvel.MVELAttributeEvaluator;
34import org.apache.tiles.mvel.TilesContextBeanVariableResolverFactory;
35import org.apache.tiles.mvel.TilesContextVariableResolverFactory;
36import org.easymock.EasyMock;
37import org.mvel2.integration.VariableResolverFactory;
3839/***40 * Tests {@link MVELAttributeEvaluator}.41 *42 * @version $Rev: 817009 $ $Date: 2009-09-20 13:26:26 +0200 (dom, 20 set 2009) $$43 */44publicclassMVELAttributeEvaluatorTestextends TestCase {
4546/***47 * The evaluator to test.48 */49private MVELAttributeEvaluator evaluator;
5051/***52 * The request object to use.53 */54private TilesRequestContext request;
5556/*** {@inheritDoc} */57protectedvoid setUp() throws Exception {
58super.setUp();
59 TilesRequestContextHolder requestHolder = new TilesRequestContextHolder();
60 VariableResolverFactory variableResolverFactory = new TilesContextVariableResolverFactory(
61 requestHolder);
62 variableResolverFactory
63 .setNextFactory(new TilesContextBeanVariableResolverFactory(
64 requestHolder));
65 evaluator = new MVELAttributeEvaluator(requestHolder,
66 variableResolverFactory);
67 Map<String, Object> requestScope = new HashMap<String, Object>();
68 Map<String, Object> sessionScope = new HashMap<String, Object>();
69 Map<String, Object> applicationScope = new HashMap<String, Object>();
70 requestScope.put("object1", "value");
71 sessionScope.put("object2", new Integer(1));
72 applicationScope.put("object3", new Float(2.0));
73 requestScope.put("paulaBean", new PaulaBean());
74 request = EasyMock.createMock(TilesRequestContext.class);
75 EasyMock.expect(request.getRequestScope()).andReturn(requestScope)
76 .anyTimes();
77 EasyMock.expect(request.getSessionScope()).andReturn(sessionScope)
78 .anyTimes();
79 TilesApplicationContext applicationContext = EasyMock
80 .createMock(TilesApplicationContext.class);
81 EasyMock.expect(request.getApplicationContext()).andReturn(
82 applicationContext).anyTimes();
83 EasyMock.expect(applicationContext.getApplicationScope()).andReturn(
84 applicationScope).anyTimes();
85 EasyMock.replay(request, applicationContext);
86 }
8788/***89 * Tests90 * {@link MVELAttributeEvaluator#evaluate(Attribute, TilesRequestContext)}.91 */92publicvoid testEvaluate() {
93 Attribute attribute = new Attribute();
94 attribute.setExpressionObject(new Expression("requestScope.object1"));
95 assertEquals("The value is not correct", "value", evaluator.evaluate(
96 attribute, request));
97 attribute.setExpressionObject(new Expression("sessionScope.object2"));
98 assertEquals("The value is not correct", new Integer(1), evaluator
99 .evaluate(attribute, request));
100 attribute.setExpressionObject(new Expression("applicationScope.object3"));
101 assertEquals("The value is not correct", new Float(2.0), evaluator
102 .evaluate(attribute, request));
103 attribute.setExpressionObject(new Expression("object1"));
104 assertEquals("The value is not correct", "value", evaluator.evaluate(
105 attribute, request));
106 attribute.setExpressionObject(new Expression("object2"));
107 assertEquals("The value is not correct", new Integer(1), evaluator
108 .evaluate(attribute, request));
109 attribute.setExpressionObject(new Expression("object3"));
110 assertEquals("The value is not correct", new Float(2.0), evaluator
111 .evaluate(attribute, request));
112 attribute.setExpressionObject(new Expression("paulaBean.paula"));
113 assertEquals("The value is not correct", "Brillant", evaluator
114 .evaluate(attribute, request));
115 attribute.setExpressionObject(new Expression("'String literal'"));
116 assertEquals("The value is not correct", "String literal", evaluator
117 .evaluate(attribute, request));
118 attribute.setValue(new Integer(2));
119 assertEquals("The value is not correct", new Integer(2), evaluator
120 .evaluate(attribute, request));
121 attribute.setValue("object1");
122 assertEquals("The value has been evaluated", "object1", evaluator
123 .evaluate(attribute, request));
124 }
125126/***127 * Tests {@link MVELAttributeEvaluator#evaluate(String, TilesRequestContext)}.128 */129publicvoid testEvaluateString() {
130 String expression = "requestScope.object1";
131 assertEquals("The value is not correct", "value", evaluator.evaluate(
132 expression, request));
133 expression = "sessionScope.object2";
134 assertEquals("The value is not correct", new Integer(1), evaluator
135 .evaluate(expression, request));
136 expression = "applicationScope.object3";
137 assertEquals("The value is not correct", new Float(2.0), evaluator
138 .evaluate(expression, request));
139 expression = "object1";
140 assertEquals("The value is not correct", "value", evaluator.evaluate(
141 expression, request));
142 expression = "object2";
143 assertEquals("The value is not correct", new Integer(1), evaluator
144 .evaluate(expression, request));
145 expression = "object3";
146 assertEquals("The value is not correct", new Float(2.0), evaluator
147 .evaluate(expression, request));
148 expression = "paulaBean.paula";
149 assertEquals("The value is not correct", "Brillant", evaluator
150 .evaluate(expression, request));
151 expression = "'String literal'";
152 assertEquals("The value is not correct", "String literal", evaluator
153 .evaluate(expression, request));
154 }
155156/***157 * This is The Brillant Paula Bean (sic) just like it was posted to:158 * http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx I hope that159 * there is no copyright on it.160 */161publicstaticclass PaulaBean {
162163/***164 * Paula is brillant, really.165 */166private String paula = "Brillant";
167168/***169 * Returns brillant.170 *171 * @return "Brillant".172 */173public String getPaula() {
174return paula;
175 }
176 }
177 }