You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by jc...@apache.org on 2005/08/28 01:40:31 UTC

svn commit: r243564 - in /jakarta/commons/sandbox/proxy/trunk: ./ src/java/org/apache/commons/proxy/factory/ src/java/org/apache/commons/proxy/factory/cglib/ src/java/org/apache/commons/proxy/factory/javassist/ src/java/org/apache/commons/proxy/factory...

Author: jcarman
Date: Sat Aug 27 16:40:21 2005
New Revision: 243564

URL: http://svn.apache.org/viewcvs?rev=243564&view=rev
Log:
Beefed up proxy factory test harness and improved code coverage.

Added:
    jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestBeanProvider.java
    jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/cache/
    jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/cache/TestCacheEvictionEvent.java
Modified:
    jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml
    jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/AbstractProxyFactory.java
    jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java
    jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java
    jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/DelegatingInvocationHandler.java
    jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/ReflectionMethodInvocation.java
    jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/provider/cache/AbstractCache.java
    jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java
    jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/CountingProvider.java
    jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestCachedProvider.java
    jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestPooledProvider.java
    jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/Echo.java
    jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/EchoImpl.java

Modified: jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml (original)
+++ jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml Sat Aug 27 16:40:21 2005
@@ -2,9 +2,9 @@
 <module version="4" relativePaths="true" type="JAVA_MODULE">
   <component name="ModuleRootManager" />
   <component name="NewModuleRootManager">
-    <output url="file://$MODULE_DIR$/build/java" />
+    <output url="file://$MODULE_DIR$/target/idea-classes" />
     <exclude-output />
-    <output-test url="file://$MODULE_DIR$/build/test" />
+    <output-test url="file://$MODULE_DIR$/target/idea-test-classes" />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />

Modified: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/AbstractProxyFactory.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/AbstractProxyFactory.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/AbstractProxyFactory.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/AbstractProxyFactory.java Sat Aug 27 16:40:21 2005
@@ -28,7 +28,12 @@
  */
 public abstract class AbstractProxyFactory implements ProxyFactory
 {
-    protected Log log = LogFactory.getLog( getClass() );
+    protected Log log;
+
+    protected AbstractProxyFactory()
+    {
+        setLog( LogFactory.getLog( getClass() ) );
+    }
 
     public void setLog( Log log )
     {

Modified: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/cglib/CglibProxyFactory.java Sat Aug 27 16:40:21 2005
@@ -82,7 +82,7 @@
             this.target = target;
             this.method = method;
             this.methodProxy = methodProxy;
-            this.args = args;
+            this.args = args == null || args.length == 0 ? null : args;
         }
 
         public Method getMethod()
@@ -102,12 +102,12 @@
 
         public Object getThis()
         {
-            return null;
+            return target;
         }
 
         public AccessibleObject getStaticPart()
         {
-            return null;
+            return method;
         }
     }
 

Modified: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistProxyFactory.java Sat Aug 27 16:40:21 2005
@@ -29,6 +29,7 @@
 import org.apache.commons.proxy.exception.ProxyFactoryException;
 import org.apache.commons.proxy.factory.AbstractProxyFactory;
 
