svn commit: r833625 - in /struts/sandbox/trunk/struts2-uel-plugin/src: main/java/org/apache/struts2/uelplugin/ main/java/org/apache/struts2/uelplugin/elresolvers/ test/java/org/apache/struts2/uelplugin/

View: New views
1 Messages — Rating Filter:   Alert me  

svn commit: r833625 - in /struts/sandbox/trunk/struts2-uel-plugin/src: main/java/org/apache/struts2/uelplugin/ main/java/org/apache/struts2/uelplugin/elresolvers/ test/java/org/apache/struts2/uelplugin/

by musachy-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Author: musachy
Date: Sat Nov  7 01:18:15 2009
New Revision: 833625

URL: http://svn.apache.org/viewvc?rev=833625&view=rev
Log:
add tests, and array el resolver

Added:
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
Removed:
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/DummyTypeConverter.java
Modified:
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java?rev=833625&r1=833624&r2=833625&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java Sat Nov  7 01:18:15 2009
@@ -2,10 +2,7 @@
 
 import com.opensymphony.xwork2.inject.Container;
 import de.odysseus.el.util.SimpleContext;
-import org.apache.struts2.uelplugin.elresolvers.CompoundRootELResolver;
-import org.apache.struts2.uelplugin.elresolvers.ValueStackContextResolver;
-import org.apache.struts2.uelplugin.elresolvers.XWorkBeanELResolver;
-import org.apache.struts2.uelplugin.elresolvers.XWorkListELResolver;
+import org.apache.struts2.uelplugin.elresolvers.*;
 
 import javax.el.*;
 
