This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 2f794df835 ISIS-3209: metamodel test fixes (4)
2f794df835 is described below
commit 2f794df83595dbe508928f2a022c7da9a6c5c324
Author: Andi Huber <[email protected]>
AuthorDate: Tue Sep 13 15:59:32 2022 +0200
ISIS-3209: metamodel test fixes (4)
---
.../isis/commons/internal/reflection/_Reflect.java | 2 +
.../NavigableParentAnnotationFacetFactory.java | 4 +-
...hod.java => NavigableParentFacetViaMethod.java} | 10 ++---
.../AbstractFacetFactoryJupiterTestCase.java | 49 ++++++++++++++--------
.../title/TitleAnnotationFacetFactoryTest.java | 8 ++--
.../navparent/NavigableParentFacetMethodTest.java | 9 ++--
.../NavigableParentAnnotationFacetFactoryTest.java | 47 ++++++++++++---------
7 files changed, 76 insertions(+), 53 deletions(-)
diff --git
a/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
b/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
index 2c7f374534..bf7bd0bf01 100644
---
a/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
+++
b/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
@@ -439,10 +439,12 @@ public final class _Reflect {
// -- METHOD/FIELD HANDLES
+ @Deprecated // does not work well with JPMS; inline at call-site instead
public static MethodHandle handleOf(final Method method) throws
IllegalAccessException {
return MethodHandles.lookup().unreflect(method);
}
+ @Deprecated // does not work well with JPMS; inline at call-site instead
public static MethodHandle handleOfGetterOn(final Field field) throws
IllegalAccessException {
return MethodHandles.lookup().unreflectGetter(field);
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
index 2a3d50741a..24966b06ac 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
@@ -39,7 +39,7 @@ import org.apache.isis.core.metamodel.facets.Evaluators;
import org.apache.isis.core.metamodel.facets.Evaluators.MethodEvaluator;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
import
org.apache.isis.core.metamodel.facets.object.navparent.NavigableParentFacet;
-import
org.apache.isis.core.metamodel.facets.object.navparent.method.NavigableParentFacetViaGetterMethod;
+import
org.apache.isis.core.metamodel.facets.object.navparent.method.NavigableParentFacetViaMethod;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
import org.apache.isis.core.metamodel.specloader.validator.ValidationFailure;
@@ -104,7 +104,7 @@ implements MetaModelRefiner {
}
try {
- addFacet(new NavigableParentFacetViaGetterMethod(method,
facetHolder));
+ addFacet(new NavigableParentFacetViaMethod(method, facetHolder));
} catch (IllegalAccessException e) {
log.warn("failed to create NavigableParentFacetMethod method:{}
holder:{}",
method, facetHolder, e);
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetViaGetterMethod.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetViaMethod.java
similarity index 89%
rename from
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetViaGetterMethod.java
rename to
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetViaMethod.java
index 955d822f53..5ea3809ed6 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetViaGetterMethod.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetViaMethod.java
@@ -19,28 +19,26 @@
package org.apache.isis.core.metamodel.facets.object.navparent.method;
import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
import java.util.function.BiConsumer;
-import org.apache.isis.commons.internal.reflection._Reflect;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import
org.apache.isis.core.metamodel.facets.object.navparent.NavigableParentFacetAbstract;
/**
- *
* @since 2.0
- *
*/
-public class NavigableParentFacetViaGetterMethod
+public class NavigableParentFacetViaMethod
extends NavigableParentFacetAbstract {
private final MethodHandle methodHandle;
- public NavigableParentFacetViaGetterMethod(
+ public NavigableParentFacetViaMethod(
final Method method,
final FacetHolder holder) throws IllegalAccessException {
super(holder);
- this.methodHandle = _Reflect.handleOf(method);
+ this.methodHandle = MethodHandles.lookup().unreflect(method);
}
@Override
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJupiterTestCase.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJupiterTestCase.java
index a81834027d..adde8529d7 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJupiterTestCase.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJupiterTestCase.java
@@ -28,17 +28,16 @@ import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.id.LogicalType;
import org.apache.isis.commons.collections.ImmutableEnumSet;
import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
+import org.apache.isis.core.metamodel._testing.MethodRemover_forTesting;
import org.apache.isis.core.metamodel.context.HasMetaModelContext;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.MethodRemover;
-import
org.apache.isis.core.metamodel.facets.object.domainobject.autocomplete.AutoCompleteFacetForDomainObjectAnnotation;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.metamodel.valuesemantics.IntValueSemantics;
import lombok.Getter;
@@ -47,6 +46,9 @@ import lombok.Setter;
public abstract class AbstractFacetFactoryJupiterTestCase
implements HasMetaModelContext {
+ @Getter(onMethod_ = {@Override})
+ protected MetaModelContext metaModelContext;
+
protected MethodRemover mockMethodRemover;
protected FacetHolder mockFacetHolder;
protected ObjectSpecification mockOnType;
@@ -55,9 +57,6 @@ implements HasMetaModelContext {
protected OneToManyAssociation mockOneToManyAssociation;
protected OneToOneActionParameter mockOneToOneActionParameter;
- @Getter(onMethod_ = {@Override})
- protected MetaModelContext metaModelContext;
- protected SpecificationLoader specificationLoader;
protected FacetHolder facetHolder;
protected FacetedMethod facetedMethod;
protected FacetedMethodParameter facetedMethodParameter;
@@ -66,9 +65,18 @@ implements HasMetaModelContext {
@Getter @Setter private String firstName;
}
+
+ protected void setUpMmc() throws Exception {
+ metaModelContext = MetaModelContext_forTesting.builder()
+ .valueSemantic(new IntValueSemantics())
+ .build();
+ }
+
@BeforeEach
protected void setUpFacetedMethodAndParameter() throws Exception {
+ setUpMmc();
+
mockMethodRemover = Mockito.mock(MethodRemover.class);
mockFacetHolder = Mockito.mock(FacetHolder.class);
mockOnType = Mockito.mock(ObjectSpecification.class);
@@ -77,21 +85,14 @@ implements HasMetaModelContext {
mockOneToManyAssociation = Mockito.mock(OneToManyAssociation.class);
mockOneToOneActionParameter =
Mockito.mock(OneToOneActionParameter.class);
- metaModelContext = MetaModelContext_forTesting.builder()
- .valueSemantic(new IntValueSemantics())
- .build();
-
- specificationLoader = metaModelContext.getSpecificationLoader();
-
facetHolder = FacetHolder.simple(
- metaModelContext,
+ getMetaModelContext(),
Identifier.propertyIdentifier(LogicalType.fqcn(Customer.class), "firstName"));
- facetedMethod = FacetedMethod.createSetterForProperty(metaModelContext,
+ facetedMethod = facetedSetter(
AbstractFacetFactoryTest.Customer.class, "firstName");
- facetedMethodParameter = new FacetedMethodParameter(metaModelContext,
+ facetedMethodParameter = new
FacetedMethodParameter(getMetaModelContext(),
FeatureType.ACTION_PARAMETER_SCALAR,
facetedMethod.getOwningType(),
facetedMethod.getMethod(), 0);
-
}
@AfterEach
@@ -101,6 +102,20 @@ implements HasMetaModelContext {
facetedMethodParameter = null;
}
+ protected MethodRemover defaultMethodRemover() {
+ return new MethodRemover_forTesting();
+ }
+
+ protected FacetedMethod facetedSetter(final Class<?> declaringClass, final
String propertyName) {
+ return FacetedMethod.createSetterForProperty(getMetaModelContext(),
+ declaringClass, propertyName);
+ }
+
+ protected FacetedMethod facetedAction(final Class<?> declaringClass, final
String methodName) {
+ return FacetedMethod.createForAction(getMetaModelContext(),
+ declaringClass, methodName);
+ }
+
protected boolean contains(final Class<?>[] types, final Class<?> type) {
return Utils.contains(types, type);
}
@@ -117,10 +132,8 @@ implements HasMetaModelContext {
return Utils.findMethod(type, methodName);
}
- protected AutoCompleteFacetForDomainObjectAnnotation
expectNoMethodsRemoved() {
- //context.never(mockMethodRemover);
+ protected void expectNoMethodsRemoved() {
Mockito.verifyNoInteractions(mockMethodRemover);
- return null;
}
}
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java
index bdfc66e00d..1f51b7b717 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java
@@ -139,7 +139,7 @@ extends AbstractFacetFactoryJupiterTestCase {
}
final Customer2 customer = new Customer2();
- val objectAdapter = ManagedObject.adaptScalar(specificationLoader,
customer);
+ val objectAdapter =
ManagedObject.adaptScalar(getSpecificationLoader(), customer);
final String title = titleFacetViaTitleAnnotation.title(objectAdapter);
assertThat(title, is("titleElement1. titleElement3,titleElement2"));
@@ -208,9 +208,9 @@ extends AbstractFacetFactoryJupiterTestCase {
public void titleAnnotatedMethodsSomeOfWhichReturnNulls() throws Exception
{
{ // check prerequisites
- val wThree = ManagedObject.adaptScalar(specificationLoader,
Integer.valueOf(3));
+ val wThree = ManagedObject.adaptScalar(getSpecificationLoader(),
Integer.valueOf(3));
assertEquals("3", wThree.getTitle());
- val pThree = ManagedObject.adaptScalar(specificationLoader, 3);
+ val pThree = ManagedObject.adaptScalar(getSpecificationLoader(),
3);
assertEquals("3", pThree.getTitle());
}
@@ -218,7 +218,7 @@ extends AbstractFacetFactoryJupiterTestCase {
.forTesting(Customer4.class, mockMethodRemover,
facetedMethod));
final Customer4 customer = new Customer4();
- val objectAdapter = ManagedObject.adaptScalar(specificationLoader,
customer);
+ val objectAdapter =
ManagedObject.adaptScalar(getSpecificationLoader(), customer);
assertThat(objectAdapter.getTitle(),
is("titleElement1 titleElement3 titleElement5 3 this needs to
be trimmed"));
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/navparent/NavigableParentFacetMethodTest.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/navparent/NavigableParentFacetMethodTest.java
index 6a8e61fd15..dbcc05cfec 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/navparent/NavigableParentFacetMethodTest.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/navparent/NavigableParentFacetMethodTest.java
@@ -31,14 +31,15 @@ import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import
org.apache.isis.core.metamodel.facets.object.navparent.method.NavigableParentFacetViaGetterMethod;
+import
org.apache.isis.core.metamodel.facets.object.navparent.method.NavigableParentFacetViaMethod;
import org.apache.isis.core.metamodel.object.ManagedObject;
-//FIXME[ISIS-3207]
+//FIXME[ISIS-3207] reflection using MH throws
+// java.lang.IllegalAccessException: access to public member failed:
org.apache.isis.core.metamodel.facets.object.navparent.NavigableParentFacetMethodTest$DomainObjectWithProblemInNavigableParentMethod.parent[Ljava.lang.Object;@3eb631b8/invokeVirtual,
from class org.apache.isis.commons.internal.reflection._Reflect (module
org.apache.isis.commons)
@DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true")
class NavigableParentFacetMethodTest {
- private NavigableParentFacetViaGetterMethod facet;
+ private NavigableParentFacetViaMethod facet;
private FacetHolder mockFacetHolder;
private ManagedObject mockOwningAdapter;
@@ -57,7 +58,7 @@ class NavigableParentFacetMethodTest {
mockFacetHolder = Mockito.mock(FacetHolder.class);
mockOwningAdapter = Mockito.mock(ManagedObject.class);
final Method navigableParentMethod =
DomainObjectWithProblemInNavigableParentMethod.class.getMethod("parent");
- facet = new NavigableParentFacetViaGetterMethod(navigableParentMethod,
mockFacetHolder);
+ facet = new NavigableParentFacetViaMethod(navigableParentMethod,
mockFacetHolder);
Mockito.when(mockOwningAdapter.getPojo()).thenReturn(pojo);
}
diff --git
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java
index 7919e44a9b..225f210017 100644
---
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java
+++
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java
@@ -23,22 +23,22 @@ import java.lang.reflect.Method;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.apache.isis.commons.internal._Constants;
-import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import
org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
import
org.apache.isis.core.metamodel.facets.object.navparent.NavigableParentFacet;
import
org.apache.isis.core.metamodel.facets.object.navparent.annotation.NavigableParentTestSamples.DomainObjectA;
-import
org.apache.isis.core.metamodel.facets.object.navparent.method.NavigableParentFacetViaGetterMethod;
+import
org.apache.isis.core.metamodel.facets.object.navparent.method.NavigableParentFacetViaMethod;
+
+import lombok.SneakyThrows;
+import lombok.val;
-//FIXME[ISIS-3207]
-@DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true")
class NavigableParentAnnotationFacetFactoryTest
extends AbstractFacetFactoryJupiterTestCase {
@@ -46,7 +46,14 @@ extends AbstractFacetFactoryJupiterTestCase {
@BeforeEach
void setUp() throws Exception {
- facetFactory = new
NavigableParentAnnotationFacetFactory(metaModelContext);
+ super.setUpMmc();
+ facetFactory = new
NavigableParentAnnotationFacetFactory(getMetaModelContext()) {
+ @Override
+ public void process(final ProcessClassContext processClassContext)
{
+ super.process(processClassContext);
+
assertHasNavigableParentFacet(processClassContext.getFacetHolder());
+ }
+ };
}
@AfterEach
@@ -56,33 +63,35 @@ extends AbstractFacetFactoryJupiterTestCase {
super.tearDown();
}
- @Test
+ @Test @SneakyThrows
protected void testParentAnnotatedMethod() throws Exception {
- testParentMethod(new DomainObjectA(), "root");
- }
-
- // -- HELPER
- private void testParentMethod(final Object domainObject, final String
parentMethodName) throws Exception {
+ val domainObject = new DomainObjectA();
+ val parentMethodName = "root";
final Class<?> domainClass = domainObject.getClass();
+ val facetedMethod = facetedAction(domainClass, parentMethodName);
+
facetFactory.process(ProcessClassContext
- .forTesting(domainClass, mockMethodRemover, facetedMethod));
+ .forTesting(domainClass, defaultMethodRemover(),
facetedMethod));
- final Facet facet = facetedMethod.getFacet(NavigableParentFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof NavigableParentFacetViaGetterMethod);
+ val navigableParentFacet =
assertHasNavigableParentFacet(facetedMethod);
+ assertTrue(navigableParentFacet instanceof
NavigableParentFacetViaMethod);
- final NavigableParentFacetViaGetterMethod navigableParentFacetMethod =
(NavigableParentFacetViaGetterMethod) facet;
final Method parentMethod = domainClass.getMethod(parentMethodName);
assertEquals(
parentMethod.invoke(domainObject, _Constants.emptyObjects),
- navigableParentFacetMethod.navigableParent(domainObject)
);
-
+ navigableParentFacet.navigableParent(domainObject) );
}
+ // -- HELPER
+ NavigableParentFacet assertHasNavigableParentFacet(final FacetHolder
facetHolder) {
+ val navigableParentFacet =
facetHolder.getFacet(NavigableParentFacet.class);
+ assertNotNull(navigableParentFacet, ()->"NavigableParentFacet
required");
+ return navigableParentFacet;
+ }
}