+import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Method;
 
 /**
@@ -102,24 +103,31 @@
         {
             final CtClass invocationClass = createClass();
             invocationClass.addInterface( resolve( MethodInvocation.class ) );
-            addField( targetClass, "target", invocationClass );
+            addField( Object.class, "target", invocationClass );
+            addField( Object[].class, "arguments", invocationClass );
             final Class[] argumentTypes = method.getParameterTypes();
             final Class[] constructorArgs = new Class[argumentTypes.length + 1];
             constructorArgs[0] = targetClass;
             for( int i = 0; i < argumentTypes.length; i++ )
             {
-                Class argumentType = argumentTypes[i];
-                final CtField argumentField = new CtField( resolve( argumentType ), "argument" + i, invocationClass );
-                invocationClass.addField( argumentField );
-                constructorArgs[i + 1] = argumentType;
+                constructorArgs[i + 1] = argumentTypes[i];
             }
             final CtConstructor constructor = new CtConstructor( resolve( constructorArgs ), invocationClass );
             final StringBuffer constructorBody = new StringBuffer( "{\n" );
             constructorBody.append( "\tthis.target = $1;\n" );
+            if( argumentTypes.length == 0 )
+            {
+                constructorBody.append( "\tthis.arguments = null;\n" );
+            }
+            else
+            {
+                constructorBody.append( "\tthis.arguments = new Object[" );
+                constructorBody.append( argumentTypes.length );
+                constructorBody.append( "];\n" );
+            }
             for( int i = 0; i < argumentTypes.length; i++ )
             {
-                constructorBody.append( "\tthis.argument" ).append( i ).append( " = $" ).append( 2 + i ).append( ";\n" );
-
+                constructorBody.append( "\tthis.arguments[" + i + "] = $" + ( i + 2 ) + ";\n" );
             }
             constructorBody.append( "}" );
             log.debug( "Constructor body:\n" + constructorBody );
@@ -131,6 +139,33 @@
             log.debug( "Proceed method body:\n" + proceedBody );
             proceedMethod.setBody( proceedBody.toString() );
             invocationClass.addMethod( proceedMethod );
+            final CtMethod getMethodMethod = new CtMethod( resolve( Method.class ), "getMethod", resolve( new Class[0] ), invocationClass );
+            final StringBuffer getMethodBody = new StringBuffer();
+            getMethodBody.append( "{\n\tfinal Class[] parameterTypes = new Class[" + argumentTypes.length + "];\n" );
+            for( int i = 0; i < argumentTypes.length; ++i )
+            {
+                getMethodBody.append( "\tparameterTypes[" + i + "] = " + argumentTypes[i].getName() + ".class;\n" );
+            }
+            getMethodBody.append( "\ttry\n\t{\n\t\treturn " + method.getDeclaringClass().getName() + ".class.getMethod(\"" + method.getName() + "\", parameterTypes );\n\t}\n\tcatch( NoSuchMethodException e )\n\t{\n\t\treturn null;\n\t}" );
+            getMethodBody.append( "}" );
+            log.debug( "getMethod() body:\n" + getMethodBody.toString() );
+            getMethodMethod.setBody( getMethodBody.toString() );
+            invocationClass.addMethod( getMethodMethod );
+            final CtMethod getArgumentsMethod = new CtMethod( resolve( Object[].class ), "getArguments", resolve( new Class[0] ), invocationClass );
+            final String getArgumentsBody = "{\n\treturn arguments;\n}";
+            log.debug( "getArguments() body:\n" + getArgumentsBody );
+            getArgumentsMethod.setBody( getArgumentsBody );
+            invocationClass.addMethod( getArgumentsMethod );
+            final CtMethod getStaticPartMethod = new CtMethod( resolve( AccessibleObject.class ), "getStaticPart", resolve( new Class[0] ), invocationClass );
+            final String getStaticPartBody = "{\n\treturn getMethod();\n}";
+            log.debug( "getStaticPart() body:\n" + getStaticPartBody );
+            getStaticPartMethod.setBody( getStaticPartBody );
+            invocationClass.addMethod( getStaticPartMethod );
+            final CtMethod getThisMethod = new CtMethod( resolve( Object.class ), "getThis", resolve( new Class[0] ), invocationClass );
+            final String getThisMethodBody = "{\n\treturn target;\n}";
+            log.debug( "getThis() body:\n" + getThisMethodBody );
+            getThisMethod.setBody( getThisMethodBody );
+            invocationClass.addMethod( getThisMethod );
             return invocationClass.toClass( classLoader );
         }
         catch( CannotCompileException e )
@@ -150,10 +185,10 @@
         {
             proceedBody.append( "\t" );
         }
-        proceedBody.append( "target." ).append( method.getName() ).append( "(" );
+        proceedBody.append( "( ( " + method.getDeclaringClass().getName() + " )target )." ).append( method.getName() ).append( "(" );
         for( int i = 0; i < argumentTypes.length; ++i )
         {
-            proceedBody.append( "argument" ).append( i );
+            proceedBody.append( "(" + argumentTypes[i].getName() + ")arguments[" ).append( i ).append( "]" );
             if( i != argumentTypes.length - 1 )
             {
                 proceedBody.append( ", " );
@@ -162,7 +197,7 @@
         proceedBody.append( ");\n" );
         if( Void.TYPE.equals( method.getReturnType() ) )
         {
-            proceedBody.append( "return null;" );
+            proceedBody.append( "\treturn null;\n" );
         }
         proceedBody.append( "}" );
         return proceedBody.toString();
@@ -210,7 +245,7 @@
     {
         try
         {
-            return classPool.get( clazz.getName() );
+            return classPool.get( getJavaClassName( clazz ) );
         }
         catch( NotFoundException e )
         {
@@ -236,5 +271,14 @@
     public static CtClass createClass( Class superclass )
     {
         return classPool.makeClass( "JavassistProxyFactoryGenerated_" + ( ++classNumber ), resolve( superclass ) );
+    }
+
+    public static String getJavaClassName( Class inputClass )
+    {
+        if( inputClass.isArray() )
+        {
+            return getJavaClassName( inputClass.getComponentType() ) + "[]";
+        }
+        return inputClass.getName();
     }
 }

Modified: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/DelegatingInvocationHandler.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/DelegatingInvocationHandler.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/DelegatingInvocationHandler.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/DelegatingInvocationHandler.java Sat Aug 27 16:40:21 2005
@@ -16,6 +16,7 @@
 package org.apache.commons.proxy.factory.reflect;
 
 import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
 
 /**
  * An invocation handler which delegates to another object.
@@ -29,12 +30,20 @@
 
     public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable
     {
-        return method.invoke( getDelegate(), args );
+        try
+        {
+            return method.invoke( getDelegate(), args );
+        }
+        catch( InvocationTargetException e )
+        {
+            throw e.getTargetException();
+        }
     }
 
     /**
      * A simplified proxy creation method which merely creates a proxy which supports
      * all the interfaces implemented by the delegate.
+     *
      * @return a proxy which supports all the interfaces implemented by the delegate
      */
     public Object createProxy()
