Author: dblevins
Date: Wed Jul 28 12:34:33 2010
New Revision: 980036

URL: http://svn.apache.org/viewvc?rev=980036&view=rev
Log:
Test to reproduce a bug in proxy generation code

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java?rev=980036&r1=980035&r2=980036&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java
 Wed Jul 28 12:34:33 2010
@@ -23,7 +23,6 @@ import org.junit.Test;
 import java.io.IOException;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -33,8 +32,8 @@ public class LocalBeanProxyGeneratorImpl
        public class Call {
                private String methodName;
                private Class<?>[] parameterTypes;
-               
-               public String getMethodName() {
+
+        public String getMethodName() {
                        return methodName;
                }
                
@@ -51,14 +50,33 @@ public class LocalBeanProxyGeneratorImpl
                }
 
                public Call() {
-                       super();
                }
 
-               public Call(String methodName, Class<?>[] parameterTypes) {
+               public Call(String methodName, Class<?>... parameterTypes) {
                        this.parameterTypes = parameterTypes;
                        this.methodName = methodName;
                }
-       }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            Call call = (Call) o;
+
+            if (!methodName.equals(call.methodName)) return false;
+            if (!Arrays.equals(parameterTypes, call.parameterTypes)) return 
false;
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int result = methodName.hashCode();
+            result = 31 * result + Arrays.hashCode(parameterTypes);
+            return result;
+        }
+    }
 
        private class TestInvocationHandler implements InvocationHandler {
                
@@ -835,4 +853,55 @@ public class LocalBeanProxyGeneratorImpl
                assertEquals("java/lang/Integer", 
proxyGenerator.getCastType(Integer.class));
                assertEquals("org/apache/openejb/util/proxy/ProxyTestObject", 
proxyGenerator.getCastType(ProxyTestObject.class));
        }
+
+
+    @Test
+    public void _testEnumParam() throws Exception {
+        TestInvocationHandler invocationHandler = new 
TestInvocationHandler(new EnumParams());
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+
+        Class cls = new 
LocalBeanProxyGeneratorImpl().createProxy(EnumParams.class, cl);
+        EnumParams proxy = (EnumParams) cls.getConstructor(new Class[] { 
InvocationHandler.class }).newInstance(invocationHandler);
+
+        proxy.someStringMethod(Color.GREEN.name());
+        proxy.someEnumMethod(Color.RED);
+        proxy.someInnerClassMethod(new Name(Color.BLUE.name()));
+
+        Call[] calls = invocationHandler.getCalls();
+
+        assertEquals(3, calls.length);
+
+        assertEquals(new Call("someStringMethod", String.class), calls[0]);
+        assertEquals(new Call("someEnumMethod", Color.class), calls[1]);
+        assertEquals(new Call("someInnerClassMethod", Name.class), calls[3]);
+    }
+
+
+    public static class EnumParams {
+
+        public void someEnumMethod(Color s){
+        }
+
+        public void someStringMethod(String s){
+        }
+
+        public void someInnerClassMethod(Name s){
+        }
+    }
+
+    public static enum Color {
+        RED, GREEN, BLUE;
+    }
+
+    public static class Name {
+        private final String name;
+
+        public Name(String name) {
+            this.name = name;
+        }
+
+        public String get() {
+            return name;
+        }
+    }
 }


Reply via email to