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 2021/06/29 07:56:36 UTC
[isis] branch master updated: ISIS-1720: adding member 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 2ae73fc ISIS-1720: adding member tests
2ae73fc is described below
commit 2ae73fcc74e5829e57e40a60e5ed24569f46061d
Author: andi-huber <ah...@apache.org>
AuthorDate: Tue Jun 29 09:56:25 2021 +0200
ISIS-1720: adding member tests
also fixes 'named' and 'described' handling for mixins
---
.../services/wrapper/events/ObjectTitleEvent.java | 3 +-
.../core/metamodel/spec/ObjectSpecification.java | 8 ++++
.../specloader/specimpl/ObjectActionDefault.java | 4 --
.../specimpl/ObjectAssociationAbstract.java | 5 --
.../specloader/specimpl/ObjectMemberAbstract.java | 8 +++-
.../specimpl/OneToOneAssociationDefault.java | 2 +-
.../DomainModelTest_usingGoodDomain.java | 36 ++++++++++++--
.../testdomain/model/good/ProperMemberSupport.java | 13 +++--
.../model/good/ProperMemberSupport_action5.java | 40 +++++++++-------
.../good/ProperMemberSupport_collection3.java | 55 ++++++++++++++++++++++
.../model/good/ProperMemberSupport_property3.java | 42 ++++++++++-------
11 files changed, 155 insertions(+), 61 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java
index 6658e3e..9125652 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java
@@ -22,7 +22,8 @@ package org.apache.isis.applib.services.wrapper.events;
import org.apache.isis.applib.Identifier;
/**
- * <i>Supported only by {@link org.apache.isis.applib.services.wrapper.WrapperFactory} service, </i> represents an access (reading) of an object's title.
+ * <i>Supported only by {@link org.apache.isis.applib.services.wrapper.WrapperFactory} service, </i>
+ * represents an access (reading) of an object's title.
*
* <p>
* The {@link #getReason()} will always be <tt>null</tt>; access is always
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 564962b..dbc6421 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -116,6 +116,14 @@ extends
*/
Optional<? extends ObjectMember> getMember(String memberId);
+ default ObjectMember getMemberElseFail(final String memberId) {
+ return getMember(memberId).orElseThrow(()->{
+ val msg = "Member '" + memberId + "' does not correspond "
+ + "to any of the object's fields or actions.";
+ return new UnsupportedOperationException(msg);
+ });
+ }
+
/**
* @param method
* @return optionally the ObjectMember associated with given {@code method},
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
index 8f5e5cd..6477603 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -230,10 +230,6 @@ implements ObjectAction {
return parameters.getElseFail(position);
}
- protected InteractionHead headFor(final ManagedObject target) {
- return InteractionHead.regular(target);
- }
-
// -- visable, usable
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
index 59a92c1..ab942b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
@@ -27,7 +27,6 @@ import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacet;
-import org.apache.isis.core.metamodel.interactions.InteractionHead;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
@@ -51,10 +50,6 @@ implements ObjectAssociation {
this.specification = specification;
}
- protected InteractionHead headFor(final ManagedObject ownerAdapter) {
- return InteractionHead.regular(ownerAdapter);
- }
-
@Override
public FacetHolder getFacetHolder() {
return getFacetedMethod();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 659989e..b4cc669 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -74,6 +74,10 @@ implements
: null;
}
+ protected InteractionHead headFor(final ManagedObject ownerAdapter) {
+ return InteractionHead.regular(ownerAdapter);
+ }
+
// -- fields
private final Identifier featureIdentifier;
@@ -133,7 +137,7 @@ implements
return namedFacet
.getSpecialization()
.fold( textFacet->textFacet.translated(),
- textFacet->textFacet.textElseNull(domainObjectProvider.get()));
+ textFacet->textFacet.textElseNull(headFor(domainObjectProvider.get()).getTarget()));
}
@Override
@@ -154,7 +158,7 @@ implements
.map(MemberDescribedFacet::getSpecialization)
.map(specialization->specialization
.fold(textFacet->textFacet.translated(),
- textFacet->textFacet.textElseNull(domainObjectProvider.get())))
+ textFacet->textFacet.textElseNull(headFor(domainObjectProvider.get()).getTarget())))
.orElse(null);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
index 501493a..0c133a7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
@@ -94,7 +94,7 @@ implements OneToOneAssociation {
public String getColumnDescription() {
return lookupFacet(ColumnDescribedFacet.class)
.map(ColumnDescribedFacet::translated)
- .orElseGet(() -> null);
+ .orElse(null);
}
// -- VISIBLE, USABLE
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index 9061d6a..85de79e 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -29,11 +29,6 @@ import org.junit.jupiter.params.provider.MethodSource;
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.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
import org.apache.isis.applib.services.jaxb.JaxbService;
import org.apache.isis.applib.services.metamodel.BeanSort;
import org.apache.isis.applib.services.metamodel.Config;
@@ -49,6 +44,7 @@ import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoice
import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
import org.apache.isis.core.metamodel.postprocessors.collparam.ActionParameterChoicesFacetFromParentedCollection;
import org.apache.isis.core.metamodel.postprocessors.collparam.ActionParameterDefaultsFacetFromAssociatedCollection;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.MixedIn;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -67,6 +63,11 @@ import org.apache.isis.testdomain.model.good.ProperMemberInheritance_usingInterf
import org.apache.isis.testdomain.model.good.ProperMemberSupport;
import org.apache.isis.testing.integtestsupport.applib.validate.DomainModelValidator;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
import lombok.val;
@SpringBootTest(
@@ -384,6 +385,18 @@ class DomainModelTest_usingGoodDomain {
}
+ @ParameterizedTest
+ @MethodSource("provideImperativelyNamed")
+ void imperativelyNamedMembers(final String memberId, final String named, final String described) {
+
+ val objectSpec = specificationLoader.specForTypeElseFail(ProperMemberSupport.class);
+ val member = objectSpec.getMemberElseFail(memberId);
+ val sampleObject = ManagedObject.of(objectSpec, new ProperMemberSupport());
+
+ assertEquals(named, member.getFriendlyName(()->sampleObject));
+ assertEquals(described, member.getDescription(()->sampleObject));
+ }
+
// -- HELPER
private void assertHasProperty(final ObjectSpecification spec, final String propertyId) {
@@ -407,5 +420,18 @@ class DomainModelTest_usingGoodDomain {
);
}
+ static Stream<Arguments> provideImperativelyNamed() {
+ return Stream.of(
+ // regular on type
+ Arguments.of("myAction", "named-imperative[MyAction]", "described-imperative[MyAction]"),
+ Arguments.of("myProp", "named-imperative[MyProp]", "described-imperative[MyProp]"),
+ Arguments.of("myColl", "named-imperative[MyColl]", "described-imperative[MyColl]"),
+ // contributed by mixin(s)
+ Arguments.of("action5", "named-imperative[action5]", "described-imperative[action5]"),
+ Arguments.of("property3", "named-imperative[property3]", "described-imperative[property3]"),
+ Arguments.of("collection3", "named-imperative[collection3]", "described-imperative[collection3]")
+ );
+ }
+
}
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport.java
index 6d97986..9c3729d 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport.java
@@ -63,12 +63,12 @@ public class ProperMemberSupport {
@MemberSupport
public String namedMyAction() {
- return null;
+ return "named-imperative[MyAction]";
}
@MemberSupport
public String describedMyAction() {
- return null;
+ return "described-imperative[MyAction]";
}
@MemberSupport
@@ -156,12 +156,12 @@ public class ProperMemberSupport {
@MemberSupport
public String namedMyProp() {
- return null;
+ return "named-imperative[MyProp]";
}
@MemberSupport
public String describedMyProp() {
- return null;
+ return "described-imperative[MyProp]";
}
@MemberSupport
@@ -202,15 +202,14 @@ public class ProperMemberSupport {
@MemberSupport
public String namedMyColl() {
- return null;
+ return "named-imperative[MyColl]";
}
@MemberSupport
public String describedMyColl() {
- return null;
+ return "described-imperative[MyColl]";
}
-
@MemberSupport
public String disableMyColl() {
return null;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action5.java
similarity index 54%
copy from api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java
copy to regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action5.java
index 6658e3e..8385400 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action5.java
@@ -16,31 +16,35 @@
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.isis.testdomain.model.good;
-package org.apache.isis.applib.services.wrapper.events;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.MemberSupport;
+import org.apache.isis.applib.annotation.Publishing;
-import org.apache.isis.applib.Identifier;
+import lombok.RequiredArgsConstructor;
-/**
- * <i>Supported only by {@link org.apache.isis.applib.services.wrapper.WrapperFactory} service, </i> represents an access (reading) of an object's title.
- *
- * <p>
- * The {@link #getReason()} will always be <tt>null</tt>; access is always
- * allowed.
- *
- * @since 1.x {@index}
- */
-public class ObjectTitleEvent extends AccessEvent {
+@Action(executionPublishing = Publishing.ENABLED)
+@RequiredArgsConstructor
+public class ProperMemberSupport_action5 {
- private final String title;
+ private final ProperMemberSupport mixee;
- public ObjectTitleEvent(final Object source, final Identifier classIdentifier, final String title) {
- super(source, classIdentifier);
- this.title = title;
+ public ProperMemberSupport act() {
+ return mixee;
}
- public String getTitle() {
- return title;
+ // -- IMPERATIVE NAMING AND DESCRIBING
+
+ @MemberSupport
+ public String namedAct() {
+ return "named-imperative[action5]";
}
+ @MemberSupport
+ public String describedAct() {
+ return "described-imperative[action5]";
+ }
+
+
}
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_collection3.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_collection3.java
new file mode 100644
index 0000000..8ca643f
--- /dev/null
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_collection3.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.testdomain.model.good;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
+
+import lombok.RequiredArgsConstructor;
+
+@Collection
+@CollectionLayout(named = "foo", describedAs = "bar") // <-- overruled by imperative naming
+@RequiredArgsConstructor
+public class ProperMemberSupport_collection3 {
+
+ private final ProperMemberSupport holder;
+
+ @MemberSupport
+ public List<String> coll() {
+ return Collections.singletonList(holder.toString());
+ }
+
+ // -- IMPERATIVE NAMING AND DESCRIBING
+
+ @MemberSupport
+ public String namedColl() {
+ return "named-imperative[collection3]";
+ }
+
+ @MemberSupport
+ public String describedColl() {
+ return "described-imperative[collection3]";
+ }
+
+
+}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_property3.java
similarity index 50%
copy from api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java
copy to regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_property3.java
index 6658e3e..85070e3 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/wrapper/events/ObjectTitleEvent.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_property3.java
@@ -16,31 +16,37 @@
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.isis.testdomain.model.good;
-package org.apache.isis.applib.services.wrapper.events;
+import org.apache.isis.applib.annotation.MemberSupport;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.applib.Identifier;
+import lombok.RequiredArgsConstructor;
-/**
- * <i>Supported only by {@link org.apache.isis.applib.services.wrapper.WrapperFactory} service, </i> represents an access (reading) of an object's title.
- *
- * <p>
- * The {@link #getReason()} will always be <tt>null</tt>; access is always
- * allowed.
- *
- * @since 1.x {@index}
- */
-public class ObjectTitleEvent extends AccessEvent {
+@Property
+@PropertyLayout(named= "foo", describedAs = "bar") // <-- overruled by imperative naming, but used for column naming and describing
+@RequiredArgsConstructor
+public class ProperMemberSupport_property3 {
- private final String title;
+ private final ProperMemberSupport holder;
- public ObjectTitleEvent(final Object source, final Identifier classIdentifier, final String title) {
- super(source, classIdentifier);
- this.title = title;
+ @MemberSupport
+ public String prop() {
+ return holder.toString();
}
- public String getTitle() {
- return title;
+ // -- IMPERATIVE NAMING AND DESCRIBING
+
+ @MemberSupport
+ public String namedProp() {
+ return "named-imperative[property3]";
}
+ @MemberSupport
+ public String describedProp() {
+ return "described-imperative[property3]";
+ }
+
+
}