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;
+    }
 
 }

Reply via email to