@@ -45,8 +54,9 @@
     /**
      * A simplified proxy creation method which merely creates a proxy which supports
      * all the interfaces implemented by the delegate, using the specified class loader.
+     *
      * @return a proxy which supports all the interfaces implemented by the delegate,
-     * using the specified class loader.
+     *         using the specified class loader.
      */
     public Object createProxy( ClassLoader classLoader )
     {

Modified: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/ReflectionMethodInvocation.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/ReflectionMethodInvocation.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/ReflectionMethodInvocation.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/reflect/ReflectionMethodInvocation.java Sat Aug 27 16:40:21 2005
@@ -18,11 +18,12 @@
 import org.aopalliance.intercept.MethodInvocation;
 
 import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
 /**
  * A reflection-based implementation of the <code>MethodInvocation</code> interface.
- * 
+ *
  * @author James Carman
  * @version 1.0
  */
@@ -51,7 +52,20 @@
 
     public Object proceed() throws Throwable
     {
-        return method.invoke( target, arguments );
+        try
+        {
+            return method.invoke( target, arguments );
+        }
+        catch( InvocationTargetException e )
+        {
+            throw e.getTargetException();
+        }
+        catch( Exception e )
+        {
+            System.out.println( "An unknown exception happened:" );
+            e.printStackTrace( System.out );
+            throw e;
+        }
     }
 
     public Object getThis()

Modified: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/provider/cache/AbstractCache.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/provider/cache/AbstractCache.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/provider/cache/AbstractCache.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/provider/cache/AbstractCache.java Sat Aug 27 16:40:21 2005
@@ -24,7 +24,7 @@
  */
 public abstract class AbstractCache implements Cache
 {
-    protected abstract Map<Object,CachedObject> getCachedObjectMap();
+    protected abstract Map<Object, CachedObject> getCachedObjectMap();
 
     public void storeObject( Object key, Object value )
     {
@@ -44,17 +44,15 @@
 
     public void clearCache()
     {
-        for( Object cacheKey: new LinkedList<Object>( getCachedObjectMap().keySet() ) )
+        for( Object cacheKey : new LinkedList<Object>( getCachedObjectMap().keySet() ) )
         {
             final CachedObject cachedObject = getCachedObjectMap().get( cacheKey );
-            if( cachedObject != null )
+            getCachedObjectMap().remove( cacheKey );
+            if( cachedObject.getListener() != null )
             {
-                getCachedObjectMap().remove( cacheKey );
-                if( cachedObject.getListener() != null )
-                {
-                    cachedObject.getListener().objectEvicted( new CacheEvictionEvent( cacheKey, cachedObject.getObject() ) );
-                }
+                cachedObject.getListener().objectEvicted( new CacheEvictionEvent( cacheKey, cachedObject.getObject() ) );
             }
+
         }
     }
 

Modified: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/factory/AbstractProxyFactoryTestCase.java Sat Aug 27 16:40:21 2005
@@ -15,14 +15,21 @@
  */
 package org.apache.commons.proxy.factory;
 
+import org.aopalliance.intercept.MethodInterceptor;
+import org.aopalliance.intercept.MethodInvocation;
 import org.apache.commons.proxy.ProxyFactory;
-import org.apache.commons.proxy.provider.BeanProvider;
-import org.apache.commons.proxy.provider.SingletonProvider;
+import org.apache.commons.proxy.provider.ConstantProvider;
+import static org.apache.commons.proxy.provider.ProviderUtils.beanProvider;
+import static org.apache.commons.proxy.provider.ProviderUtils.singletonProvider;
 import org.apache.commons.proxy.util.AbstractTestCase;
 import org.apache.commons.proxy.util.Echo;
 import org.apache.commons.proxy.util.EchoImpl;
 import org.apache.commons.proxy.util.SuffixMethodInterceptor;
 
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Method;
+import java.io.IOException;
+
 /**
  * @author James Carman
  * @version 1.0
@@ -38,16 +45,128 @@
 
     public void testCreateProxy()
     {
-        final Echo echo = ( Echo )factory.createProxy( new SingletonProvider<Echo>( new BeanProvider<Echo>( EchoImpl.class ) ), Echo.class );
+        final Echo echo = ( Echo ) factory.createProxy( singletonProvider( beanProvider( EchoImpl.class ) ), Echo.class );
         echo.echo();
         assertEquals( "message", echo.echoBack( "message" ) );
+        assertEquals( "ab", echo.echoBack( "a", "b" ) );
     }
 
     public void testCreateInterceptorProxy()
     {
-        final Echo target = ( Echo )factory.createProxy( new SingletonProvider<Echo>( new BeanProvider<Echo>( EchoImpl.class ) ), Echo.class );
-        final Echo proxy = ( Echo )factory.createInterceptorProxy( target, new SuffixMethodInterceptor( " suffix" ), Echo.class );
+        final Echo target = ( Echo ) factory.createProxy( singletonProvider( beanProvider( EchoImpl.class ) ), Echo.class );
+        final Echo proxy = ( Echo ) factory.createInterceptorProxy( target, new SuffixMethodInterceptor( " suffix" ), Echo.class );
         proxy.echo();
         assertEquals( "message suffix", proxy.echoBack( "message" ) );
+    }
+
+    public void testMethodInvocationImplementation() throws Exception
+    {
+        final MethodInvocationTester tester = new MethodInvocationTester();
+        final EchoImpl target = new EchoImpl();
+        final Echo proxy = ( Echo ) factory.createInterceptorProxy( target, tester, Echo.class );
+        proxy.echo();
+        assertNull( tester.arguments );
+        assertEquals( Echo.class.getMethod( "echo" ), tester.method );
+        assertEquals( target, tester.target );
+        assertEquals( Echo.class.getMethod( "echo" ), tester.staticPart );
+        proxy.echoBack( "Hello" );
+        assertNotNull( tester.arguments );
+        assertEquals( 1, tester.arguments.length );
+        assertEquals( "Hello", tester.arguments[0] );
+        assertEquals( Echo.class.getMethod( "echoBack", String.class ), tester.method );
+        proxy.echoBack( "Hello", "World" );
+        assertNotNull( tester.arguments );
+        assertEquals( 2, tester.arguments.length );
+        assertEquals( "Hello", tester.arguments[0] );
+        assertEquals( "World", tester.arguments[1] );
+        assertEquals( Echo.class.getMethod( "echoBack", String.class, String.class ), tester.method );
+    }
+
+    public void testProxyWithCheckedException() throws Exception
+    {
+        final Echo proxy = ( Echo ) factory.createProxy( new ConstantProvider( new EchoImpl() ), Echo.class );
+        try
+        {
+            proxy.ioException();
+            fail();
+        }
+        catch( IOException e )
+        {
+        }
+    }
+
+    public void testProxyWithUncheckedException() throws Exception
+    {
+        final Echo proxy = ( Echo ) factory.createProxy( new ConstantProvider( new EchoImpl() ), Echo.class );
+        try
+        {
+            proxy.illegalArgument();
+            fail();
+        }
+        catch( IllegalArgumentException e )
+        {
+        }
+    }
+
+    public void testInterceptorProxyWithUncheckedException() throws Exception
+    {
+        final Echo proxy = ( Echo ) factory.createInterceptorProxy( new EchoImpl(), new NoOpMethodInterceptor(),  Echo.class );
+        try
+        {
+            proxy.illegalArgument();
+            fail();
+        }
+        catch( IllegalArgumentException e )
+        {
+        }
+    }
+
+    public void testInterceptorProxyWithCheckedException() throws Exception
+    {
+        final Echo proxy = ( Echo ) factory.createInterceptorProxy( new EchoImpl(), new NoOpMethodInterceptor(),  Echo.class );
+        try
+        {
+            proxy.ioException();
+            fail();
+        }
+        catch( IOException e )
+        {
+        }
+    }
+
+    public void testWithNonAccessibleTargetType()
+    {
+        final Echo proxy = ( Echo ) factory.createInterceptorProxy( new PrivateEcho(), new NoOpMethodInterceptor(), Echo.class );
+        proxy.echo();
+
+    }
+
+    private static class PrivateEcho extends EchoImpl
+    {
+    }
+
+    private static class NoOpMethodInterceptor implements MethodInterceptor
+    {
+        public Object invoke( MethodInvocation methodInvocation ) throws Throwable
+        {
+            return methodInvocation.proceed();
+        }
+    }
+
+    private static class MethodInvocationTester implements MethodInterceptor
+    {
+        private Object[] arguments;
+        private Method method;
+        private Object target;
+        private AccessibleObject staticPart;
+
+        public Object invoke( MethodInvocation methodInvocation ) throws Throwable
+        {
+            this.arguments = methodInvocation.getArguments();
+            this.method = methodInvocation.getMethod();
+            this.target = methodInvocation.getThis();
+            this.staticPart = methodInvocation.getStaticPart();
+            return methodInvocation.proceed();
+        }
     }
 }

Modified: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/CountingProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/CountingProvider.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/CountingProvider.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/CountingProvider.java Sat Aug 27 16:40:21 2005
@@ -25,7 +25,7 @@
 {
     private int count = 0;
 
-    public CountingProvider( ObjectProvider<T> inner )
+    public CountingProvider( ObjectProvider<? extends T> inner )
     {
         super( inner );
     }

Added: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestBeanProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestBeanProvider.java?rev=243564&view=auto
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestBeanProvider.java (added)
+++ jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestBeanProvider.java Sat Aug 27 16:40:21 2005
@@ -0,0 +1,56 @@
+/*
+ *  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.proxy.provider;
+
+import junit.framework.TestCase;
+import org.apache.commons.proxy.exception.ObjectProviderException;
+
+public class TestBeanProvider extends TestCase
+{
+    public void testAbstractBeanClass()
+    {
+        try
+        {
+            new BeanProvider( Number.class ).getObject();
+            fail();
+        }
+        catch( ObjectProviderException e )
+        {
+
+        }
+    }
+
+    public void testNonAccessibleConstructor()
+    {
+        try
+        {
+            new BeanProvider( MyBean.class ).getObject();
+            fail();
+        }
+        catch( ObjectProviderException e )
+        {
+
+        }
+    }
+
+    public static class MyBean
+    {
+        private MyBean()
+        {
+
+        }
+    }
+}
\ No newline at end of file

Modified: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestCachedProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestCachedProvider.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestCachedProvider.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestCachedProvider.java Sat Aug 27 16:40:21 2005
@@ -41,7 +41,8 @@
     {
         final CountingProvider<Echo> counter = new CountingProvider<Echo>( new ConstantProvider<Echo>( new EchoImpl() ) );
         final CachedProvider<Echo> provider = new CachedProvider<Echo>( counter );
-        provider.setCache( new ThreadLocalCache() );
+        final ThreadLocalCache cache = new ThreadLocalCache();
+        provider.setCache( cache );
         final CountDownLatch latch = new CountDownLatch( 10 );
         for( int i = 0; i < 10; ++i )
         {
@@ -50,6 +51,7 @@
                 public void run()
                 {
                     provider.getObject().echoBack( "Hello, World" );
+                    cache.clearCache();
                     latch.countDown();
                 }
             }).start();

Modified: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestPooledProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestPooledProvider.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestPooledProvider.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/TestPooledProvider.java Sat Aug 27 16:40:21 2005
@@ -23,12 +23,13 @@
 import org.apache.commons.proxy.util.EchoImpl;
 
 import java.util.concurrent.CountDownLatch;
+import static org.apache.commons.proxy.provider.ProviderUtils.constantProvider;
 
 public class TestPooledProvider extends TestCase
 {
     public void testWithSimpleCache()
     {
-        final CountingProvider<Echo> counter = new CountingProvider<Echo>( new ConstantProvider<Echo>( new EchoImpl() ) );
+        final CountingProvider<Echo> counter = new CountingProvider<Echo>( constantProvider( new EchoImpl() ) );
         final PooledProvider<Echo> provider = new PooledProvider<Echo>( counter );
         final SimpleCache cache = new SimpleCache();
         provider.setCache( cache );
@@ -43,11 +44,16 @@
 
     public void testWithThreadLocalCache() throws Exception
     {
-        final CountingProvider<Echo> counter = new CountingProvider<Echo>( new ConstantProvider<Echo>( new EchoImpl() ) );
+        final CountingProvider<Echo> counter = new CountingProvider<Echo>( constantProvider( new EchoImpl() ) );
         final PooledProvider<Echo> provider = new PooledProvider<Echo>( counter );
         provider.setMaxActive( 10 );
         provider.setMinIdle( 5 );
         provider.setWhenExhaustedAction( GenericObjectPool.WHEN_EXHAUSTED_GROW );
+        provider.setMaxWait( 1000 );
+        provider.setMinEvictableIdleTimeMillis( 10000 );
+        provider.setTestOnBorrow( false );
+        provider.setTestOnReturn( false );
+        provider.setTestWhileIdle( false );
         final ThreadLocalCache cache = new ThreadLocalCache();
         provider.setCache( cache );
         final CountDownLatch goLatch = new CountDownLatch( 1 );

Added: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/cache/TestCacheEvictionEvent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/cache/TestCacheEvictionEvent.java?rev=243564&view=auto
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/cache/TestCacheEvictionEvent.java (added)
+++ jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/provider/cache/TestCacheEvictionEvent.java Sat Aug 27 16:40:21 2005
@@ -0,0 +1,28 @@
+/*
+ *  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.proxy.provider.cache;
+import junit.framework.TestCase;
+
+public class TestCacheEvictionEvent extends TestCase
+{
+    public void testConstructor()
+    {
+        final CacheEvictionEvent event = new CacheEvictionEvent( "hello", "world" );
+        assertEquals( "world", event.getSource() );
+        assertEquals( "hello", event.getCacheKey() );
+        assertEquals( "world", event.getEvictedObject() );
+    }
+}
\ No newline at end of file

Modified: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/Echo.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/Echo.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/Echo.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/Echo.java Sat Aug 27 16:40:21 2005
@@ -15,6 +15,8 @@
  */
 package org.apache.commons.proxy.util;
 
+import java.io.IOException;
+
 /**
  * @author James Carman
  * @version 1.0
@@ -22,5 +24,9 @@
 public interface Echo
 {
     public String echoBack( String message );
+    public String echoBack( String message1, String message2 );
     public void echo();
+
+    public void ioException() throws IOException;
+    public void illegalArgument();
 }

Modified: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/EchoImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/EchoImpl.java?rev=243564&r1=243563&r2=243564&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/EchoImpl.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/util/EchoImpl.java Sat Aug 27 16:40:21 2005
@@ -15,6 +15,8 @@
  */
 package org.apache.commons.proxy.util;
 
+import java.io.IOException;
+
 /**
  * @author James Carman
  * @version 1.0
@@ -26,7 +28,22 @@
         return message;
     }
 
+    public String echoBack( String message1, String message2 )
+    {
+        return message1 + message2;
+    }
+
     public void echo()
     {
+    }
+
+    public void ioException() throws IOException
+    {
+        throw new IOException( "dummy message" );
+    }
+
+    public void illegalArgument()
+    {
+        throw new IllegalArgumentException( "dummy message" );
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org