@@ -19,13 +16,12 @@
     public CompoundRootELContext(final Container container) {
         super(new CompositeELResolver() {
             {
-                add(new ValueStackContextResolver());
-                add(new XWorkListELResolver(container));
                 add(new CompoundRootELResolver(container));
-                add(new ArrayELResolver(false));
-                add(new MapELResolver(false));
-                add(new ResourceBundleELResolver());
+                add(new ValueStackContextResolver());
                 add(new XWorkBeanELResolver(container));
+                add(new XWorkListELResolver(container));
+                add(new XWorkMapELResolver(container));
+                add(new XWorkArrayELResolver(container));
                 add(new BeanELResolver());
             }});
     }

Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java?rev=833625&view=auto
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java (added)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java Sat Nov  7 01:18:15 2009
@@ -0,0 +1,119 @@
+package org.apache.struts2.uelplugin.elresolvers;
+
+import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import java.util.List;
+import java.util.Map;
+import java.lang.reflect.Array;
+
+
+public class XWorkArrayELResolver extends AbstractResolver {
+    public XWorkArrayELResolver(Container container) {
+        super(container);
+    }
+
+    public Object getValue(ELContext elContext, Object target, Object property) {
+        if (target != null && property != null && target.getClass().isArray()) {
+
+            Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+
+            Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+            String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+
+            Integer index = null;
+
+            if (property instanceof Number)
+                index = ((Number) property).intValue();
+            else {
+                try {
+                    index = Integer.valueOf(property.toString());
+                } catch (NumberFormatException e) {
+                    //ignore
+                }
+            }
+
+            if (index != null) {
+                if (ReflectionContextState.isCreatingNullObjects(context) && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
+                    Class clazz = target.getClass().getComponentType();
+
+                    if (index < 0 || index >= Array.getLength(target)) {
+                        //nothing to do here, as we cannot set a new array
+                        throw new ELException("Index [" + index + "] is out of bounds");
+                    } else {
+                        //valid index
+                        Object obj = Array.get(target, index);
+                        if (obj == null) {
+                            try {
+                                obj = objectFactory.buildBean(clazz, context);
+                                Array.set(target, index, obj);
+                            } catch (Exception e) {
+                                throw new ELException("unable to instantiate a new object for property [" + lastProperty + "]", e);
+                            }
+                        }
+
+                        elContext.setPropertyResolved(true);
+                        return obj;
+                    }
+                } else {
+                    //try normal list
+                    if (index < Array.getLength(target)) {
+                        elContext.setPropertyResolved(true);
+                        return Array.get(target, index);
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+    public void setValue(ELContext elContext, Object target, Object property, Object value) {
+        if (target != null && property != null && target.getClass().isArray()) {
+
+            Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+
+            Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+            String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+
+            Integer index = null;
+
+            if (property instanceof Number)
+                index = ((Number) property).intValue();
+            else {
+                try {
+                    index = Integer.valueOf(property.toString());
+                } catch (NumberFormatException e) {
+                    //ignore
+                }
+            }
+
+            Class clazz = target.getClass().getComponentType();
+
+            if (index != null) {
+                if (ReflectionContextState.isCreatingNullObjects(context) && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
+
+                    if (index < 0 || index >= Array.getLength(target)) {
+                        //nothing to do here, as we cannot set a new array
+                        throw new ELException("Index [" + index + "] is out of bounds");
+                    } else {
+                        //valid index
+                        Object convertedValue = xworkConverter.convertValue(context, value, clazz);
+                        Array.set(target, index, convertedValue);
+                        elContext.setPropertyResolved(true);
+                    }
+                }
+            } else {
+                //try normal list
+                if (index < Array.getLength(target)) {
+                    Object convertedValue = xworkConverter.convertValue(context, value, clazz);
+                    Array.set(target, index, convertedValue);
+                    elContext.setPropertyResolved(true);
+                }
+            }
+        }
+    }
+}

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java?rev=833625&r1=833624&r2=833625&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java Sat Nov  7 01:18:15 2009
@@ -1,16 +1,12 @@
 package org.apache.struts2.uelplugin.elresolvers;
 
 import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
-import com.opensymphony.xwork2.parameters.accessor.ParametersPropertyAccessor;
-import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
-import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
 import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
 import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.struts2.StrutsException;
 
-import javax.el.BeanELResolver;
 import javax.el.ELContext;
-import java.lang.reflect.InvocationTargetException;
 import java.util.Map;
 
 public class XWorkBeanELResolver extends AbstractResolver {

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java?rev=833625&r1=833624&r2=833625&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java Sat Nov  7 01:18:15 2009
@@ -16,9 +16,9 @@
     }
 
     public Object getValue(ELContext elContext, Object target, Object property) {
-        Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
-
         if (target != null && property != null && target instanceof List) {
+
+            Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
             List list = (List) target;
 
             Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
@@ -31,49 +31,49 @@
                 //ignore
             }
 
-            if (numericValue != null
-                    && ReflectionContextState.isCreatingNullObjects(context)
-                    && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
-                int index = numericValue.intValue();
-                int listSize = list.size();
-
-                /*if (lastClass == null || lastProperty == null) {
-                    return super.getProperty(context, target, name);
-                }*/
-                Class beanClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, property);
-                if (listSize <= index) {
-                    Object result = null;
-
-                    for (int i = listSize; i < index; i++) {
-                        list.add(null);
+            if (numericValue != null) {
+                if (ReflectionContextState.isCreatingNullObjects(context) && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
+                    int index = numericValue.intValue();
+                    int listSize = list.size();
+
+                    /*if (lastClass == null || lastProperty == null) {
+                        return super.getProperty(context, target, name);
+                    }*/
+                    Class beanClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, property);
+                    if (listSize <= index) {
+                        Object result = null;
+
+                        for (int i = listSize; i < index; i++) {
+                            list.add(null);
+                        }
+                        try {
+                            list.add(index, result = objectFactory.buildBean(beanClass, context));
+                        } catch (Exception exc) {
+                            throw new XWorkException(exc);
+                        }
+
+                        elContext.setPropertyResolved(true);
+                        return result;
+                    } else if (list.get(index) == null) {
+                        Object result = null;
+                        try {
+                            list.set(index, result = objectFactory.buildBean(beanClass, context));
+                        } catch (Exception exc) {
+                            throw new XWorkException(exc);
+                        }
+
+                        elContext.setPropertyResolved(true);
+                        return result;
+                    } else {
+                        elContext.setPropertyResolved(true);
+                        return list.get(index);
                     }
-                    try {
-                        list.add(index, result = objectFactory.buildBean(beanClass, context));
-                    } catch (Exception exc) {
-                        throw new XWorkException(exc);
-                    }
-
-                    elContext.setPropertyResolved(true);
-                    return result;
-                } else if (list.get(index) == null) {
-                    Object result = null;
-                    try {
-                        list.set(index, result = objectFactory.buildBean(beanClass, context));
-                    } catch (Exception exc) {
-                        throw new XWorkException(exc);
-                    }
-
-                    elContext.setPropertyResolved(true);
-                    return result;
                 } else {
-                    elContext.setPropertyResolved(true);
-                    return list.get(index);
-                }
-            } else {
-                //try normal list
-                if (numericValue < list.size()) {
-                    elContext.setPropertyResolved(true);
-                    return list.get(numericValue);
+                    //try normal list
+                    if (numericValue < list.size()) {
+                        elContext.setPropertyResolved(true);
+                        return list.get(numericValue);
+                    }
                 }
             }
         }

Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java?rev=833625&view=auto
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java (added)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java Sat Nov  7 01:18:15 2009
@@ -0,0 +1,137 @@
+package org.apache.struts2.uelplugin.elresolvers;
+
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.inject.Container;
+
+import javax.el.ELContext;
+import java.util.Map;
+import java.util.List;
+import java.util.WeakHashMap;
+
+public class XWorkMapELResolver extends AbstractResolver {
+    private final Map<Key, Class> keyClassCache = new WeakHashMap<Key, Class>();
+
+    public XWorkMapELResolver(Container container) {
+        super(container);
+    }
+
+    public Object getValue(ELContext elContext, Object target, Object property) {
+        Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+
+        if (target != null && property != null && target instanceof Map) {
+            Object result = null;
+
+            //find the key class and convert the name to that class
+            Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+            String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+
+            Class keyClass = objectTypeDeterminer.getKeyClass(lastClass, lastProperty);
+
+            if (keyClass == null)
+                keyClass = String.class;
+
+            Object key = getKey(context, property);
+            Map map = (Map) target;
+            result = map.get(key);
+
+            if (result == null &&
+                    context.get(ReflectionContextState.CREATE_NULL_OBJECTS) != null
+                    && objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, false)) {
+                Class valueClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, key);
+
+                try {
+                    result = objectFactory.buildBean(valueClass, context);
+                    map.put(key, result);
+                } catch (Exception exc) {
+                }
+
+            }
+
+            elContext.setPropertyResolved(true);
+            return result;
+        }
+        return null;
+    }
+
+    private Object getKey(Map context, Object name) {
+        Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+        String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+        if (lastClass == null || lastProperty == null) {
+            // return java.lang.String.class;
+            // commented out the above -- it makes absolutely no sense for when setting basic maps!
+            return name;
+        }
+
+        Key key = new Key(lastClass, lastProperty);
+        //lookup in the cache first
+        Class keyClass = keyClassCache.get(key);
+
+        if (keyClass == null) {
+            keyClass = objectTypeDeterminer.getKeyClass(lastClass, lastProperty);
+
+            if (keyClass != null)
+                keyClassCache.put(key, keyClass);
+        }
+
+        if (keyClass == null) {
+            keyClass = String.class;
+            keyClassCache.put(key, String.class);
+        }
+
+        return xworkConverter.convertValue(context, name, keyClass);
+
+    }
+
+    public void setValue(ELContext elContext, Object target, Object property, Object value) {
+        Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+
+        if (target != null && property != null && target instanceof Map) {
+            Object key = getKey(context, property);
+            Map map = (Map) target;
+            map.put(key, getValue(context, value));
+        }
+    }
+
+    private Object getValue(Map context, Object value) {
+        Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
+        String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
+        if (lastClass == null || lastProperty == null) {
+            return value;
+        }
+        Class elementClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, null);
+        if (elementClass == null) {
+            return value; // nothing is specified, we assume it will be the value passed in.
+        }
+        return xworkConverter.convertValue(context, value, elementClass);
+    }
+}
+
+class Key {
+    Class clazz;
+    String property;
+
+    Key(Class clazz, String property) {
+        this.clazz = clazz;
+        this.property = property;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        Key key = (Key) o;
+
+        if (clazz != null ? !clazz.equals(key.clazz) : key.clazz != null) return false;
+        if (property != null ? !property.equals(key.property) : key.property != null) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result = clazz != null ? clazz.hashCode() : 0;
+        result = 31 * result + (property != null ? property.hashCode() : 0);
+        return result;
+    }
+}
+

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java?rev=833625&r1=833624&r2=833625&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java Sat Nov  7 01:18:15 2009
@@ -66,6 +66,7 @@
                 builder.factory(ValueStack.class, UelValueStack.class);
                 builder.factory(ValueStackFactory.class, UelValueStackFactory.class);
                 builder.factory(ReflectionProvider.class, GenericReflectionProvider.class);
+                //builder.factory(StrutsTypeConverter)
             }
         });
 

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java?rev=833625&r1=833624&r2=833625&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java Sat Nov  7 01:18:15 2009
@@ -8,6 +8,7 @@
 import java.util.Map;
 import java.util.List;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.lang.reflect.InvocationTargetException;
 
 
