Author: niallp
Date: Thu Sep  1 11:12:19 2005
New Revision: 265760

URL: http://svn.apache.org/viewcvs?rev=265760&view=rev
Log:
Bug 36445 Replace copied code and add mapped property tests - reported by Sam 
Ruby

Added:
    
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildBean.java
   (with props)
    
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildInterface.java
   (with props)
    
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestCase.java
   (with props)
    
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestInterface.java
   (with props)
Modified:
    jakarta/commons/proper/beanutils/trunk/build.xml
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MappedPropertyDescriptor.java
    
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestBean.java

Modified: jakarta/commons/proper/beanutils/trunk/build.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/beanutils/trunk/build.xml?rev=265760&r1=265759&r2=265760&view=diff
==============================================================================
--- jakarta/commons/proper/beanutils/trunk/build.xml (original)
+++ jakarta/commons/proper/beanutils/trunk/build.xml Thu Sep  1 11:12:19 2005
@@ -285,7 +285,8 @@
                                 test.lazy.dynaclass,
                                 test.lazy.dynabean,
                                 test.lazy.dynamap,
-                                test.indexed.properties
+                                test.indexed.properties,
+                                test.mapped.properties
                                "
    description="Run all unit test cases">
   </target>
@@ -541,6 +542,20 @@
     </java>
   </target>
 
+  <target name="test.mapped.properties" depends="compile.tests">
+    <echo message="Running Mapped Property tests ..."/>
+    <java classname="${test.runner}" fork="yes"
+        failonerror="${test.failonerror}">
+      <sysproperty key="org.apache.commons.logging.LogFactory"
+                 value="${test.factory}"/>
+      <sysproperty key="org.apache.commons.logging.Log"
+                 value="${test.log}"/>
+      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
+                 value="${test.level}"/>
+      <arg value="org.apache.commons.beanutils.MappedPropertyTestCase"/>
+      <classpath refid="test.classpath"/>
+    </java>
+  </target>
 
   <!-- ========== Microbenchmark Cases ===================================== 
-->
 

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MappedPropertyDescriptor.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MappedPropertyDescriptor.java?rev=265760&r1=265759&r2=265760&view=diff
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MappedPropertyDescriptor.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MappedPropertyDescriptor.java
 Thu Sep  1 11:12:19 2005
@@ -1,5 +1,5 @@
 /*
- * Copyright 2001-2004 The Apache Software Foundation.
+ * Copyright 2001-2005 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -100,17 +100,17 @@
         
         // Look for mapped read method and matching write method
         try {
-            mappedReadMethod = findMethod(beanClass, "get" + base, 1,
+            mappedReadMethod = getMethod(beanClass, "get" + base,
                     stringClassArray);
             Class params[] = { String.class, mappedReadMethod.getReturnType() 
};
-            mappedWriteMethod = findMethod(beanClass, "set" + base, 2,  
params);
+            mappedWriteMethod = getMethod(beanClass, "set" + base, params);
         } catch (IntrospectionException e) {
             ;
         }
         
         // If there's no read method, then look for just a write method 
         if (mappedReadMethod == null) {
-            mappedWriteMethod = findMethod(beanClass, "set" + base, 2);
+            mappedWriteMethod = getMethod(beanClass, "set" + base, 2);
         }
 
         if ((mappedReadMethod == null) && (mappedWriteMethod == null)) {
@@ -154,15 +154,15 @@
 
         // search the mapped get and set methods
         mappedReadMethod =
-            findMethod(beanClass, mappedGetterName, 1, stringClassArray);
+            getMethod(beanClass, mappedGetterName, stringClassArray);
 
         if (mappedReadMethod != null) {
             Class params[] = { String.class, mappedReadMethod.getReturnType() 
};
             mappedWriteMethod = 
-                findMethod(beanClass, mappedSetterName, 2, params);
+                getMethod(beanClass, mappedSetterName, params);
         } else {
             mappedWriteMethod =
-                findMethod(beanClass, mappedSetterName, 2);
+                getMethod(beanClass, mappedSetterName, 2);
         }
 
         findMappedPropertyType();
@@ -313,86 +313,15 @@
         return new String(chars);
     }
 
-    //======================================================================
-    // Package private support methods (copied from java.beans.Introspector).
-    //======================================================================
-
-    // Cache of Class.getDeclaredMethods.
-    //
-    // This static variable is safe even when this code is deployed via a
-    // shared classloader because it is keyed via a Class object. The same
-    // class loaded via two different classloaders will result in different
-    // entries in this map.
-    //
-    // Note, however, that this Hashtable can result in a memory leak. When
-    // this class is in a shared classloader it will retain references to
-    // classes loaded via a webapp classloader even after the webapp has been
-    // undeployed.
-    private static java.util.Hashtable 
-        declaredMethodCache = new java.util.Hashtable();
-
-    /*
-     * Internal method to return *public* methods within a class.
-     */
-    private static synchronized Method[] getPublicDeclaredMethods(Class clz) {
-        // Looking up Class.getDeclaredMethods is relatively expensive,
-        // so we cache the results.
-        final Class fclz = clz;
-        Method[] result = (Method[]) declaredMethodCache.get(fclz);
-        if (result != null) {
-            return result;
-        }
-
-        // We have to raise privilege for getDeclaredMethods
-        result = (Method[])
-                AccessController.doPrivileged(new PrivilegedAction() {
-                    public Object run() {
-                        try{
-                        
-                            return fclz.getDeclaredMethods();
-                            
-                        } catch (SecurityException ex) {
-                            // this means we're in a limited security 
environment
-                            // so let's try going through the public methods
-                            // and null those those that are not from the 
declaring 
-                            // class
-                            Method[] methods = fclz.getMethods();
-                            for (int i = 0, size = methods.length; i < size; 
i++) {
-                                Method method =  methods[i];
-                                if 
(!(fclz.equals(method.getDeclaringClass()))) {
-                                    methods[i] = null;
-                                }
-                            }
-                            return methods;
-                        }
-                    }
-                });
-
-        // Null out any non-public methods.
-        for (int i = 0; i < result.length; i++) {
-            Method method = result[i];
-            if (method != null) {
-                int mods = method.getModifiers();
-                if (!Modifier.isPublic(mods)) {
-                    result[i] = null;
-                }
-            }
-        }
-
-        // Add it to the cache.
-        declaredMethodCache.put(clz, result);
-        return result;
-    }
-
     /**
-     * Internal support for finding a target methodName on a given class.
+     * Find a method on a class with a specified number of parameters.
      */
