You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/06/27 22:07:11 UTC
git commit: ISIS-423: improvements to bidir rel contract test...
Updated Branches:
refs/heads/master 56b558c54 -> 153b091c5
ISIS-423: improvements to bidir rel contract test...
... to handle methods that implement interfaces
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/153b091c
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/153b091c
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/153b091c
Branch: refs/heads/master
Commit: 153b091c5c3dcdfcab285bd80e7584a636f47799
Parents: 56b558c
Author: Dan Haywood <da...@apache.org>
Authored: Thu Jun 27 19:54:17 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Thu Jun 27 19:54:17 2013 +0100
----------------------------------------------------------------------
...ctionalRelationshipContractTestAbstract.java | 31 +++++++++++++-------
1 file changed, 21 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/153b091c/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/bidir/BidirectionalRelationshipContractTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/bidir/BidirectionalRelationshipContractTestAbstract.java b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/bidir/BidirectionalRelationshipContractTestAbstract.java
index 7aefe56..1078c15 100644
--- a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/bidir/BidirectionalRelationshipContractTestAbstract.java
+++ b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/bidir/BidirectionalRelationshipContractTestAbstract.java
@@ -22,11 +22,13 @@ import static org.junit.Assert.assertThat;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.Set;
import javax.jdo.annotations.Persistent;
+import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMap;
@@ -75,8 +77,8 @@ public abstract class BidirectionalRelationshipContractTestAbstract extends Abst
// getMethod
final String getMethod = StringUtils.methodNamed("get", p.childField);
- final Set<Method> getMethods = Reflections.getAllMethods(p.entityType, ReflectionUtils.withName(getMethod));
- assertThat(p.desc() + ": no getXxx() method", getMethods.size(), is(1));
+ final Set<Method> getMethods = Reflections.getAllMethods(p.entityType, withConcreteMethodNamed(getMethod));
+ assertThat(p.desc() + ": no unique getXxx() method:" + getMethods , getMethods.size(), is(1));
p.getMethod = CollectUtils.firstIn(getMethods);
final Child c = new Child();
@@ -86,7 +88,7 @@ public abstract class BidirectionalRelationshipContractTestAbstract extends Abst
// addToMethod
final String addToMethod = StringUtils.methodNamed("addTo", p.childField);
final Set<Method> addToMethods = Reflections.getAllMethods(p.entityType,
- Predicates.and(ReflectionUtils.withName(addToMethod), ReflectionUtils.withParametersCount(1), ReflectUtils.withEntityParameter()));
+ Predicates.and(withConcreteMethodNamed(addToMethod), ReflectionUtils.withParametersCount(1), ReflectUtils.withEntityParameter()));
if(addToMethods.size() != 1) {
// just skip
out.println("no addToXxx() method in parent");
@@ -97,7 +99,7 @@ public abstract class BidirectionalRelationshipContractTestAbstract extends Abst
// removeFromMethod
final String removeFromMethod = StringUtils.methodNamed("removeFrom", p.childField);
final Set<Method> removeFromMethods = Reflections.getAllMethods(p.entityType,
- Predicates.and(ReflectionUtils.withName(removeFromMethod), ReflectionUtils.withParametersCount(1), ReflectUtils.withEntityParameter()));
+ Predicates.and(withConcreteMethodNamed(removeFromMethod), ReflectionUtils.withParametersCount(1), ReflectUtils.withEntityParameter()));
if(removeFromMethods.size() != 1) {
// just skip
out.println("no removeFromXxx() method in parent");
@@ -118,7 +120,7 @@ public abstract class BidirectionalRelationshipContractTestAbstract extends Abst
// modify
String modifyMethod = StringUtils.methodNamed("modify", p.childField);
final Set<Method> modifyMethods = Reflections.getAllMethods(p.entityType,
- Predicates.and(Reflections.withName(modifyMethod), ReflectionUtils.withParametersCount(1), ReflectUtils.withEntityParameter()));
+ Predicates.and(withConcreteMethodNamed(modifyMethod), ReflectionUtils.withParametersCount(1), ReflectUtils.withEntityParameter()));
if(modifyMethods.size() != 1) {
// just skip
out.println("no modifyXxx() method in parent");
@@ -129,7 +131,7 @@ public abstract class BidirectionalRelationshipContractTestAbstract extends Abst
// clear
String clearMethod = StringUtils.methodNamed("clear", p.childField);
final Set<Method> clearMethods = Reflections.getAllMethods(p.entityType,
- Predicates.and(Reflections.withName(clearMethod), ReflectionUtils.withParametersCount(0)));
+ Predicates.and(withConcreteMethodNamed(clearMethod), ReflectionUtils.withParametersCount(0)));
if(clearMethods.size() != 1) {
// just skip
out.println("no clearXxx() method in parent");
@@ -157,6 +159,15 @@ public abstract class BidirectionalRelationshipContractTestAbstract extends Abst
process(p, c);
}
+ private static Predicate<Method> withConcreteMethodNamed(final String getMethod) {
+ return Predicates.and(ReflectionUtils.withName(getMethod), new Predicate<Method>(){
+ public boolean apply(Method m) {
+ return !m.isSynthetic() && !Modifier.isAbstract(m.getModifiers());
+ }
+ });
+ }
+
+
private Instantiator instantiatorFor(final Class<?> cls) {
Instantiator instantiator = instantiatorMap.get(cls);
if(instantiator != null) {
@@ -181,7 +192,7 @@ public abstract class BidirectionalRelationshipContractTestAbstract extends Abst
private void process(Parent p, Child c) {
// mappedBy field
- final Set<Field> parentFields = Reflections.getAllFields(c.entityType, Predicates.and(Reflections.withName(p.mappedBy), ReflectUtils.withTypeAssignableFrom(p.entityType)));
+ final Set<Field> parentFields = Reflections.getAllFields(c.entityType, Predicates.and(ReflectionUtils.withName(p.mappedBy), ReflectUtils.withTypeAssignableFrom(p.entityType)));
assertThat(c.entityType.getName()+ ": could not locate '" + p.mappedBy + "' field, returning supertype of " + p.entityType.getSimpleName() +", (as per @Persistent(mappedBy=...) in parent "+ p.entityType.getSimpleName()+")", parentFields.size(), is(1));
c.parentField = CollectUtils.firstIn(parentFields);
@@ -189,14 +200,14 @@ public abstract class BidirectionalRelationshipContractTestAbstract extends Abst
// getter
String getterMethod = StringUtils.methodNamed("get", c.parentField);
final Set<Method> getterMethods = Reflections.getAllMethods(c.entityType,
- Predicates.and(Reflections.withName(getterMethod), ReflectionUtils.withParametersCount(0), ReflectUtils.withReturnTypeAssignableFrom(p.entityType)));
+ Predicates.and(withConcreteMethodNamed(getterMethod), ReflectionUtils.withParametersCount(0), ReflectUtils.withReturnTypeAssignableFrom(p.entityType)));
assertThat(p.descRel(c) +": could not locate getter " + getterMethod + "() returning supertype of " + p.entityType.getSimpleName(), getterMethods.size(), is(1));
c.getMethod = CollectUtils.firstIn(getterMethods);
// modify
String modifyMethod = StringUtils.methodNamed("modify", c.parentField);
final Set<Method> modifyMethods = Reflections.getAllMethods(c.entityType,
- Predicates.and(Reflections.withName(modifyMethod), ReflectionUtils.withParametersCount(1), ReflectUtils.withParametersAssignableFrom(p.entityType)));
+ Predicates.and(withConcreteMethodNamed(modifyMethod), ReflectionUtils.withParametersCount(1), ReflectUtils.withParametersAssignableFrom(p.entityType)));
if(modifyMethods.size() != 1) {
// just skip
out.println("no modifyXxx() method in child");
@@ -207,7 +218,7 @@ public abstract class BidirectionalRelationshipContractTestAbstract extends Abst
// clear
String clearMethod = StringUtils.methodNamed("clear", c.parentField);
final Set<Method> clearMethods = Reflections.getAllMethods(c.entityType,
- Predicates.and(Reflections.withName(clearMethod), ReflectionUtils.withParametersCount(0)));
+ Predicates.and(withConcreteMethodNamed(clearMethod), ReflectionUtils.withParametersCount(0)));
if(clearMethods.size() != 1) {
// just skip
out.println("no clearXxx() method in child");