@@ -44,15 +45,43 @@
         assertEquals("val", obj.getTypedList().get(1).getValue());
     }
 
-    public void testAnnotatedTypeConverter() {
-        TestAction action = new TestAction();
-        assertNull(action.getConverted());
-        root.push(action);
+     public void testWriteArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+        //not null
+        Object[] array = new Object[2];
+        TestObject obj = new TestObject();
+        //obj.setObjectArray(array);
+        //assertNotNull(obj.getObjectArray());
+        root.push(obj);
 
-        stack.setValue("converted", "someval");
-        assertEquals("converted", action.getConverted());
+        stack.setValue("objectArray[0].value", "val");
+        assertEquals("val", ((TestObject)array[0]).getValue());
     }
 
+    public void testWriteMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+        //not null
+        Map map = new HashMap();
+        TestObject obj = new TestObject();
+        obj.setMap(map);
+        assertNotNull(obj.getMap());
+        root.push(obj);
+
+        stack.setValue("map['str']", "val");
+        assertEquals(1, map.size());
+        assertEquals("val", map.get("str"));
+
+        //null list
+        obj.setMap(null);
+        assertNull(obj.getMap());
+        stack.setValue("map['str']", "val");
+        assertNotNull(obj.getMap());
+        assertEquals("val", stack.findValue("map['str']"));
+
+        //test type determiner
+        obj.setTypedMap(null);
+        stack.setValue("typedMap[1].value", "val");
+        assertEquals(1, obj.getTypedMap().size());
+        assertEquals("val", obj.getTypedMap().get(1).getValue());
+    }
 
     public void testSetPropertiesOnNestedNullObject() {
         TestObject obj = new TestObject();

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=833625&r1=833624&r2=833625&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java Sat Nov  7 01:18:15 2009
@@ -3,6 +3,7 @@
 import java.util.Date;
 import java.util.Map;
 import java.util.List;
+import java.util.Set;
 
 
 public class TestObject {
@@ -14,6 +15,51 @@
     private Object object;
     private List list;
     private List<TestObject> typedList;
+    private Map map;
+    private Map<Integer, TestObject> typedMap;
+    private Object[] objectArray;
+    private Integer[] typedArray;
+    private Set set;
+
+    public Set getSet() {
+        return set;
+    }
+
+    public void setSet(Set set) {
+        this.set = set;
+    }
+
+    public Object[] getObjectArray() {
+        return objectArray;
+    }
+
+    public void setObjectArray(Object[] objectArray) {
+        this.objectArray = objectArray;
+    }
+
+    public Integer[] getTypedArray() {
+        return typedArray;
+    }
+
+    public void setTypedArray(Integer[] typedArray) {
+        this.typedArray = typedArray;
+    }
+
+    public Map getMap() {
+        return map;
+    }
+
+    public void setMap(Map map) {
+        this.map = map;
+    }
+
+    public Map<Integer, TestObject> getTypedMap() {
+        return typedMap;
+    }
+
+    public void setTypedMap(Map<Integer, TestObject> typedMap) {
+        this.typedMap = typedMap;
+    }
 
     public List<TestObject> getTypedList() {
         return typedList;

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java?rev=833625&r1=833624&r2=833625&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java Sat Nov  7 01:18:15 2009
@@ -43,6 +43,28 @@
         assertEquals(10, stack.findValue("object[0]"));
     }
 
+    public void testReadArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+        TestObject obj = new TestObject();
+        Integer[] ints = {10, 20};
+        obj.setTypedArray(ints);
+        root.push(obj);
+
+        //list
+        assertEquals(20, stack.findValue("typedArray[1]"));
+    }
+
+
+    public void testMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
+        HashMap map = new HashMap();
+        map.put("nameValue", "Lex");
+        TestObject obj = new TestObject();
+        obj.setParameters(map);
+        root.add(obj);
+
+        assertEquals("Lex", stack.findValue("parameters.nameValue"));
+        assertEquals("Lex", stack.findValue("parameters['nameValue']"));
+    }
+
 
     public void testContextReferencesWithSameObjectInStack() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
         //if there as object in the stack with the property "X" and there is an object in the
@@ -189,17 +211,6 @@
         assertEquals(stack.findString("#{date}"), format.format(obj.getDate()));
     }
 
-    public void testMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
-        HashMap map = new HashMap();
-        map.put("nameValue", "Lex");
-        TestObject obj = new TestObject();
-        obj.setParameters(map);
-        root.add(obj);
-
-        String value = (String) stack.findValue("parameters.nameValue", String.class);
-        assertEquals("Lex", value);
-    }
-
     public void test2LevelSet() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
         TestObject obj = new TestObject();
         TestObject nestedObj = new TestObject();