expose argThat() API for stub training, make built-in argumentMatchers generic
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/proxy/branches/version-2.0-work@1519877 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/commons/proxy2/interceptor/matcher/argument/ArgumentMatcherUtils.java b/core/src/main/java/org/apache/commons/proxy2/interceptor/matcher/argument/ArgumentMatcherUtils.java
index 5c9601d..bc7e295 100644
--- a/core/src/main/java/org/apache/commons/proxy2/interceptor/matcher/argument/ArgumentMatcherUtils.java
+++ b/core/src/main/java/org/apache/commons/proxy2/interceptor/matcher/argument/ArgumentMatcherUtils.java
@@ -18,6 +18,7 @@
package org.apache.commons.proxy2.interceptor.matcher.argument;
import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.apache.commons.proxy2.interceptor.matcher.ArgumentMatcher;
@@ -27,9 +28,9 @@
// Static Methods
//----------------------------------------------------------------------------------------------------------------------
- public static ArgumentMatcher<Object> any()
+ public static <T> ArgumentMatcher<T> any()
{
- return new AnyMatcher();
+ return new AnyMatcher<T>();
}
public static ArgumentMatcher<String> endsWith(String suffix)
@@ -52,14 +53,14 @@
return new GreaterThanOrEqualMatcher<C>(comparable);
}
- public static ArgumentMatcher<Object> isA(final Class<?> type)
+ public static <T> ArgumentMatcher<T> isA(final Class<?> type)
{
- return new InstanceOfMatcher(type);
+ return new InstanceOfMatcher<T>(type);
}
- public static ArgumentMatcher<Object> isNull()
+ public static <T> ArgumentMatcher<T> isNull()
{
- return new IsNullMatcher();
+ return new IsNullMatcher<T>();
}
public static <C extends Comparable<?>> ArgumentMatcher<C> lt(C comparable)
@@ -100,10 +101,10 @@
// Inner Classes
//----------------------------------------------------------------------------------------------------------------------
- private static final class AnyMatcher implements ArgumentMatcher<Object>
+ private static final class AnyMatcher<T> implements ArgumentMatcher<T>
{
@Override
- public boolean matches(Object argument)
+ public boolean matches(T argument)
{
return true;
}
@@ -146,7 +147,7 @@
@Override
public boolean matches(String argument)
{
- return argument != null && argument.endsWith(suffix);
+ return StringUtils.endsWith(argument, suffix);
}
}
@@ -194,26 +195,26 @@
}
}
- private static final class InstanceOfMatcher implements ArgumentMatcher<Object>
+ private static final class InstanceOfMatcher<T> implements ArgumentMatcher<T>
{
private final Class<?> type;
public InstanceOfMatcher(Class<?> type)
{
- this.type = type;
+ this.type = Validate.notNull(type, "type");
}
@Override
- public boolean matches(Object argument)
+ public boolean matches(T argument)
{
return type.isInstance(argument);
}
}
- private static final class IsNullMatcher implements ArgumentMatcher<Object>
+ private static final class IsNullMatcher<T> implements ArgumentMatcher<T>
{
@Override
- public boolean matches(Object argument)
+ public boolean matches(T argument)
{
return argument == null;
}
@@ -284,7 +285,7 @@
@Override
public boolean matches(String argument)
{
- return argument != null && argument.startsWith(prefix);
+ return StringUtils.startsWith(argument, prefix);
}
}
}
diff --git a/stub/src/main/java/org/apache/commons/proxy2/stub/BaseTrainer.java b/stub/src/main/java/org/apache/commons/proxy2/stub/BaseTrainer.java
index 1a96990..a2b3add 100644
--- a/stub/src/main/java/org/apache/commons/proxy2/stub/BaseTrainer.java
+++ b/stub/src/main/java/org/apache/commons/proxy2/stub/BaseTrainer.java
@@ -75,25 +75,23 @@
protected <R> R any(Class<R> type)
{
- record(ArgumentMatcherUtils.any());
- return null;
- }
-
- private void record(ArgumentMatcher<?> matcher)
- {
- trainingContext().record(matcher);
+ return argThat(ArgumentMatcherUtils.<R> any());
}
protected <R> R eq(R value)
{
- record(ArgumentMatcherUtils.eq(value));
- return value;
+ return argThat(ArgumentMatcherUtils.eq(value));
}
protected <R> R isInstance(Class<R> type)
{
- record(ArgumentMatcherUtils.isA(type));
- return ProxyUtils.nullValue(type);
+ return argThat(ArgumentMatcherUtils.<R> isA(type));
+ }
+
+ protected <R> R argThat(ArgumentMatcher<R> matcher)
+ {
+ trainingContext().record(matcher);
+ return null;
}
protected void thenThrow(Exception e)