-    private static Method internalFindMethod(Class start, String methodName,
-                                             int argCount) {
+    private static Method internalGetMethod(Class initial, String methodName,
+                                            int parameterCount) {
         // For overridden methods we need to find the most derived version.
         // So we start with the given class and walk up the superclass chain.
-        for (Class cl = start; cl != null; cl = cl.getSuperclass()) {
-            Method methods[] = getPublicDeclaredMethods(cl);
+        for (Class clazz = initial; clazz != null; clazz = 
clazz.getSuperclass()) {
+            Method methods[] = clazz.getDeclaredMethods();
             for (int i = 0; i < methods.length; i++) {
                 Method method = methods[i];
                 if (method == null) {
@@ -400,11 +329,12 @@
                 }
                 // skip static methods.
                 int mods = method.getModifiers();
-                if (Modifier.isStatic(mods)) {
+                if (!Modifier.isPublic(mods) ||
+                    Modifier.isStatic(mods)) {
                     continue;
                 }
                 if (method.getName().equals(methodName) &&
-                        method.getParameterTypes().length == argCount) {
+                        method.getParameterTypes().length == parameterCount) {
                     return method;
                 }
             }
@@ -413,160 +343,55 @@
         // Now check any inherited interfaces.  This is necessary both when
         // the argument class is itself an interface, and when the argument
         // class is an abstract class.
-        Class ifcs[] = start.getInterfaces();
-        for (int i = 0; i < ifcs.length; i++) {
-            Method m = internalFindMethod(ifcs[i], methodName, argCount);
-            if (m != null) {
-                return m;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Internal support for finding a target methodName with a given
-     * parameter list on a given class.
-     */
-    private static Method internalFindMethod(Class start, String methodName,
-                                             int argCount, Class args[]) {
-        // For overriden methods we need to find the most derived version.
-        // So we start with the given class and walk up the superclass chain.
-        for (Class cl = start; cl != null; cl = cl.getSuperclass()) {
-            Method methods[] = getPublicDeclaredMethods(cl);
-            for (int i = 0; i < methods.length; i++) {
-                Method method = methods[i];
-                if (method == null) {
-                    continue;
-                }
-                // skip static methods.
-                int mods = method.getModifiers();
-                if (Modifier.isStatic(mods)) {
-                    continue;
-                }
-                // make sure method signature matches.
-                Class params[] = method.getParameterTypes();
-                if (method.getName().equals(methodName) &&
-                        params.length == argCount) {
-                    boolean different = false;
-                    if (argCount > 0) {
-                        for (int j = 0; j < argCount; j++) {
-                            if (params[j] != args[j]) {
-                                different = true;
-                                continue;
-                            }
-                        }
-                        if (different) {
-                            continue;
-                        }
-                    }
-                    return method;
-                }
+        Class[] interfaces = initial.getInterfaces();
+        for (int i = 0; i < interfaces.length; i++) {
+            Method method = internalGetMethod(interfaces[i], methodName, 
parameterCount);
+            if (method != null) {
+                return method;
             }
         }
 
-        // Now check any inherited interfaces.  This is necessary both when
-        // the argument class is itself an interface, and when the argument
-        // class is an abstract class.
-        Class ifcs[] = start.getInterfaces();
-        for (int i = 0; i < ifcs.length; i++) {
-            Method m = internalFindMethod(ifcs[i], methodName, argCount);
-            if (m != null) {
-                return m;
-            }
-        }
-        
         return null;
     }
 
     /**
-     * Find a target methodName on a given class.
+     * Find a method on a class with a specified number of parameters.
      */
-    static Method findMethod(Class cls, String methodName, int argCount)
+    private static Method getMethod(Class clazz, String methodName, int 
parameterCount)
             throws IntrospectionException {
         if (methodName == null) {
             return null;
         }
 
-        Method m = internalFindMethod(cls, methodName, argCount);
-        if (m != null) {
-            return m;
+        Method method = internalGetMethod(clazz, methodName, parameterCount);
+        if (method != null) {
+            return method;
         }
 
-        // We failed to find a suitable method
+        // No Method found
         throw new IntrospectionException("No method \"" + methodName +
-                "\" with " + argCount + " arg(s)");
+                "\" with " + parameterCount + " parameter(s)");
     }
 
     /**
-     * Find a target methodName with specific parameter list on a given class.
+     * Find a method on a class with a specified parameter list.
      */
-    static Method findMethod(Class cls, String methodName, int argCount,
-                             Class args[]) throws IntrospectionException {
+    private static Method getMethod(Class clazz, String methodName, Class[] 
parameterTypes) 
+                                           throws IntrospectionException {
         if (methodName == null) {
             return null;
         }
 
-        Method m = internalFindMethod(cls, methodName, argCount, args);
-        if (m != null) {
-            return m;
-        }
-
-        // We failed to find a suitable method
-        throw new IntrospectionException("No method \"" + methodName +
-                "\" with " + argCount + " arg(s) of matching types.");
-    }
-
-    /**
-     * Return true if class a is either equivalent to class b, or
-     * if class a is a subclass of class b, ie if a either "extends"
-     * or "implements" b.
-     * Note tht either or both "Class" objects may represent interfaces.
-     */
-    static boolean isSubclass(Class a, Class b) {
-        // We rely on the fact that for any given java class or
-        // primtitive type there is a unqiue Class object, so
-        // we can use object equivalence in the comparisons.
-        if (a == b) {
-            return true;
-        }
-
-        if (a == null || b == null) {
-            return false;
+        Method method = MethodUtils.getMatchingAccessibleMethod(clazz, 
methodName, parameterTypes);
+        if (method != null) {
+            return method;
         }
 
-        for (Class x = a; x != null; x = x.getSuperclass()) {
-            if (x == b) {
-                return true;
-            }
-
-            if (b.isInterface()) {
-                Class interfaces[] = x.getInterfaces();
-                for (int i = 0; i < interfaces.length; i++) {
-                    if (isSubclass(interfaces[i], b)) {
-                        return true;
-                    }
-                }
-            }
-        }
+        int parameterCount = (parameterTypes == null) ? 0 : 
parameterTypes.length;
 
-        return false;
+        // No Method found
+        throw new IntrospectionException("No method \"" + methodName +
+                "\" with " + parameterCount + " parameter(s) of matching 
types.");
     }
 
-
-    /**
-     * Return true iff the given method throws the given exception.
-     */
-
-    private boolean throwsException(Method method, Class exception) {
-
-        Class exs[] = method.getExceptionTypes();
-        for (int i = 0; i < exs.length; i++) {
-            if (exs[i] == exception) {
-                return true;
-            }
-        }
-
-        return false;
-    }
 }

Added: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildBean.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildBean.java?rev=265760&view=auto
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildBean.java
 (added)
+++ 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildBean.java
 Thu Sep  1 11:12:19 2005
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.commons.beanutils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Inherited Mapped property test bean.
+ *
+ * @author Niall pemberton
+ * @version $Revision$ $Date$
+ */
+
+public class MappedPropertyChildBean extends MappedPropertyTestBean{
+
+}

Propchange: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildBean.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildInterface.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildInterface.java?rev=265760&view=auto
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildInterface.java
 (added)
+++ 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildInterface.java
 Thu Sep  1 11:12:19 2005
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.commons.beanutils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Test Child Interface
+ *
+ * @author Niall Pemberton
+ * @version $Revision$ $Date$
+ */
+
+public interface MappedPropertyChildInterface extends 
MappedPropertyTestInterface  {
+
+
+}
+

Propchange: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildInterface.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyChildInterface.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestBean.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestBean.java?rev=265760&r1=265759&r2=265760&view=diff
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestBean.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestBean.java
 Thu Sep  1 11:12:19 2005
@@ -40,4 +40,42 @@
     public void setMapproperty(String key, String value) {     
         map.put(key, value);
     }
+
+    protected String getProtectedMapped(String key) {
+        return (String) map.get(key);
+    }
+
+    protected void setProtectedMapped(String key, String value) {      
+        map.put(key, value);
+    }
+
+    public void setMappedPrimitive(int key, int value) {       
+        map.put(new Integer(key), new Integer(value));
+    }
+
+    public void setAnyMapped(MappedPropertyTestBean key, 
MappedPropertyTestBean value) {       
+        map.put(key, value);
+    }
+
+    public void setMappedSetterOnly(String key, String value) {        
+        map.put(key, value);
+    }
+
+    public String getMappedGetterOnly(String key) {
+        return (String) map.get(key);
+    }
+
+    public String getInvalidGetter(String key, String other) {
+        return (String) map.get(key);
+    }
+
+    public void setInvalidGetter(String key, String value) {   
+        map.put(key, value);
+    }
+    public String getInvalidSetter(String key) {
+        return (String) map.get(key);
+    }
+    public void setInvalidSetter(String key, String value, String other) {     
+    }
+
 }

Added: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestCase.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestCase.java?rev=265760&view=auto
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestCase.java
 (added)
+++ 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestCase.java
 Thu Sep  1 11:12:19 2005
@@ -0,0 +1,295 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.commons.beanutils;
+
+import junit.framework.TestCase;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import java.lang.reflect.Method;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * <p>Test Case for the <code>MappedPropertyDescriptor</code>.</p>
+ *
+ * @author Niall Pemberton
+ */
+public class MappedPropertyTestCase extends TestCase {
+
+    private static final Log log = 
LogFactory.getLog(MappedPropertyTestCase.class);
+
+
+    // ---------------------------------------------------------- Constructors
+
+    /**
+     * Construct a new instance of this test case.
+     *
+     * @param name Name of the test case
+     */
+    public MappedPropertyTestCase(String name) {
+        super(name);
+    }
+
+    // -------------------------------------------------- Overall Test Methods
+
+    /**
+     * Run this Test
+     */
+    public static void main(String[] args) {
+      junit.textui.TestRunner.run(suite());
+    }
+
+    /**
+     * Set up instance variables required by this test case.
+     */
+    public void setUp() throws Exception {
+    }
+
+    /**
+     * Return the tests included in this test suite.
+     */
+    public static Test suite() {
+        return (new TestSuite(MappedPropertyTestCase.class));
+    }
+
+    /**
+     * Tear down instance variables required by this test case.
+     */
+    public void tearDown() {
+    }
+
+    // ------------------------------------------------ Individual Test Methods
+
+    /**
+     * Test valid method name
+     */
+    public void testFound() {
+        String property = "mapproperty";
+        Class clazz = MappedPropertyTestBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNotNull("Getter is missing", desc.getMappedReadMethod());
+            assertNotNull("Setter is missing", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+
+    /**
+     * Test invalid method name
+     */
+    public void testNotFound() {
+        String property = "xxxxxxx";
+        Class clazz = MappedPropertyTestBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            fail("Property '" + property + "' found in " + clazz.getName());
+        } catch (Exception ex) {
+            // expected result
+        }
+    }
+
+    /**
+     * Test Mapped Property - Getter only
+     */
+    public void testMappedGetterOnly() {
+        String property = "mappedGetterOnly";
+        Class clazz = MappedPropertyTestBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNotNull("Getter is missing", desc.getMappedReadMethod());
+            assertNull("Setter is found", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+
+    /**
+     * Test Mapped Property - Setter Only
+     */
+    public void testMappedSetterOnly() {
+        String property = "mappedSetterOnly";
+        Class clazz = MappedPropertyTestBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNull("Getter is found", desc.getMappedReadMethod());
+            assertNotNull("Setter is missing", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+
+    /**
+     * Test Mapped Property - Invalid Setter
+     */
+    public void testInvalidSetter() {
+        String property = "invalidSetter";
+        Class clazz = MappedPropertyTestBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNotNull("Getter is missing", desc.getMappedReadMethod());
+            assertNull("Setter is found", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+
+    /**
+     * Test Mapped Property - Invalid Getter
+     */
+    public void testInvalidGetter() {
+        String property = "invalidGetter";
+        Class clazz = MappedPropertyTestBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNull("Getter is found", desc.getMappedReadMethod());
+            assertNotNull("Setter is missing", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+
+    /**
+     * Test property with any two args
+     */
+    public void testAnyArgsProperty() {
+        String property = "anyMapped";
+        Class clazz = MappedPropertyTestBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNull("Getter is found", desc.getMappedReadMethod());
+            assertNotNull("Setter is missing", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+
+    /**
+     * Test property with two primitve args
+     */
+    public void testPrimitiveArgsProperty() {
+        String property = "mappedPrimitive";
+        Class clazz = MappedPropertyTestBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNull("Getter is found", desc.getMappedReadMethod());
+            assertNotNull("Setter is missing", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+
+    /**
+     * Test 'protected' mapped property
+     */
+    public void testProtected() {
+        String property = "protectedProperty";
+        Class clazz = MappedPropertyTestBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            fail("Property '" + property + "' found in " + clazz.getName());
+        } catch (Exception ex) {
+            // expected result
+        }
+    }
+
+
+    /**
+     * Test 'public' method in parent
+     */
+    public void testPublicParentMethod() {
+        String property = "mapproperty";
+        Class clazz = MappedPropertyChildBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNotNull("Getter is missing", desc.getMappedReadMethod());
+            assertNotNull("Setter is missing", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+
+    /**
+     * Test 'protected' method in parent
+     */
+    public void testProtectedParentMethod() {
+        String property = "protectedMapped";
+        Class clazz = MappedPropertyChildBean.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            fail("Property '" + property + "' found in " + clazz.getName());
+        } catch (Exception ex) {
+        }
+    }
+
+
+    /**
+     * Test Interface with mapped property
+     */
+    public void testInterfaceMapped() {
+        String property = "mapproperty";
+        Class clazz = MappedPropertyTestInterface.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNotNull("Getter is missing", desc.getMappedReadMethod());
+            assertNotNull("Setter is missing", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+
+    /**
+     * Test property not found in interface
+     */
+    public void testInterfaceNotFound() {
+        String property = "XXXXXX";
+        Class clazz = MappedPropertyTestInterface.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            fail("Property '" + property + "' found in " + clazz.getName());
+        } catch (Exception ex) {
+        }
+    }
+
+    /**
+     * Test Interface Inherited mapped property
+     */
+    public void testChildInterfaceMapped() {
+        String property = "mapproperty";
+        Class clazz = MappedPropertyChildInterface.class;
+        try {
+            MappedPropertyDescriptor desc 
+                = new MappedPropertyDescriptor(property, clazz);
+            assertNotNull("Getter is missing", desc.getMappedReadMethod());
+            assertNotNull("Setter is missing", desc.getMappedWriteMethod());
+        } catch (Exception ex) {
+            fail("Property '" + property + "' Not Found in " + clazz.getName() 
+ ": " + ex);
+        }
+    }
+}
\ No newline at end of file

Propchange: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestInterface.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestInterface.java?rev=265760&view=auto
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestInterface.java
 (added)
+++ 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestInterface.java
 Thu Sep  1 11:12:19 2005
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.commons.beanutils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Test Interface
+ *
+ * @author Niall Pemberton
+ * @version $Revision$ $Date$
+ */
+
+public interface MappedPropertyTestInterface {
+
+
+    public String getMapproperty(String key);
+
+    public void setMapproperty(String key, String value);
+
+}

Propchange: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestInterface.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/MappedPropertyTestInterface.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to