Author: jcarman Date: Sat Aug 3 16:11:49 2013 New Revision: 1510022 URL: http://svn.apache.org/r1510022 Log: Improving test coverage.
Modified: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/InterceptorUtils.java commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/InterceptorUtilsTest.java commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/util/AbstractTestCase.java Modified: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/InterceptorUtils.java URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/InterceptorUtils.java?rev=1510022&r1=1510021&r2=1510022&view=diff ============================================================================== --- commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/InterceptorUtils.java (original) +++ commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/InterceptorUtils.java Sat Aug 3 16:11:49 2013 @@ -27,21 +27,45 @@ public final class InterceptorUtils // Static Methods //---------------------------------------------------------------------------------------------------------------------- + /** + * Creates an {@link Interceptor} which always returns a constant value (for all methods). + * @param value the constant + * @return an {@link Interceptor} which always returns a constant value (for all methods) + */ public static Interceptor constant(Object value) { return new ObjectProviderInterceptor(ObjectProviderUtils.constant(value)); } + /** + * Creates an {@link Interceptor} which returns the resulting object from an + * object provider (for all methods). + * @param provider the object provider + * @return an {@link Interceptor} which returns the resulting object from an + * object provider (for all methods) + */ public static Interceptor provider(ObjectProvider<?> provider) { return new ObjectProviderInterceptor(provider); } + /** + * Creates an {@link Interceptor} which throws a specific exception (for all methods). + * @param e the exception + * @return an {@link Interceptor} which throws a specific exception (for all methods) + */ public static Interceptor throwing(Exception e) { return new ThrowingInterceptor(ObjectProviderUtils.constant(e)); } + /** + * Creates an {@link Interceptor} which throws the exception provided by an object + * provider (for all methods). + * @param provider the object provider + * @return an {@link Interceptor} which throws the exception provided by an object + * provider (for all methods) + */ public static Interceptor throwing(ObjectProvider<? extends Exception> provider) { return new ThrowingInterceptor(provider); Modified: commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/InterceptorUtilsTest.java URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/InterceptorUtilsTest.java?rev=1510022&r1=1510021&r2=1510022&view=diff ============================================================================== --- commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/InterceptorUtilsTest.java (original) +++ commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/InterceptorUtilsTest.java Sat Aug 3 16:11:49 2013 @@ -19,6 +19,7 @@ package org.apache.commons.proxy2.interc import org.apache.commons.proxy2.Interceptor; import org.apache.commons.proxy2.Invocation; +import org.apache.commons.proxy2.provider.ObjectProviderUtils; import org.apache.commons.proxy2.util.AbstractTestCase; import org.apache.commons.proxy2.util.Echo; import org.apache.commons.proxy2.util.MockInvocation; @@ -34,8 +35,32 @@ public class InterceptorUtilsTest extend public void testConstant() throws Throwable { Interceptor interceptor = InterceptorUtils.constant("Hello!"); - Method method = Echo.class.getMethod("echoBack", String.class); - Invocation invocation = new MockInvocation(method, "World!"); + Invocation invocation = mockInvocation(Echo.class, "echoBack", String.class).withArguments("World!").build(); assertEquals("Hello!", interceptor.intercept(invocation)); } + + @Test + public void testProvider() throws Throwable + { + Interceptor interceptor = InterceptorUtils.provider(ObjectProviderUtils.constant("Foo!")); + Invocation invocation = mockInvocation(Echo.class, "echoBack", String.class).withArguments("World!").build(); + assertEquals("Foo!", interceptor.intercept(invocation)); + } + + @Test(expected = RuntimeException.class) + public void testThrowingExceptionObject() throws Throwable + { + Interceptor interceptor = InterceptorUtils.throwing(new RuntimeException("Oops!")); + Invocation invocation = mockInvocation(Echo.class, "echoBack", String.class).withArguments("World!").build(); + interceptor.intercept(invocation); + } + + @Test(expected = RuntimeException.class) + public void testThrowingProvidedException() throws Throwable + { + Interceptor interceptor = InterceptorUtils.throwing(ObjectProviderUtils.constant(new RuntimeException("Oops!"))); + Invocation invocation = mockInvocation(Echo.class, "echoBack", String.class).withArguments("World!").build(); + interceptor.intercept(invocation); + } + } Modified: commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/util/AbstractTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/util/AbstractTestCase.java?rev=1510022&r1=1510021&r2=1510022&view=diff ============================================================================== --- commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/util/AbstractTestCase.java (original) +++ commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/util/AbstractTestCase.java Sat Aug 3 16:11:49 2013 @@ -1,8 +1,13 @@ package org.apache.commons.proxy2.util; import org.apache.commons.lang3.SerializationUtils; +import org.apache.commons.lang3.Validate; +import org.apache.commons.lang3.builder.Builder; +import org.apache.commons.proxy2.Invocation; +import org.apache.commons.proxy2.ProxyUtils; import java.io.Serializable; +import java.lang.reflect.Method; import static org.junit.Assert.*; @@ -21,4 +26,46 @@ public abstract class AbstractTestCase assertTrue(o instanceof Serializable); SerializationUtils.clone(( Serializable ) o); } + + protected MockInvocationBuilder mockInvocation(Class<?> type, String name, Class<?>... argumentTypes) + { + try + { + return new MockInvocationBuilder(Validate.notNull(type).getMethod(name, argumentTypes)); + } + catch (NoSuchMethodException e) + { + throw new IllegalArgumentException("Method not found.", e); + } + } + + protected static final class MockInvocationBuilder implements Builder<Invocation> + { + private final Method method; + private Object[] arguments = ProxyUtils.EMPTY_ARGUMENTS; + private Object returnValue = null; + + public MockInvocationBuilder(Method method) + { + this.method = method; + } + + public MockInvocationBuilder withArguments(Object... arguments) + { + this.arguments = arguments; + return this; + } + + public MockInvocationBuilder returning(Object value) + { + this.returnValue = value; + return this; + } + + @Override + public Invocation build() + { + return new MockInvocation(method, returnValue, arguments); + } + } }