Author: musachy
Date: Thu Nov 12 18:39:59 2009
New Revision: 835494
URL:
http://svn.apache.org/viewvc?rev=835494&view=revLog:
Add more test, rename base test class
Added:
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/PerformanceTest.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELBaseTest.java
Removed:
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/AbstractUELTest.java
Modified:
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/CompoundRootELResolver.java
struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/ValueStackContextReferenceELResolver.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/BuiltinFunctionsTest.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELMethodInvocationTest.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackReadValueTest.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackSetValueTest.java
struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELValueStackOtherTests.java
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/CompoundRootELResolver.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/CompoundRootELResolver.java?rev=835494&r1=835493&r2=835494&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/CompoundRootELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/CompoundRootELResolver.java Thu Nov 12 18:39:59 2009
@@ -23,13 +23,9 @@
public Object getValue(ELContext elContext, Object base, Object property) {
//EL doesn't know of value stack, so when an expression like "A.B" is evaluated
//this method will be called with a null target and an "A" property
- if (base == null) {
-
- String propertyName = property.toString();
-
- if (StringUtils.startsWith(propertyName, "#"))
- return null;
+ String propertyName = property.toString();
+ if (base == null && !StringUtils.startsWith(propertyName, "#")) {
CompoundRoot root = (CompoundRoot) elContext.getContext(CompoundRoot.class);
if (root == null) {
return null;
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/ValueStackContextReferenceELResolver.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/ValueStackContextReferenceELResolver.java?rev=835494&r1=835493&r2=835494&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/ValueStackContextReferenceELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uel/elresolvers/ValueStackContextReferenceELResolver.java Thu Nov 12 18:39:59 2009
@@ -36,19 +36,16 @@
}
public Object getValue(ELContext elContext, Object base, Object property) {
- String objectName = property.toString();
- if (StringUtils.startsWith(objectName, "#")) {
- objectName = StringUtils.removeStart(property.toString(), "#");
+ String objectName = StringUtils.removeStart(property.toString(), "#");
- Map valueStackContext = getValueStackContext(elContext);
- Object obj = valueStackContext.get(objectName);
+ Map valueStackContext = getValueStackContext(elContext);
+ Object obj = valueStackContext.get(objectName);
- if (obj != null) {
- valueStackContext.put(XWorkConverter.LAST_BEAN_CLASS_ACCESSED, obj.getClass());
- valueStackContext.put(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED, objectName);
- elContext.setPropertyResolved(true);
- return obj;
- }
+ if (obj != null) {
+ valueStackContext.put(XWorkConverter.LAST_BEAN_CLASS_ACCESSED, obj.getClass());
+ valueStackContext.put(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED, objectName);
+ elContext.setPropertyResolved(true);
+ return obj;
}
return null;
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/BuiltinFunctionsTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/BuiltinFunctionsTest.java?rev=835494&r1=835493&r2=835494&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/BuiltinFunctionsTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/BuiltinFunctionsTest.java Thu Nov 12 18:39:59 2009
@@ -25,7 +25,7 @@
import java.lang.reflect.InvocationTargetException;
-public class BuiltinFunctionsTest extends AbstractUELTest {
+public class BuiltinFunctionsTest extends UELBaseTest {
public void testGetText() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
TestAction action = new TestAction();
stack.push(action);
Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/PerformanceTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/PerformanceTest.java?rev=835494&view=auto==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/PerformanceTest.java (added)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/PerformanceTest.java Thu Nov 12 18:39:59 2009
@@ -0,0 +1,119 @@
+package org.apache.struts2.uel;
+
+import com.opensymphony.xwork2.ognl.OgnlValueStackFactory;
+import com.opensymphony.xwork2.util.ValueStack;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
+
+public class PerformanceTest extends UELBaseTest {
+ private final long ITERATIONS = 1000000;
+ private ValueStack ognlValueStack;
+
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ OgnlValueStackFactory ognlValueStackFactory = new OgnlValueStackFactory();
+ container.inject(ognlValueStackFactory);
+ this.ognlValueStack = ognlValueStackFactory.createValueStack();
+ }
+
+ public void testSuperNested() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+ TestObject obj0 = new TestObject("0");
+
+ ognlValueStack.push(obj0);
+ root.push(obj0);
+
+ TestObject obj1 = new TestObject("1");
+ obj0.setInner(obj1);
+
+ TestObject obj2 = new TestObject("2");
+ Map map = new HashMap();
+ map.put("key0", obj2);
+ obj1.setParameters(map);
+
+ TestObject obj3 = new TestObject("3");
+ List list = new ArrayList();
+ list.add(obj3);
+ obj2.setObject(obj3);
+
+ TestObject obj4 = new TestObject("4");
+ TestObject[] array = new TestObject[]{obj4};
+ obj3.setObject(array);
+
+ stack.getContext().put("obj", obj0);
+ ognlValueStack.getContext().put("obj", obj0);
+
+ String expr = "inner.parameters['key0'].object.object[0].value";
+
+ assertEquals("4", stack.findValue(expr));
+ assertEquals("4", ognlValueStack.findValue(expr));
+ compare(expr);
+ }
+
+ public void testContextReferences() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+ TestObject obj = new TestObject();
+ obj.setValue("val");
+ obj.setAge(1);
+ stack.getContext().put("obj", obj);
+ ognlValueStack.getContext().put("obj", obj);
+
+ //more expressions
+ TestObject obj2 = new TestObject();
+ obj2.setValue("val2");
+ obj2.setAge(2);
+ stack.getContext().put("obj2", obj2);
+ ognlValueStack.getContext().put("obj2", obj2);
+
+ //addition
+ String expr = "#obj.age + #obj2.age";
+ assertEquals(3L, stack.findValue(expr));
+ assertEquals(3, ognlValueStack.findValue(expr));
+
+ compare(expr);
+ }
+
+ public void testArithmetics() {
+ Map uelContext = stack.getContext();
+ Map ognlContext = ognlValueStack.getContext();
+
+ uelContext.put("x", 1);
+ uelContext.put("y", 2);
+ uelContext.put("z", 3);
+
+ ognlContext.put("x", 1);
+ ognlContext.put("y", 2);
+ ognlContext.put("z", 3);
+
+ String expr = "#x + #y * #z";
+
+ assertEquals(7L, stack.findValue(expr, true));
+ assertEquals(7, ognlValueStack.findValue(expr));
+
+ compare(expr);
+ }
+
+ protected void compare(String expr) {
+ System.out.println("Eval: [" + expr + "] on " + ITERATIONS + " iterations");
+
+ long ognl = evaluate(ognlValueStack, expr);
+ System.out.println("OGNL: " + ognl + " ms");
+
+ long juel = evaluate(stack, expr);
+ System.out.println("JUEL: " + juel + " ms");
+ }
+
+ protected long evaluate(ValueStack valueStack, String expr) {
+ long start = System.currentTimeMillis();
+
+ for (int i = 0; i < ITERATIONS; i++) {
+ valueStack.findValue(expr);
+ }
+
+ return System.currentTimeMillis() - start;
+ }
+}
Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELBaseTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELBaseTest.java?rev=835494&view=auto==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELBaseTest.java (added)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELBaseTest.java Thu Nov 12 18:39:59 2009
@@ -0,0 +1,103 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *
http://www.apache.org/licenses/LICENSE-2.0+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.struts2.uel;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.XWorkTestCase;
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.inject.ContainerBuilder;
+import com.opensymphony.xwork2.test.StubConfigurationProvider;
+import com.opensymphony.xwork2.util.CompoundRoot;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.ValueStackFactory;
+import com.opensymphony.xwork2.util.location.LocatableProperties;
+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
+import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.uel.reflection.GenericReflectionProvider;
+import org.apache.struts2.util.StrutsTypeConverter;
+import org.springframework.mock.web.MockServletContext;
+
+import javax.el.ExpressionFactory;
+import javax.servlet.ServletContextEvent;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.Map;
+
+
+public abstract class UELBaseTest extends XWorkTestCase {
+ private ExpressionFactory factory = ExpressionFactory.newInstance();
+ protected XWorkConverter converter;
+ protected CompoundRoot root;
+ protected UELValueStack stack;
+ protected DateFormat format = DateFormat.getDateInstance();
+ protected ReflectionProvider reflectionProvider;
+
+ private class DateConverter extends StrutsTypeConverter {
+
+ @Override
+ public Object convertFromString(Map context, String[] values, Class toClass) {
+ try {
+ return format.parseObject(values[0]);
+ } catch (ParseException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public String convertToString(Map context, Object o) {
+ return format.format(o);
+ }
+
+ }
+
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ loadConfigurationProviders(new StubConfigurationProvider() {
+ public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {
+ builder.factory(ValueStack.class, UELValueStack.class);
+ builder.factory(ValueStackFactory.class, UELValueStackFactory.class);
+ builder.factory(ReflectionProvider.class, GenericReflectionProvider.class);
+ //builder.factory(StrutsTypeConverter)
+ }
+ });
+
+ converter = container.getInstance(XWorkConverter.class);
+ reflectionProvider = container.getInstance(ReflectionProvider.class);
+ converter.registerConverter("java.util.Date", new DateConverter());
+ this.root = new CompoundRoot();
+ this.stack = new UELValueStack(container);
+ stack.setRoot(root);
+ stack.getContext().put(ActionContext.CONTAINER, container);
+
+ MockServletContext servletContext = new MockServletContext();
+ ActionContext context = new ActionContext(stack.getContext());
+ ActionContext.setContext(context);
+ ServletActionContext.setServletContext(servletContext);
+
+ //simulate start up
+ UELServletContextListener listener = new UELServletContextListener();
+ listener.contextInitialized(new ServletContextEvent(servletContext));
+ }
+}
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELMethodInvocationTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELMethodInvocationTest.java?rev=835494&r1=835493&r2=835494&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELMethodInvocationTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELMethodInvocationTest.java Thu Nov 12 18:39:59 2009
@@ -23,7 +23,7 @@
import java.lang.reflect.InvocationTargetException;
-public class UELMethodInvocationTest extends AbstractUELTest {
+public class UELMethodInvocationTest extends UELBaseTest {
public void testBasicMethods() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
assertEquals("text", stack.findValue("${' text '.trim()}"));
assertEquals(3, stack.findValue("${'123'.length()}"));
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackReadValueTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackReadValueTest.java?rev=835494&r1=835493&r2=835494&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackReadValueTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackReadValueTest.java Thu Nov 12 18:39:59 2009
@@ -23,7 +23,7 @@
import java.lang.reflect.InvocationTargetException;
import java.util.*;
-public class UELStackReadValueTest extends AbstractUELTest {
+public class UELStackReadValueTest extends UELBaseTest {
public void testPrivateMethod() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
TestObject obj = new TestObject();
@@ -258,4 +258,14 @@
value = stack.findString("VALUENOTHERE");
assertNull(value);
}
+
+ public void testArithmetics() {
+ Map uelContext = stack.getContext();
+
+ uelContext.put("x", 1);
+ uelContext.put("y", 2);
+ uelContext.put("z", 3);
+
+ assertEquals(7L, stack.findValue("x + y * z"));
+ }
}
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackSetValueTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackSetValueTest.java?rev=835494&r1=835493&r2=835494&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackSetValueTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELStackSetValueTest.java Thu Nov 12 18:39:59 2009
@@ -26,7 +26,7 @@
import java.util.*;
-public class UELStackSetValueTest extends AbstractUELTest {
+public class UELStackSetValueTest extends UELBaseTest {
public void testPrivateMethod() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
TestObject obj = new TestObject();
Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELValueStackOtherTests.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELValueStackOtherTests.java?rev=835494&r1=835493&r2=835494&view=diff==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELValueStackOtherTests.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uel/UELValueStackOtherTests.java Thu Nov 12 18:39:59 2009
@@ -27,7 +27,7 @@
import java.util.Map;
-public class UELValueStackOtherTests extends AbstractUELTest {
+public class UELValueStackOtherTests extends UELBaseTest {
public void testExpOverridesCanStackExpUp() throws Exception {
Map expr1 = new LinkedHashMap();