You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/07/17 11:07:37 UTC
[isis] branch master updated: ISIS-2362: fixing
NewParameterModelTest (Tests)
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 5c52238 ISIS-2362: fixing NewParameterModelTest (Tests)
5c52238 is described below
commit 5c52238d5171aa4d9e7a2bc646be5169578a6a40
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jul 17 13:07:18 2020 +0200
ISIS-2362: fixing NewParameterModelTest (Tests)
---
.../core/commons/internal/reflection/_Reflect.java | 17 +++++
.../interactions/managed/ActionInteraction.java | 5 +-
.../model/interaction/InteractionNpmDemo.java | 2 +-
.../InteractionNpmDemo_biArgDisabled.java | 9 +--
.../InteractionNpmDemo_biArgEnabled.java | 25 +++++---
.../testdomain/interact/NewParameterModelTest.java | 73 +++++++++++-----------
.../modelannotation/applib/annotation/Model.java | 2 +-
7 files changed, 79 insertions(+), 54 deletions(-)
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/internal/reflection/_Reflect.java b/core/commons/src/main/java/org/apache/isis/core/commons/internal/reflection/_Reflect.java
index 581e50f..85111f3 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/internal/reflection/_Reflect.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/internal/reflection/_Reflect.java
@@ -33,10 +33,12 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.Map;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
@@ -52,6 +54,7 @@ import org.apache.isis.core.commons.internal.collections._Arrays;
import org.apache.isis.core.commons.internal.functions._Predicates;
import lombok.NonNull;
+import lombok.SneakyThrows;
import lombok.val;
import lombok.experimental.UtilityClass;
@@ -403,6 +406,20 @@ public final class _Reflect {
}
// -- FIND GETTER
+
+ @SneakyThrows
+ public static Stream<PropertyDescriptor> streamGetters(@NonNull Class<?> cls) {
+ return Stream.of(
+ Introspector.getBeanInfo(cls, Object.class)
+ .getPropertyDescriptors())
+ .filter(pd->pd.getReadMethod()!=null);
+ }
+
+ public static Map<String, Method> getGettersByName(@NonNull Class<?> cls) {
+ return streamGetters(cls)
+ .collect(Collectors.toMap(PropertyDescriptor::getName, PropertyDescriptor::getReadMethod));
+ }
+
public static Method getGetter(Class<?> cls, String propertyName) throws IntrospectionException {
final BeanInfo beanInfo = Introspector.getBeanInfo(cls);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
index 71f8fb2..5a2c1c3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
@@ -109,7 +109,10 @@ public final class ActionInteraction extends MemberInteraction<ManagedAction, Ac
void onParameterInvalid(ManagedParameter managedParameter, InteractionVeto veto);
}
-
+ /**
+ * @deprecated TODO we might rather make validation the responsibility of the {@link ParameterNegotiationModel}
+ * and then maybe provide something like {@code invokeWith(ParameterNegotiationModel model, ... callback)} here
+ */
public ActionInteraction useParameters(
@NonNull final Function<ManagedAction, Can<ManagedObject>> actionParameterProvider,
final ParameterInvalidCallback parameterInvalidCallback) {
diff --git a/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo.java b/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo.java
index d077a42..569fe2b 100644
--- a/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo.java
+++ b/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo.java
@@ -45,6 +45,6 @@ public class InteractionNpmDemo {
@Property
@PropertyLayout(multiLine=3)
- @XmlElement @Getter @Setter private String stringMultiline;
+ @XmlElement @Getter @Setter private String stringMultiline; // not used yet for any tests
}
diff --git a/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo_biArgDisabled.java b/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo_biArgDisabled.java
index 400de2c..557193c 100644
--- a/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo_biArgDisabled.java
+++ b/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo_biArgDisabled.java
@@ -33,17 +33,14 @@ public class InteractionNpmDemo_biArgDisabled {
private final InteractionNpmDemo holder;
@Value @Accessors(fluent = true)
- public static class Parameters {
-
- //@Parameter @ParameterLayout //TODO[ISIS-2362] support these here
+ public static class Parameters {
int a;
- //@Parameter @ParameterLayout //TODO[ISIS-2362] support these here
int b;
}
@Model
- public int act(Parameters params) {
- return params.a() + params.b();
+ public int act(int a, int b) {
+ return a + b;
}
//TODO[ISIS-2362] supporting methods (no arg): rename -> disable()
diff --git a/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo_biArgEnabled.java b/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo_biArgEnabled.java
index a36e3d8..8624a2c 100644
--- a/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo_biArgEnabled.java
+++ b/examples/smoketests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionNpmDemo_biArgEnabled.java
@@ -19,6 +19,8 @@
package org.apache.isis.testdomain.model.interaction;
import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Parameter;
+import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.extensions.modelannotation.applib.annotation.Model;
import lombok.RequiredArgsConstructor;
@@ -33,29 +35,32 @@ public class InteractionNpmDemo_biArgEnabled {
private final InteractionNpmDemo holder;
@Value @Accessors(fluent = true)
- public static class Parameters {
-
- //@Parameter @ParameterLayout //TODO[ISIS-2362] support these here
+ public static class Parameters {
int a;
- //@Parameter @ParameterLayout //TODO[ISIS-2362] support these here
int b;
}
-
@Model
- public int act(Parameters params) {
- return params.a() + params.b();
+ public int act(
+
+ @Parameter(maxLength = 2) // setup so we can test for this facet
+ @ParameterLayout(describedAs = "first") // setup so we can test for this facet
+ int a,
+
+ int b) {
+
+ return a + b;
}
- // parameter supporting methods, to be referenced by param name ...
+ //TODO[ISIS-2362] parameter supporting methods, to be referenced by param name defaultA(...), choicesB(...) ...
@Model
- public int defaultA(Parameters params) {
+ public int default0Act(Parameters params) {
return 5;
}
@Model
- public int[] choicesB(Parameters params) {
+ public int[] choices1Act(Parameters params) {
return new int[] {1, 2, 3, 4};
}
}
diff --git a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/NewParameterModelTest.java b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/NewParameterModelTest.java
index 1dbb06b..e29c945 100644
--- a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/NewParameterModelTest.java
+++ b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/NewParameterModelTest.java
@@ -21,12 +21,12 @@ package org.apache.isis.testdomain.interact;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@@ -34,7 +34,8 @@ import static org.junit.jupiter.api.Assertions.fail;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.config.presets.IsisPresets;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.testdomain.Smoketest;
import org.apache.isis.testdomain.conf.Configuration_headless;
@@ -65,6 +66,24 @@ import lombok.val;
})
class NewParameterModelTest extends InteractionTestAbstract {
+ @Test
+ void paramAnnotations_whenNpm_shouldBeRecognized() {
+
+ val param0Metamodel = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
+ .getMetamodel().get().getParameters().getElseFail(0);
+
+ // as with first param's @Parameter(maxLength = 2)
+ val maxLengthFacet = param0Metamodel.getFacet(MaxLengthFacet.class);
+
+ // as with first param's @ParameterLayout(describedAs = "first")
+ val describedAsFacet = param0Metamodel.getFacet(DescribedAsFacet.class);
+
+ assertNotNull(maxLengthFacet);
+ assertNotNull(describedAsFacet);
+
+ assertEquals(2, maxLengthFacet.value());
+ assertEquals("first", describedAsFacet.value());
+ }
@Test
void actionInteraction_withParams_shouldProduceCorrectResult() throws Throwable {
@@ -73,9 +92,7 @@ class NewParameterModelTest extends InteractionTestAbstract {
.checkVisibility(Where.OBJECT_FORMS)
.checkUsability(Where.OBJECT_FORMS);
- val params =
- //FIXME must instead support Can.of(objectManager.adapt(12), objectManager.adapt(34));
- Can.of(objectManager.adapt(new InteractionNpmDemo_biArgEnabled.Parameters(12, 34)));
+ val params = Can.of(objectManager.adapt(12), objectManager.adapt(34));
actionInteraction.useParameters(__->params,
(managedParameter, veto)-> fail(veto.toString()));
@@ -91,9 +108,7 @@ class NewParameterModelTest extends InteractionTestAbstract {
.checkVisibility(Where.OBJECT_FORMS)
.checkUsability(Where.OBJECT_FORMS);
- val params =
- //FIXME[ISIS-2362] must instead support Can.of(objectManager.adapt(12), objectManager.adapt(34), objectManager.adapt(99));
- Can.of(objectManager.adapt(new InteractionNpmDemo_biArgEnabled.Parameters(12, 34)), objectManager.adapt(99));
+ val params = Can.of(objectManager.adapt(12), objectManager.adapt(34), objectManager.adapt(99));
actionInteraction.useParameters(__->params,
(managedParameter, veto)-> fail(veto.toString()));
@@ -103,7 +118,7 @@ class NewParameterModelTest extends InteractionTestAbstract {
}
@Test
- void actionInteraction_withTooLittleParams_shouldFail() {
+ void actionInteraction_withTooLittleParams_shouldFail() throws Throwable {
val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
.checkVisibility(Where.OBJECT_FORMS)
@@ -119,7 +134,7 @@ class NewParameterModelTest extends InteractionTestAbstract {
}
- @Test @Disabled("[ISIS-2362]")
+ @Test
void actionInteraction_shouldProvideParameterDefaults() {
val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
@@ -139,40 +154,28 @@ class NewParameterModelTest extends InteractionTestAbstract {
assertComponentWiseEquals(expectedDefaults, actualDefaults);
}
- @Test @Disabled("[ISIS-2362]")
+ @Test
void actionInteraction_shouldProvideChoices() {
val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
.checkVisibility(Where.OBJECT_FORMS)
.checkUsability(Where.OBJECT_FORMS);
- //TODO simplify the API ...
-
- val managedAction = actionInteraction.getManagedAction().get(); // should not throw
- val actionMeta = managedAction.getAction();
-
- val pendingArgs = managedAction.getInteractionHead().defaults();
-
- val paramMetaList = actionMeta.getParameters();
-
- val param0Meta = paramMetaList.getElseFail(0);
- val param1Meta = paramMetaList.getElseFail(1);
-
- //TODO we need to allow ui-component binding
-
-
-
- val choices0 = param0Meta.getChoices(pendingArgs, InteractionInitiatedBy.USER);
- val choices1 = param1Meta.getChoices(pendingArgs, InteractionInitiatedBy.USER);
-
- assertTrue(choices0.isEmpty());
+ assertTrue(actionInteraction.getManagedAction().isPresent(), "action is expected to be usable");
+
+ val managedAction = actionInteraction.getManagedAction().get();
+ val pendingArgs = managedAction.startParameterNegotiation();
+
+ val param0Choices = pendingArgs.getObservableParamChoices(0); // observable
+ val param1Choices = pendingArgs.getObservableParamChoices(1); // observable
- val expectedChoices = new InteractionDemo_biArgEnabled(null).choices1Act();
- val actualChoices = choices1.map(ManagedObject::getPojo);
+ assertTrue(param0Choices.getValue().isEmpty());
- assertComponentWiseEquals(expectedChoices, actualChoices);
+ val expectedChoices = new InteractionNpmDemo_biArgEnabled(null).choices1Act(null);
+ val actualChoices = param1Choices.getValue();
+ assertComponentWiseUnwrappedEquals(expectedChoices, actualChoices);
}
-
+
}
diff --git a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/annotation/Model.java b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/annotation/Model.java
index 20dce43..36ed7b7 100644
--- a/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/annotation/Model.java
+++ b/extensions/core/model-annotation/src/main/java/org/apache/isis/extensions/modelannotation/applib/annotation/Model.java
@@ -27,7 +27,7 @@ import java.lang.annotation.Target;
/**
* Indicates that a method is a supporting-method, one that contributes (hide, validate, ...)
- * to an <em>Action/</em>.
+ * to an <em>Action</em>.
* <p>
* By placing the {@link Model} annotation on a method, a contract with the meta-model is enforced,
* such that this method must be recognized and cannot be ignored.