From 187c7fcca8f354f6cc7f49cd42ce489f588b2682 Mon Sep 17 00:00:00 2001 From: andi-huber Date: Sat, 15 Apr 2023 16:25:18 +0200 Subject: [PATCH 01/37] CAUSEWAY-3409: simplify event-type related facets --- .../events/domain/AbstractDomainEvent.java | 26 +++---- .../events/domain/ActionDomainEvent.java | 14 ---- .../facets/DomainEventFacetAbstract.java | 68 +++++++++++++++++++ .../metamodel/facets/DomainEventHelper.java | 18 ++--- .../facets/SingleClassValueFacetAbstract.java | 2 +- .../action/ActionAnnotationFacetFactory.java | 4 ++ .../invocation/ActionDomainEventFacet.java | 3 +- .../ActionDomainEventFacetAbstract.java | 16 +---- .../ActionDomainEventFacetDefault.java | 1 - ...InvocationFacetForDomainEventAbstract.java | 2 +- .../modify/CollectionDomainEventFacet.java | 3 +- .../CollectionDomainEventFacetAbstract.java | 27 ++------ ...DefaultFacetForDomainObjectAnnotation.java | 11 +-- ...DefaultFacetForDomainObjectAnnotation.java | 12 +--- ...DefaultFacetForDomainObjectAnnotation.java | 10 +-- .../modify/PropertyDomainEventFacet.java | 3 +- .../PropertyDomainEventFacetAbstract.java | 44 +++++------- .../interactions/InteractionHead.java | 4 +- ...weakDomainEventsForMixinPostProcessor.java | 37 +++++----- .../metamodel/spec/feature/ObjectAction.java | 2 +- .../PropertyAnnotationFacetFactoryTest.java | 6 +- 21 files changed, 157 insertions(+), 156 deletions(-) create mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java diff --git a/api/applib/src/main/java/org/apache/causeway/applib/events/domain/AbstractDomainEvent.java b/api/applib/src/main/java/org/apache/causeway/applib/events/domain/AbstractDomainEvent.java index ba20e5388ff..2df31e83d16 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/events/domain/AbstractDomainEvent.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/events/domain/AbstractDomainEvent.java @@ -119,24 +119,26 @@ public S getSource() { *

*/ @Getter - private Object mixedIn; + private Object mixee; /** * Not API - set by the framework. */ - public void setMixedIn(final Object mixedIn) { - this.mixedIn = mixedIn; + public final void setMixee(final Object mixee) { + this.mixee = mixee; } /** * The subject of the event, which will be either the * {@link #getSource() source} for a regular action, or the - * {@link #getMixedIn() mixed-in} domain object for a mixin. + * {@link #getMixee() mixed-in} domain object for a mixin. */ public T getSubject() { - val mixedIn = getMixedIn(); - val mixedInElseSource = mixedIn != null ? mixedIn : getSource(); + val mixee = getMixee(); + val mixedInElseSource = mixee != null + ? mixee + : getSource(); return _Casts.uncheckedCast(mixedInElseSource); } @@ -194,7 +196,7 @@ public boolean isExecuted() { /** * Not API, set by the framework. */ - public void setEventPhase(final Phase phase) { + public final void setEventPhase(final Phase phase) { this.eventPhase = phase; } @@ -208,7 +210,7 @@ public void setEventPhase(final Phase phase) { /** * Not API, set by the framework if the no-arg constructor is used. */ - public void setIdentifier(final Identifier identifier) { + public final void setIdentifier(final Identifier identifier) { this.identifier = identifier; } @@ -226,7 +228,7 @@ public void setIdentifier(final Identifier identifier) { * * @see #veto(String, Object...) */ - public void hide() { + public final void hide() { this.hidden = true; } @@ -275,7 +277,7 @@ public boolean isDisabled() { * @see #disable(org.apache.causeway.applib.services.i18n.TranslatableString) * @see #veto(String, Object...) */ - public void disable(final String reason) { + public final void disable(final String reason) { this.disabledReason = reason; } @@ -286,7 +288,7 @@ public void disable(final String reason) { * @see #disable(java.lang.String) * @see #veto(org.apache.causeway.applib.services.i18n.TranslatableString) */ - public void disable(final TranslatableString reason) { + public final void disable(final TranslatableString reason) { this.disabledReasonTranslatable = reason; } @@ -478,7 +480,7 @@ public Object get(final Object key) { * * Set user-data, for the use of a subsequent {@link #getEventPhase() phase}. */ - public void put(final Object key, final Object value) { + public final void put(final Object key, final Object value) { userData.put(key, value); } diff --git a/api/applib/src/main/java/org/apache/causeway/applib/events/domain/ActionDomainEvent.java b/api/applib/src/main/java/org/apache/causeway/applib/events/domain/ActionDomainEvent.java index 0fe33d3b7ff..76b50c2ee06 100644 --- a/api/applib/src/main/java/org/apache/causeway/applib/events/domain/ActionDomainEvent.java +++ b/api/applib/src/main/java/org/apache/causeway/applib/events/domain/ActionDomainEvent.java @@ -139,12 +139,6 @@ public ActionDomainEvent(final S source) { @Getter private List> parameterTypes; - /** - * Populated only for mixins; holds the underlying domain object that the mixin contributes to. - */ - @Getter - private Object mixedIn; - /** * The arguments being used to invoke the action. * @@ -208,14 +202,6 @@ public void setParameterNames(final List parameterNames) { public void setParameterTypes(final List> parameterTypes) { this.parameterTypes = parameterTypes; } - /** - * @apiNote : NOT API, set by the framework - */ - @Override - public void setMixedIn(final Object mixedIn) { - this.mixedIn = mixedIn; - } - private static final ToString> toString = ObjectContracts.> toString("source", ActionDomainEvent::getSource) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java new file mode 100644 index 00000000000..700e5e1f234 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java @@ -0,0 +1,68 @@ +/* + * 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.causeway.core.metamodel.facets; + +import java.util.function.BiConsumer; + +import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; + +import lombok.NonNull; + +public abstract class DomainEventFacetAbstract +extends FacetAbstract { + + private final Class eventType; + + protected DomainEventFacetAbstract( + final Class facetType, + final FacetHolder holder, + final Class eventType) { + super(facetType, holder); + this.eventType = eventType; + } + + public final Class getEventType() { + return eventType; + } + +// /** +// * The {@link ObjectSpecification} of the {@link #value()}. +// */ +// @Override +// public ObjectSpecification valueSpec() { +// final Class valueType = value(); +// return valueType != null ? getSpecificationLoader().loadSpecification(valueType) : null; +// } + + @Override + public void visitAttributes(final BiConsumer visitor) { + super.visitAttributes(visitor); + visitor.accept("eventType", getEventType()); + } + + @Override + public boolean semanticEquals(final @NonNull Facet other) { + return other instanceof DomainEventFacetAbstract + ? this.getEventType() == ((DomainEventFacetAbstract)other).getEventType() + : false; + } + +} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventHelper.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventHelper.java index a7dafe25b25..e23619b2d1a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventHelper.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventHelper.java @@ -125,10 +125,10 @@ private ActionDomainEvent postEventForAction( final Identifier identifier = facetHolder.getFeatureIdentifier(); event = newActionDomainEvent(eventType, identifier, source, arguments); - // copy over if have - head.getMixedIn() + // copy over if mixee is present + head.getMixee() .ifPresent(mixedInAdapter-> - event.setMixedIn(mixedInAdapter.getPojo())); + event.setMixee(mixedInAdapter.getPojo())); if(objectAction != null) { // should always be the case... @@ -251,9 +251,9 @@ public PropertyDomainEvent postEventForProperty( event = newPropertyDomainEvent(eventType, identifier, source, oldValue, newValue); // copy over if have - head.getMixedIn() - .ifPresent(mixedInAdapter-> - event.setMixedIn(mixedInAdapter.getPojo())); + head.getMixee() + .ifPresent(mixeeAdapter-> + event.setMixee(mixeeAdapter.getPojo())); } @@ -343,9 +343,9 @@ public CollectionDomainEvent postEventForCollection( event = newCollectionDomainEvent(eventType, phase, identifier, source); // copy over if have - head.getMixedIn() - .ifPresent(mixedInAdapter-> - event.setMixedIn(mixedInAdapter.getPojo())); + head.getMixee() + .ifPresent(mixeeAdapter-> + event.setMixee(mixeeAdapter.getPojo())); event.setEventPhase(phase); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java index f70e2cd7182..ab5c676d97c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/SingleClassValueFacetAbstract.java @@ -33,7 +33,7 @@ public abstract class SingleClassValueFacetAbstract private final Class value; - public SingleClassValueFacetAbstract( + protected SingleClassValueFacetAbstract( final Class facetType, final FacetHolder holder, final Class value) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java index af4ddfcfc69..a8ccbfbd216 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java @@ -25,6 +25,7 @@ import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.applib.mixins.system.HasInteractionId; +import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FeatureType; @@ -113,6 +114,9 @@ void processInvocation(final ProcessMethodContext processMethodContext, final Op val typeSpec = getSpecificationLoader().loadSpecification(cls); val holder = processMethodContext.getFacetHolder(); + //FIXME[CAUSEWAY-3409] + _Assert.assertFalse(typeSpec.isMixin(), ()->"we need the mixee instead"); + // // Set up ActionDomainEventFacet, which will act as the hiding/disabling/validating advisor // diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java index 87bcc3c7c00..53ccb2d31d9 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java @@ -18,7 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action.invocation; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacet; import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvisor; @@ -27,7 +26,7 @@ * Corresponds to @Action(domainEvent=...) annotation in the Causeway programming model. */ public interface ActionDomainEventFacet -extends SingleClassValueFacet, HidingInteractionAdvisor, DisablingInteractionAdvisor, +extends HidingInteractionAdvisor, DisablingInteractionAdvisor, ValidatingInteractionAdvisor { } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java index eb3e5a8ff05..89039f90f3b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java @@ -29,8 +29,8 @@ import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.DomainEventHelper; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacetAbstract; import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext; import org.apache.causeway.core.metamodel.interactions.ActionValidityContext; import org.apache.causeway.core.metamodel.interactions.InteractionContext; @@ -39,24 +39,19 @@ import org.apache.causeway.core.metamodel.interactions.VisibilityContext; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; -import lombok.Getter; -import lombok.Setter; - public abstract class ActionDomainEventFacetAbstract -extends SingleClassValueFacetAbstract +extends DomainEventFacetAbstract> implements ActionDomainEventFacet { - @Getter @Setter private Class> eventType; private final TranslationService translationService; private final TranslationContext translationContext; private final DomainEventHelper domainEventHelper; - public ActionDomainEventFacetAbstract( + protected ActionDomainEventFacetAbstract( final Class> eventType, final FacetHolder holder) { super(ActionDomainEventFacet.class, holder, eventType); - setEventType(eventType); this.translationService = getTranslationService(); this.translationContext = holder.getTranslationContext(); @@ -64,11 +59,6 @@ public ActionDomainEventFacetAbstract( domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } - @Override - public Class value() { - return eventType; - } - @Override public String hides(final VisibilityContext ic) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java index 311f7c3a4ff..99ae808905a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java @@ -28,5 +28,4 @@ public ActionDomainEventFacetDefault( super(eventType, holder); } - } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java index 2fa08e526dc..23a668da282 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java @@ -65,7 +65,7 @@ public abstract class ActionInvocationFacetForDomainEventAbstract private final ServiceRegistry serviceRegistry; private final DomainEventHelper domainEventHelper; - public ActionInvocationFacetForDomainEventAbstract( + protected ActionInvocationFacetForDomainEventAbstract( final Class> eventType, final MethodFacade method, final ObjectSpecification declaringType, diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java index 68871f9fc02..c59dc19463b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java @@ -18,14 +18,13 @@ */ package org.apache.causeway.core.metamodel.facets.collections.collection.modify; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacet; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; /** * Corresponds to @Collection(domainEvent=...) annotation in the Causeway programming model. */ public interface CollectionDomainEventFacet -extends SingleClassValueFacet, HidingInteractionAdvisor { +extends HidingInteractionAdvisor { } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java index 573034371f3..3be7077170a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java @@ -22,48 +22,31 @@ import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.DomainEventHelper; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacetAbstract; import org.apache.causeway.core.metamodel.interactions.VisibilityContext; public abstract class CollectionDomainEventFacetAbstract - extends SingleClassValueFacetAbstract - implements CollectionDomainEventFacet { +extends DomainEventFacetAbstract> +implements CollectionDomainEventFacet { private final DomainEventHelper domainEventHelper; public CollectionDomainEventFacetAbstract( final Class> eventType, - final FacetHolder holder) { + final FacetHolder holder) { super(CollectionDomainEventFacet.class, holder, eventType); - this.eventType = eventType; - domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } - private Class> eventType; - - @Override - public Class value() { - return eventType; - } - - public Class> getEventType() { - return _Casts.uncheckedCast(eventType); - } - - public void setEventType(final Class> eventType) { - this.eventType = eventType; - } - @Override public String hides(final VisibilityContext ic) { final CollectionDomainEvent event = domainEventHelper.postEventForCollection( AbstractDomainEvent.Phase.HIDE, - getEventType(), + _Casts.uncheckedCast(getEventType()), getFacetHolder(), ic.getHead() ); if (event != null && event.isHidden()) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java index 0abd2ee326d..0db87e591cf 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -21,7 +21,7 @@ import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacetAbstract; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; /** @@ -29,13 +29,7 @@ * for any actions as a fallback/default. */ public class ActionDomainEventDefaultFacetForDomainObjectAnnotation -extends SingleClassValueFacetAbstract { - - - private final Class> eventType; - public Class> getEventType() { - return eventType; - } +extends DomainEventFacetAbstract> { private static Class type() { return ActionDomainEventDefaultFacetForDomainObjectAnnotation.class; @@ -45,7 +39,6 @@ public ActionDomainEventDefaultFacetForDomainObjectAnnotation( final FacetHolder holder, final Class> value) { super(type(), holder, value); - this.eventType = value; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java index 97516bdb6e0..2213468effd 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -21,7 +21,7 @@ import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacetAbstract; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; /** @@ -29,12 +29,7 @@ * for any actions as a fallback/default. */ public class CollectionDomainEventDefaultFacetForDomainObjectAnnotation -extends SingleClassValueFacetAbstract { - - private final Class> eventType; - public Class> getEventType() { - return eventType; - } +extends DomainEventFacetAbstract> { private static Class type() { return CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class; @@ -42,9 +37,8 @@ private static Class type() { public CollectionDomainEventDefaultFacetForDomainObjectAnnotation( final FacetHolder holder, - final Class> value) { + final Class> value) { super(type(), holder, value); - this.eventType = value; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java index 8b8a7ae038a..7820dbb5bea 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -21,7 +21,7 @@ import org.apache.causeway.applib.events.domain.PropertyDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacetAbstract; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; /** @@ -29,12 +29,7 @@ * for any actions as a fallback/default. */ public class PropertyDomainEventDefaultFacetForDomainObjectAnnotation -extends SingleClassValueFacetAbstract { - - private final Class> eventType; - public Class> getEventType() { - return eventType; - } +extends DomainEventFacetAbstract> { private static Class type() { return PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class; @@ -44,7 +39,6 @@ public PropertyDomainEventDefaultFacetForDomainObjectAnnotation( final FacetHolder holder, final Class> value) { super(type(), holder, value); - this.eventType = value; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java index 35755e3b4f7..0a962bd89ed 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java @@ -18,7 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property.modify; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacet; import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvisor; @@ -27,6 +26,6 @@ * Corresponds to @Property(domainEvent=...) annotation in the Causeway programming model. */ public interface PropertyDomainEventFacet -extends SingleClassValueFacet, HidingInteractionAdvisor, DisablingInteractionAdvisor, ValidatingInteractionAdvisor { +extends HidingInteractionAdvisor, DisablingInteractionAdvisor, ValidatingInteractionAdvisor { } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java index 614a515af75..9bd94b6427c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java @@ -21,7 +21,6 @@ import java.util.Optional; import java.util.function.BiConsumer; -import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.PropertyDomainEvent; import org.apache.causeway.applib.services.i18n.TranslatableString; @@ -30,8 +29,8 @@ import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.DomainEventHelper; -import org.apache.causeway.core.metamodel.facets.SingleClassValueFacetAbstract; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.interactions.ProposedHolder; import org.apache.causeway.core.metamodel.interactions.UsabilityContext; @@ -41,7 +40,8 @@ import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; public abstract class PropertyDomainEventFacetAbstract -extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet { +extends DomainEventFacetAbstract> +implements PropertyDomainEventFacet { private final DomainEventHelper domainEventHelper; @@ -54,11 +54,10 @@ public abstract class PropertyDomainEventFacetAbstract */ public PropertyDomainEventFacetAbstract( final Class> eventType, - final PropertyOrCollectionAccessorFacet getterFacetIfAny, - final FacetHolder holder ) { + final PropertyOrCollectionAccessorFacet getterFacetIfAny, + final FacetHolder holder ) { super(PropertyDomainEventFacet.class, holder, eventType); - this.eventType = eventType; this.getterFacetIfAny = getterFacetIfAny; this.translationService = getTranslationService(); @@ -67,24 +66,15 @@ public PropertyDomainEventFacetAbstract( domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } - private Class> eventType; - - @Override - public Class value() { - return eventType; - } - - public Class> getEventType() { - return _Casts.uncheckedCast(eventType); - } - - /** - * Can be overwritten if this facet is on a mixin where the subject (mixedInType) is annotated with - * {@link DomainObject#propertyDomainEvent()}. - */ - public void setEventType(final Class> eventType) { - this.eventType = eventType; - } +// private Class> eventType; +// +// /** +// * Can be overwritten if this facet is on a mixin where the subject (mixedInType) is annotated with +// * {@link DomainObject#propertyDomainEvent()}. +// */ +// public void setEventType(final Class> eventType) { +// this.eventType = eventType; +// } @Override public String hides(final VisibilityContext ic) { @@ -92,7 +82,7 @@ public String hides(final VisibilityContext ic) { final PropertyDomainEvent event = domainEventHelper.postEventForProperty( AbstractDomainEvent.Phase.HIDE, - getEventType(), null, + _Casts.uncheckedCast(getEventType()), null, getFacetHolder(), ic.getHead(), null, null); if (event != null && event.isHidden()) { @@ -107,7 +97,7 @@ public Optional disables(final UsabilityContext ic) { final PropertyDomainEvent event = domainEventHelper.postEventForProperty( AbstractDomainEvent.Phase.DISABLE, - getEventType(), null, + _Casts.uncheckedCast(getEventType()), null, getFacetHolder(), ic.getHead(), null, null); if (event != null @@ -144,7 +134,7 @@ public String invalidates(final ValidityContext ic) { final PropertyDomainEvent event = domainEventHelper.postEventForProperty( AbstractDomainEvent.Phase.VALIDATE, - getEventType(), null, + _Casts.uncheckedCast(getEventType()), null, getFacetHolder(), ic.getHead(), oldValue, proposedValue); if (event != null && event.isInvalid()) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java index a1af639dc67..2586c896c92 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java @@ -63,9 +63,9 @@ public static InteractionHead mixin(final @NonNull ManagedObject owner, final @N /** * as used by the domain event subsystem - * @return optionally the owner, based on whether the target is a mixin + * @return optionally the owner (mixee), based on whether the target is a mixin */ - public Optional getMixedIn() { + public Optional getMixee() { return Objects.equals(getOwner(), getTarget()) ? Optional.empty() : Optional.of(getOwner()); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java index d6913e8154e..f2a12f74e47 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java @@ -27,6 +27,7 @@ import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.applib.events.domain.PropertyDomainEvent; +import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.commons.internal.reflection._Annotations; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetUtil; @@ -50,7 +51,6 @@ import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; -import org.apache.causeway.core.metamodel.specloader.specimpl.ObjectActionMixedIn; import org.apache.causeway.core.metamodel.specloader.specimpl.OneToManyAssociationMixedIn; import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; @@ -65,23 +65,22 @@ public TweakDomainEventsForMixinPostProcessor(final MetaModelContext metaModelCo @Override public void postProcessAction(final ObjectSpecification objectSpecification, final ObjectAction objectAction) { - if(objectAction instanceof ObjectActionMixedIn) { + if(objectAction.isMixedIn()) { // unlike collection and property mixins, there is no need to create the DomainEventFacet, it will // have been created in the ActionAnnotationFacetFactory - final ActionDomainEventDefaultFacetForDomainObjectAnnotation actionDomainEventDefaultFacet = - objectSpecification.getFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class); - - if(actionDomainEventDefaultFacet != null) { - final ObjectActionMixedIn actionMixedIn = (ObjectActionMixedIn) objectAction; - final ActionDomainEventFacet actionFacet = actionMixedIn.getFacet(ActionDomainEventFacet.class); - if (actionFacet instanceof ActionDomainEventFacetAbstract) { - final ActionDomainEventFacetAbstract facetAbstract = (ActionDomainEventFacetAbstract) actionFacet; - if (facetAbstract.getEventType() == ActionDomainEvent.Default.class) { - final ActionDomainEventFacetAbstract existing = (ActionDomainEventFacetAbstract) actionFacet; - existing.setEventType(actionDomainEventDefaultFacet.getEventType()); - } - } - } + + objectSpecification.lookupFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class) + .ifPresent(actionDomainEventDefaultFacet->{ + _Casts.castTo( + ActionDomainEventFacetAbstract.class, + objectAction.getFacet(ActionDomainEventFacet.class)) + .filter(actionDomainEventFacetAbstract-> + actionDomainEventFacetAbstract.getEventType() == ActionDomainEvent.Default.class) + .ifPresent(actionDomainEventFacetAbstract->{ + //FIXME[CAUSEWAY-3409] + //actionDomainEventFacetAbstract.setEventType(actionDomainEventDefaultFacet.getEventType()); + }); + }); } } @@ -119,7 +118,8 @@ public void postProcessProperty(final ObjectSpecification objectSpecification, f final PropertyDomainEventFacetAbstract facetAbstract = (PropertyDomainEventFacetAbstract) propertyFacet; if (facetAbstract.getEventType() == PropertyDomainEvent.Default.class) { final PropertyDomainEventFacetAbstract existing = (PropertyDomainEventFacetAbstract) propertyFacet; - existing.setEventType(propertyDomainEventDefaultFacet.getEventType()); + //FIXME[CAUSEWAY-3409] + //existing.setEventType(propertyDomainEventDefaultFacet.getEventType()); } } } @@ -159,7 +159,8 @@ public void postProcessCollection(final ObjectSpecification objectSpecification, final CollectionDomainEventFacetAbstract facetAbstract = (CollectionDomainEventFacetAbstract) collectionFacet; if (facetAbstract.getEventType() == CollectionDomainEvent.Default.class) { final CollectionDomainEventFacetAbstract existing = (CollectionDomainEventFacetAbstract) collectionFacet; - existing.setEventType(collectionDomainEventDefaultFacet.getEventType()); + //FIXME[CAUSEWAY-3409] + //existing.setEventType(collectionDomainEventDefaultFacet.getEventType()); } } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java index 29eec9ce699..263d0ca7502 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java @@ -404,7 +404,7 @@ public static String friendlyNameFor( final @NonNull ObjectAction action, final @NonNull InteractionHead head) { - val mixeeAdapter = head.getMixedIn().orElse(null); + val mixeeAdapter = head.getMixee().orElse(null); if(mixeeAdapter != null) { val mixinSpec = action.getDeclaringType(); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java index ab41ab31ac3..dea0d8c5ded 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java @@ -279,7 +279,7 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {} assertNotNull(domainEventFacet); assertTrue(domainEventFacet instanceof PropertyDomainEventFacetForPropertyAnnotation); final PropertyDomainEventFacetForPropertyAnnotation domainEventFacetImpl = (PropertyDomainEventFacetForPropertyAnnotation) domainEventFacet; - assertThat(domainEventFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); @@ -326,7 +326,7 @@ class NamedChangedDomainEvent extends PropertyDomainEvent { assertNotNull(domainEventFacet); assertTrue(domainEventFacet instanceof PropertyDomainEventFacetForPropertyAnnotation); final PropertyDomainEventFacetForPropertyAnnotation domainEventFacetImpl = (PropertyDomainEventFacetForPropertyAnnotation) domainEventFacet; - MatcherAssert.assertThat(domainEventFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + MatcherAssert.assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); @@ -373,7 +373,7 @@ class Customer { assertNotNull(domainEventFacet); assertTrue(domainEventFacet instanceof PropertyDomainEventFacetDefault); final PropertyDomainEventFacetDefault domainEventFacetImpl = (PropertyDomainEventFacetDefault) domainEventFacet; - assertThat(domainEventFacetImpl.value(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); + assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); From 2d59058704b8c3d8878f957679f0a918389b38c1 Mon Sep 17 00:00:00 2001 From: andi-huber Date: Sun, 16 Apr 2023 08:36:24 +0200 Subject: [PATCH 02/37] CAUSEWAY-3409: simplify hierarchy of DomainEventFacetAbstract --- .../facets/DomainEventFacetAbstract.java | 41 +++-- .../action/ActionAnnotationFacetFactory.java | 19 +-- .../invocation/ActionDomainEventFacet.java | 131 ++++++++++++++- .../ActionDomainEventFacetAbstract.java | 144 ---------------- .../ActionDomainEventFacetDefault.java | 31 ---- ...onDomainEventFacetForActionAnnotation.java | 31 ---- .../CollectionAnnotationFacetFactory.java | 4 +- .../modify/CollectionDomainEventFacet.java | 42 ++++- .../CollectionDomainEventFacetAbstract.java | 58 ------- .../CollectionDomainEventFacetDefault.java | 4 +- ...mainEventFacetForCollectionAnnotation.java | 5 +- ...DefaultFacetForDomainObjectAnnotation.java | 2 +- ...DefaultFacetForDomainObjectAnnotation.java | 2 +- ...DefaultFacetForDomainObjectAnnotation.java | 2 +- .../PropertyAnnotationFacetFactory.java | 20 +-- ...tyClearFacetForDomainEventFromDefault.java | 2 +- ...tForDomainEventFromPropertyAnnotation.java | 2 +- .../modify/PropertyDomainEventFacet.java | 134 ++++++++++++++- .../PropertyDomainEventFacetAbstract.java | 158 ------------------ .../PropertyDomainEventFacetDefault.java | 39 ----- ...DomainEventFacetForPropertyAnnotation.java | 39 ----- ...ySetterFacetForDomainEventFromDefault.java | 2 +- ...tForDomainEventFromPropertyAnnotation.java | 2 +- ...terOrClearFacetForDomainEventAbstract.java | 2 +- ...weakDomainEventsForMixinPostProcessor.java | 39 ++--- ...AnnotationFacetFactoryTest_Invocation.java | 23 ++- .../PropertyAnnotationFacetFactoryTest.java | 24 +-- 27 files changed, 395 insertions(+), 607 deletions(-) delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetForActionAnnotation.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetDefault.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetForPropertyAnnotation.java diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java index 700e5e1f234..7ec25bb3f23 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java @@ -29,33 +29,52 @@ public abstract class DomainEventFacetAbstract extends FacetAbstract { - private final Class eventType; + public static enum EventTypeOrigin { + /** {@link #eventType} originates from configured defaults */ + DEFAULT, + /** {@link #eventType} originates from domain object annotation */ + ANNOTATED_OBJECT, + /** {@link #eventType} originates from member annotation */ + ANNOTATED_MEMBER; + public boolean isDefault() { return this==DEFAULT; } + public boolean isAnnotatedObject() { return this==ANNOTATED_OBJECT; } + public boolean isAnnotatedMember() { return this==ANNOTATED_MEMBER; } + } + + private Class eventType; + private EventTypeOrigin eventTypeOrigin; protected DomainEventFacetAbstract( final Class facetType, - final FacetHolder holder, - final Class eventType) { + final Class eventType, + final EventTypeOrigin eventTypeOrigin, + final FacetHolder holder) { super(facetType, holder); this.eventType = eventType; + this.eventTypeOrigin = eventTypeOrigin; } public final Class getEventType() { return eventType; } -// /** -// * The {@link ObjectSpecification} of the {@link #value()}. -// */ -// @Override -// public ObjectSpecification valueSpec() { -// final Class valueType = value(); -// return valueType != null ? getSpecificationLoader().loadSpecification(valueType) : null; -// } + public final EventTypeOrigin getEventTypeOrigin() { + return eventTypeOrigin; + } + + /** called by meta-model post-processors only */ + public final void updateEventType( + final Class eventType, + final EventTypeOrigin eventTypeOrigin) { + this.eventType = eventType; + this.eventTypeOrigin = eventTypeOrigin; + } @Override public void visitAttributes(final BiConsumer visitor) { super.visitAttributes(visitor); visitor.accept("eventType", getEventType()); + visitor.accept("eventTypeOrigin", getEventTypeOrigin().name()); } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java index a8ccbfbd216..d8022e605c2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java @@ -25,18 +25,16 @@ import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.applib.mixins.system.HasInteractionId; -import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FeatureType; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actions.action.choicesfrom.ChoicesFromFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetAbstract; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetDefault; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation; +import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromDefault; import org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation; @@ -115,7 +113,7 @@ void processInvocation(final ProcessMethodContext processMethodContext, final Op val holder = processMethodContext.getFacetHolder(); //FIXME[CAUSEWAY-3409] - _Assert.assertFalse(typeSpec.isMixin(), ()->"we need the mixee instead"); + //_Assert.assertFalse(typeSpec.isMixin(), ()->"we need the mixee instead"); // // Set up ActionDomainEventFacet, which will act as the hiding/disabling/validating advisor @@ -128,12 +126,11 @@ void processInvocation(final ProcessMethodContext processMethodContext, final Op .map(Action::domainEvent) .filter(domainEvent -> domainEvent != ActionDomainEvent.Default.class) .map(domainEvent -> - (ActionDomainEventFacetAbstract) - new ActionDomainEventFacetForActionAnnotation( - defaultFromDomainObjectIfRequired(typeSpec, domainEvent), holder)) + new ActionDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, domainEvent), EventTypeOrigin.ANNOTATED_MEMBER, holder)) .orElse( - new ActionDomainEventFacetDefault( - defaultFromDomainObjectIfRequired(typeSpec, ActionDomainEvent.Default.class), holder) + new ActionDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, ActionDomainEvent.Default.class), EventTypeOrigin.DEFAULT, holder) ); if(EventUtil.eventTypeIsPostable( @@ -147,7 +144,7 @@ void processInvocation(final ProcessMethodContext processMethodContext, final Op // replace the current actionInvocationFacet with one that will // emit the appropriate domain event and then delegate onto the underlying - addFacet(actionDomainEventFacet instanceof ActionDomainEventFacetForActionAnnotation + addFacet(actionDomainEventFacet.getEventTypeOrigin().isAnnotatedMember() ? new ActionInvocationFacetForDomainEventFromActionAnnotation( actionDomainEventFacet.getEventType(), actionMethod, typeSpec, returnSpec, holder) : new ActionInvocationFacetForDomainEventFromDefault( diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java index 53ccb2d31d9..6a4f28c0874 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java @@ -18,15 +18,134 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action.invocation; +import java.util.Optional; + +import org.apache.causeway.applib.events.domain.AbstractDomainEvent; +import org.apache.causeway.applib.events.domain.ActionDomainEvent; +import org.apache.causeway.applib.services.i18n.TranslatableString; +import org.apache.causeway.applib.services.i18n.TranslationContext; +import org.apache.causeway.applib.services.i18n.TranslationService; +import org.apache.causeway.commons.collections.Can; +import org.apache.causeway.commons.internal.assertions._Assert; +import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; +import org.apache.causeway.core.metamodel.facets.DomainEventHelper; +import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext; +import org.apache.causeway.core.metamodel.interactions.ActionValidityContext; import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; +import org.apache.causeway.core.metamodel.interactions.InteractionContext; +import org.apache.causeway.core.metamodel.interactions.UsabilityContext; import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvisor; +import org.apache.causeway.core.metamodel.interactions.ValidityContext; +import org.apache.causeway.core.metamodel.interactions.VisibilityContext; +import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; -/** - * Corresponds to @Action(domainEvent=...) annotation in the Causeway programming model. - */ -public interface ActionDomainEventFacet -extends HidingInteractionAdvisor, DisablingInteractionAdvisor, -ValidatingInteractionAdvisor { +public class ActionDomainEventFacet +extends DomainEventFacetAbstract> +implements + HidingInteractionAdvisor, + DisablingInteractionAdvisor, + ValidatingInteractionAdvisor { + + private final TranslationService translationService; + private final TranslationContext translationContext; + private final DomainEventHelper domainEventHelper; + + public ActionDomainEventFacet( + final Class> eventType, + final EventTypeOrigin eventTypeOrigin, + final FacetHolder holder) { + + super(ActionDomainEventFacet.class, eventType, eventTypeOrigin, holder); + + this.translationService = getTranslationService(); + this.translationContext = holder.getTranslationContext(); + + domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); + } + + @Override + public String hides(final VisibilityContext ic) { + + final ActionDomainEvent event = + domainEventHelper.postEventForAction( + AbstractDomainEvent.Phase.HIDE, + getEventType(), + actionFrom(ic), getFacetHolder(), + ic.getHead(), + // corresponds to programming model 'hidePlaceOrder()', + // which does no longer consider args + Can.empty(), + // result pojo n/a + null); + if (event != null && event.isHidden()) { + return "Hidden by subscriber"; + } + return null; + } + + @Override + public Optional disables(final UsabilityContext ic) { + + final ActionDomainEvent event = + domainEventHelper.postEventForAction( + AbstractDomainEvent.Phase.DISABLE, + getEventType(), + actionFrom(ic), getFacetHolder(), + ic.getHead(), + // corresponds to programming model 'disablePlaceOrder()', + // which does no longer consider args + Can.empty(), + // result pojo n/a + null); + if (event != null && event.isDisabled()) { + final TranslatableString reasonTranslatable = event.getDisabledReasonTranslatable(); + final String reasonString = reasonTranslatable != null + ? reasonTranslatable.translate(translationService, translationContext) + : event.getDisabledReason(); + + if(reasonString!=null) { + return VetoReason.explicit(reasonString).toOptional(); + } + } + return Optional.empty(); + } + + @Override + public String invalidates(final ValidityContext ic) { + + _Assert.assertTrue(ic instanceof ActionValidityContext, ()-> + String.format("expecting an action context but got %s", ic.getIdentifier())); + + final ActionValidityContext aic = (ActionValidityContext) ic; + final ActionDomainEvent event = + domainEventHelper.postEventForAction( + AbstractDomainEvent.Phase.VALIDATE, + getEventType(), + actionFrom(ic), getFacetHolder(), + ic.getHead(), aic.getArgs(), + null); + if (event != null && event.isInvalid()) { + final TranslatableString reasonTranslatable = event.getInvalidityReasonTranslatable(); + if(reasonTranslatable != null) { + return reasonTranslatable.translate(translationService, translationContext); + } + return event.getInvalidityReason(); + } + + return null; + } + + // -- HELPER + + private static ObjectAction actionFrom(final InteractionContext ic) { + if(!(ic instanceof ActionInteractionContext)) { + throw new IllegalStateException( + "Expecting ic to be of type ActionInteractionContext, instead was: " + ic); + } + return ((ActionInteractionContext) ic).getObjectAction(); + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java deleted file mode 100644 index 89039f90f3b..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.actions.action.invocation; - -import java.util.Optional; - -import org.apache.causeway.applib.events.domain.AbstractDomainEvent; -import org.apache.causeway.applib.events.domain.ActionDomainEvent; -import org.apache.causeway.applib.services.i18n.TranslatableString; -import org.apache.causeway.applib.services.i18n.TranslationContext; -import org.apache.causeway.applib.services.i18n.TranslationService; -import org.apache.causeway.commons.collections.Can; -import org.apache.causeway.commons.internal.assertions._Assert; -import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; -import org.apache.causeway.core.metamodel.facets.DomainEventHelper; -import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext; -import org.apache.causeway.core.metamodel.interactions.ActionValidityContext; -import org.apache.causeway.core.metamodel.interactions.InteractionContext; -import org.apache.causeway.core.metamodel.interactions.UsabilityContext; -import org.apache.causeway.core.metamodel.interactions.ValidityContext; -import org.apache.causeway.core.metamodel.interactions.VisibilityContext; -import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; - -public abstract class ActionDomainEventFacetAbstract -extends DomainEventFacetAbstract> -implements ActionDomainEventFacet { - - private final TranslationService translationService; - private final TranslationContext translationContext; - private final DomainEventHelper domainEventHelper; - - protected ActionDomainEventFacetAbstract( - final Class> eventType, - final FacetHolder holder) { - - super(ActionDomainEventFacet.class, holder, eventType); - - this.translationService = getTranslationService(); - this.translationContext = holder.getTranslationContext(); - - domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); - } - - @Override - public String hides(final VisibilityContext ic) { - - final ActionDomainEvent event = - domainEventHelper.postEventForAction( - AbstractDomainEvent.Phase.HIDE, - getEventType(), - actionFrom(ic), getFacetHolder(), - ic.getHead(), - // corresponds to programming model 'hidePlaceOrder()', - // which does no longer consider args - Can.empty(), - // result pojo n/a - null); - if (event != null && event.isHidden()) { - return "Hidden by subscriber"; - } - return null; - } - - @Override - public Optional disables(final UsabilityContext ic) { - - final ActionDomainEvent event = - domainEventHelper.postEventForAction( - AbstractDomainEvent.Phase.DISABLE, - getEventType(), - actionFrom(ic), getFacetHolder(), - ic.getHead(), - // corresponds to programming model 'disablePlaceOrder()', - // which does no longer consider args - Can.empty(), - // result pojo n/a - null); - if (event != null && event.isDisabled()) { - final TranslatableString reasonTranslatable = event.getDisabledReasonTranslatable(); - final String reasonString = reasonTranslatable != null - ? reasonTranslatable.translate(translationService, translationContext) - : event.getDisabledReason(); - - if(reasonString!=null) { - return VetoReason.explicit(reasonString).toOptional(); - } - } - return Optional.empty(); - } - - @Override - public String invalidates(final ValidityContext ic) { - - _Assert.assertTrue(ic instanceof ActionValidityContext, ()-> - String.format("expecting an action context but got %s", ic.getIdentifier())); - - final ActionValidityContext aic = (ActionValidityContext) ic; - final ActionDomainEvent event = - domainEventHelper.postEventForAction( - AbstractDomainEvent.Phase.VALIDATE, - getEventType(), - actionFrom(ic), getFacetHolder(), - ic.getHead(), aic.getArgs(), - null); - if (event != null && event.isInvalid()) { - final TranslatableString reasonTranslatable = event.getInvalidityReasonTranslatable(); - if(reasonTranslatable != null) { - return reasonTranslatable.translate(translationService, translationContext); - } - return event.getInvalidityReason(); - } - - return null; - } - - // -- HELPER - - private static ObjectAction actionFrom(final InteractionContext ic) { - if(!(ic instanceof ActionInteractionContext)) { - throw new IllegalStateException( - "Expecting ic to be of type ActionInteractionContext, instead was: " + ic); - } - return ((ActionInteractionContext) ic).getObjectAction(); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java deleted file mode 100644 index 99ae808905a..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetDefault.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.actions.action.invocation; - -import org.apache.causeway.applib.events.domain.ActionDomainEvent; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; - -public class ActionDomainEventFacetDefault extends ActionDomainEventFacetAbstract { - - public ActionDomainEventFacetDefault( - final Class> eventType, final FacetHolder holder) { - super(eventType, holder); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetForActionAnnotation.java deleted file mode 100644 index 6c70005485e..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetForActionAnnotation.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.actions.action.invocation; - -import org.apache.causeway.applib.events.domain.ActionDomainEvent; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; - -public class ActionDomainEventFacetForActionAnnotation extends ActionDomainEventFacetAbstract { - - public ActionDomainEventFacetForActionAnnotation( - final Class> eventType, final FacetHolder holder) { - super(eventType, holder); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java index b4225d010f1..f5963da10d5 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java @@ -34,7 +34,7 @@ import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract; import org.apache.causeway.core.metamodel.facets.collections.collection.hidden.HiddenFacetForCollectionAnnotation; -import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetAbstract; +import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetDefault; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetForCollectionAnnotation; import org.apache.causeway.core.metamodel.facets.collections.collection.typeof.TypeOfFacetForCollectionAnnotation; @@ -111,7 +111,7 @@ void processModify(final ProcessMethodContext processMethodContext, final Option .map(Collection::domainEvent) .filter(domainEvent -> domainEvent != CollectionDomainEvent.Default.class) .map(domainEvent -> - (CollectionDomainEventFacetAbstract) + (CollectionDomainEventFacet) new CollectionDomainEventFacetForCollectionAnnotation( defaultFromDomainObjectIfRequired(typeSpec, domainEvent), holder)) .orElse( diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java index c59dc19463b..ec3f9577c45 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java @@ -18,13 +18,43 @@ */ package org.apache.causeway.core.metamodel.facets.collections.collection.modify; +import org.apache.causeway.applib.events.domain.AbstractDomainEvent; +import org.apache.causeway.applib.events.domain.CollectionDomainEvent; +import org.apache.causeway.commons.internal.base._Casts; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; +import org.apache.causeway.core.metamodel.facets.DomainEventHelper; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; +import org.apache.causeway.core.metamodel.interactions.VisibilityContext; -/** - * Corresponds to @Collection(domainEvent=...) annotation in the Causeway programming model. - */ -public interface CollectionDomainEventFacet -extends HidingInteractionAdvisor { +public class CollectionDomainEventFacet +extends DomainEventFacetAbstract> +implements HidingInteractionAdvisor { -} + private final DomainEventHelper domainEventHelper; + + public CollectionDomainEventFacet( + final Class> eventType, + final EventTypeOrigin eventTypeOrigin, + final FacetHolder holder) { + + super(CollectionDomainEventFacet.class, eventType, eventTypeOrigin, holder); + domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); + } + @Override + public String hides(final VisibilityContext ic) { + + final CollectionDomainEvent event = + domainEventHelper.postEventForCollection( + AbstractDomainEvent.Phase.HIDE, + _Casts.uncheckedCast(getEventType()), + getFacetHolder(), ic.getHead() + ); + if (event != null && event.isHidden()) { + return "Hidden by subscriber"; + } + return null; + } + +} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java deleted file mode 100644 index 3be7077170a..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.collections.collection.modify; - -import org.apache.causeway.applib.events.domain.AbstractDomainEvent; -import org.apache.causeway.applib.events.domain.CollectionDomainEvent; -import org.apache.causeway.commons.internal.base._Casts; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; -import org.apache.causeway.core.metamodel.facets.DomainEventHelper; -import org.apache.causeway.core.metamodel.interactions.VisibilityContext; - -public abstract class CollectionDomainEventFacetAbstract -extends DomainEventFacetAbstract> -implements CollectionDomainEventFacet { - - private final DomainEventHelper domainEventHelper; - - public CollectionDomainEventFacetAbstract( - final Class> eventType, - final FacetHolder holder) { - - super(CollectionDomainEventFacet.class, holder, eventType); - domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); - } - - @Override - public String hides(final VisibilityContext ic) { - - final CollectionDomainEvent event = - domainEventHelper.postEventForCollection( - AbstractDomainEvent.Phase.HIDE, - _Casts.uncheckedCast(getEventType()), - getFacetHolder(), ic.getHead() - ); - if (event != null && event.isHidden()) { - return "Hidden by subscriber"; - } - return null; - } - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetDefault.java index bc63fb0e1e3..2fff17743d2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetDefault.java @@ -21,11 +21,11 @@ import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -public class CollectionDomainEventFacetDefault extends CollectionDomainEventFacetAbstract { +public class CollectionDomainEventFacetDefault extends CollectionDomainEventFacet { public CollectionDomainEventFacetDefault( final Class> eventType, final FacetHolder holder) { - super(eventType, holder); + super(eventType, EventTypeOrigin.DEFAULT, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetForCollectionAnnotation.java index c3c5309a84a..3c94a800c67 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetForCollectionAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetForCollectionAnnotation.java @@ -24,7 +24,8 @@ import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; -public class CollectionDomainEventFacetForCollectionAnnotation extends CollectionDomainEventFacetAbstract { +public class CollectionDomainEventFacetForCollectionAnnotation +extends CollectionDomainEventFacet { static CollectionDomainEventFacet create( final Collection collection, @@ -38,7 +39,7 @@ static CollectionDomainEventFacet create( public CollectionDomainEventFacetForCollectionAnnotation( final Class> eventType, final FacetHolder holder) { - super(eventType, holder); + super(eventType, EventTypeOrigin.ANNOTATED_MEMBER, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java index 0db87e591cf..2b4be892bf2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -38,7 +38,7 @@ private static Class type() { public ActionDomainEventDefaultFacetForDomainObjectAnnotation( final FacetHolder holder, final Class> value) { - super(type(), holder, value); + super(type(), value, EventTypeOrigin.ANNOTATED_OBJECT, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java index 2213468effd..6ec57b46109 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -38,7 +38,7 @@ private static Class type() { public CollectionDomainEventDefaultFacetForDomainObjectAnnotation( final FacetHolder holder, final Class> value) { - super(type(), holder, value); + super(type(), value, EventTypeOrigin.ANNOTATED_OBJECT, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java index 7820dbb5bea..2bf356fc386 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -38,7 +38,7 @@ private static Class type() { public PropertyDomainEventDefaultFacetForDomainObjectAnnotation( final FacetHolder holder, final Class> value) { - super(type(), holder, value); + super(type(), value, EventTypeOrigin.ANNOTATED_OBJECT, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java index 5a6d9930fc3..8657c9fc7da 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java @@ -29,6 +29,7 @@ import org.apache.causeway.applib.mixins.system.HasInteractionId; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FeatureType; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet.Contributing; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract; @@ -47,9 +48,7 @@ import org.apache.causeway.core.metamodel.facets.properties.property.maxlength.MaxLengthFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromDefault; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromPropertyAnnotation; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetAbstract; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetDefault; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetForPropertyAnnotation; +import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation; @@ -139,11 +138,12 @@ void processModify(final ProcessMethodContext processMethodContext, final Option val propertyDomainEventFacet = propertyIfAny .map(Property::domainEvent) .filter(domainEvent -> domainEvent != PropertyDomainEvent.Default.class) - .map(domainEvent -> (PropertyDomainEventFacetAbstract) new PropertyDomainEventFacetForPropertyAnnotation( - defaultFromDomainObjectIfRequired(typeSpec, domainEvent), getterFacet, holder)) - .orElse(new PropertyDomainEventFacetDefault( - defaultFromDomainObjectIfRequired(typeSpec, PropertyDomainEvent.Default.class), getterFacet, - holder)); + .map(domainEvent -> new PropertyDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, domainEvent), + EventTypeOrigin.ANNOTATED_MEMBER, getterFacet, holder)) + .orElse(new PropertyDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, PropertyDomainEvent.Default.class), + EventTypeOrigin.DEFAULT, getterFacet, holder)); if(EventUtil.eventTypeIsPostable( propertyDomainEventFacet.getEventType(), @@ -165,7 +165,7 @@ void processModify(final ProcessMethodContext processMethodContext, final Option // the current setter facet will end up as the underlying facet final PropertySetterFacet replacementFacet; - if(propertyDomainEventFacet instanceof PropertyDomainEventFacetForPropertyAnnotation) { + if(propertyDomainEventFacet.getEventTypeOrigin().isAnnotatedMember()) { replacementFacet = new PropertySetterFacetForDomainEventFromPropertyAnnotation( propertyDomainEventFacet.getEventType(), getterFacet, setterFacet, propertyDomainEventFacet, holder); } else @@ -182,7 +182,7 @@ void processModify(final ProcessMethodContext processMethodContext, final Option // the current clear facet will end up as the underlying facet final PropertyClearFacet replacementFacet; - if(propertyDomainEventFacet instanceof PropertyDomainEventFacetForPropertyAnnotation) { + if(propertyDomainEventFacet.getEventTypeOrigin().isAnnotatedMember()) { replacementFacet = new PropertyClearFacetForDomainEventFromPropertyAnnotation( propertyDomainEventFacet.getEventType(), getterFacet, clearFacet, propertyDomainEventFacet, holder); } else diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java index 4d011ed387a..645160f5c47 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java @@ -32,7 +32,7 @@ public PropertyClearFacetForDomainEventFromDefault( final Class> eventType, final PropertyOrCollectionAccessorFacet getterFacet, final PropertyClearFacet clearFacet, - final PropertyDomainEventFacetAbstract propertyInteractionFacet, + final PropertyDomainEventFacet propertyInteractionFacet, final FacetHolder holder) { super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, holder); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java index 57890d7765b..0e0c5df79b2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java @@ -32,7 +32,7 @@ public PropertyClearFacetForDomainEventFromPropertyAnnotation( final Class> eventType, final PropertyOrCollectionAccessorFacet getterFacet, final PropertyClearFacet clearFacet, - final PropertyDomainEventFacetAbstract propertyInteractionFacet, + final PropertyDomainEventFacet propertyInteractionFacet, final FacetHolder holder) { super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, holder); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java index 0a962bd89ed..73d41f510ec 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java @@ -18,14 +18,138 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property.modify; +import java.util.Optional; +import java.util.function.BiConsumer; + +import org.apache.causeway.applib.events.domain.AbstractDomainEvent; +import org.apache.causeway.applib.events.domain.PropertyDomainEvent; +import org.apache.causeway.applib.services.i18n.TranslatableString; +import org.apache.causeway.applib.services.i18n.TranslationContext; +import org.apache.causeway.applib.services.i18n.TranslationService; +import org.apache.causeway.commons.internal.base._Casts; +import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; +import org.apache.causeway.core.metamodel.facets.DomainEventHelper; +import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; +import org.apache.causeway.core.metamodel.interactions.ProposedHolder; +import org.apache.causeway.core.metamodel.interactions.UsabilityContext; import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvisor; +import org.apache.causeway.core.metamodel.interactions.ValidityContext; +import org.apache.causeway.core.metamodel.interactions.VisibilityContext; +import org.apache.causeway.core.metamodel.object.ManagedObject; +import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; -/** - * Corresponds to @Property(domainEvent=...) annotation in the Causeway programming model. - */ -public interface PropertyDomainEventFacet -extends HidingInteractionAdvisor, DisablingInteractionAdvisor, ValidatingInteractionAdvisor { +public class PropertyDomainEventFacet +extends DomainEventFacetAbstract> +implements + HidingInteractionAdvisor, + DisablingInteractionAdvisor, + ValidatingInteractionAdvisor { + + private final DomainEventHelper domainEventHelper; + + private final PropertyOrCollectionAccessorFacet getterFacetIfAny; + private final TranslationService translationService; + private final TranslationContext translationContext; + + /** + * @param getterFacetIfAny - will be null if this is for a mixin {@link OneToOneAssociationMixedIn}. + */ + public PropertyDomainEventFacet( + final Class> eventType, + final EventTypeOrigin eventTypeOrigin, + final PropertyOrCollectionAccessorFacet getterFacetIfAny, + final FacetHolder holder ) { + + super(PropertyDomainEventFacet.class, eventType, eventTypeOrigin, holder); + this.getterFacetIfAny = getterFacetIfAny; + + this.translationService = getTranslationService(); + this.translationContext = holder.getTranslationContext(); + + domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); + } + + @Override + public String hides(final VisibilityContext ic) { + + final PropertyDomainEvent event = + domainEventHelper.postEventForProperty( + AbstractDomainEvent.Phase.HIDE, + _Casts.uncheckedCast(getEventType()), null, + getFacetHolder(), ic.getHead(), + null, null); + if (event != null && event.isHidden()) { + return "Hidden by subscriber"; + } + return null; + } + + @Override + public Optional disables(final UsabilityContext ic) { + + final PropertyDomainEvent event = + domainEventHelper.postEventForProperty( + AbstractDomainEvent.Phase.DISABLE, + _Casts.uncheckedCast(getEventType()), null, + getFacetHolder(), ic.getHead(), + null, null); + if (event != null + && event.isDisabled()) { + + final TranslatableString reasonTranslatable = event.getDisabledReasonTranslatable(); + final String reasonString = reasonTranslatable != null + ? reasonTranslatable.translate(translationService, translationContext) + : event.getDisabledReason(); + + return Optional.ofNullable(reasonString) + .map(VetoReason::explicit); + } + return Optional.empty(); + } + + @Override + public String invalidates(final ValidityContext ic) { + + if(getterFacetIfAny == null) { + return null; + } + + // if this is a mixin, then this ain't true. + if(!(ic instanceof ProposedHolder)) { + return null; + } + final ProposedHolder ph = (ProposedHolder) ic; + + final Object oldValue = getterFacetIfAny.getProperty(ic.getTarget(), ic.getInitiatedBy()); + final ManagedObject proposedAdapter = ph.getProposed(); + final Object proposedValue = proposedAdapter != null ? proposedAdapter.getPojo() : null; + + final PropertyDomainEvent event = + domainEventHelper.postEventForProperty( + AbstractDomainEvent.Phase.VALIDATE, + _Casts.uncheckedCast(getEventType()), null, + getFacetHolder(), ic.getHead(), + oldValue, proposedValue); + if (event != null && event.isInvalid()) { + final TranslatableString reasonTranslatable = event.getInvalidityReasonTranslatable(); + if(reasonTranslatable != null) { + return reasonTranslatable.translate(translationService, translationContext); + } + return event.getInvalidityReason(); + } + + return null; + } + + + @Override + public void visitAttributes(final BiConsumer visitor) { + super.visitAttributes(visitor); + visitor.accept("getterFacet", getterFacetIfAny); + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java deleted file mode 100644 index 9bd94b6427c..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.properties.property.modify; - -import java.util.Optional; -import java.util.function.BiConsumer; - -import org.apache.causeway.applib.events.domain.AbstractDomainEvent; -import org.apache.causeway.applib.events.domain.PropertyDomainEvent; -import org.apache.causeway.applib.services.i18n.TranslatableString; -import org.apache.causeway.applib.services.i18n.TranslationContext; -import org.apache.causeway.applib.services.i18n.TranslationService; -import org.apache.causeway.commons.internal.base._Casts; -import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; -import org.apache.causeway.core.metamodel.facets.DomainEventHelper; -import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; -import org.apache.causeway.core.metamodel.interactions.ProposedHolder; -import org.apache.causeway.core.metamodel.interactions.UsabilityContext; -import org.apache.causeway.core.metamodel.interactions.ValidityContext; -import org.apache.causeway.core.metamodel.interactions.VisibilityContext; -import org.apache.causeway.core.metamodel.object.ManagedObject; -import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; - -public abstract class PropertyDomainEventFacetAbstract -extends DomainEventFacetAbstract> -implements PropertyDomainEventFacet { - - private final DomainEventHelper domainEventHelper; - - private final PropertyOrCollectionAccessorFacet getterFacetIfAny; - private final TranslationService translationService; - private final TranslationContext translationContext; - - /** - * @param getterFacetIfAny - will be null if this is for a mixin {@link OneToOneAssociationMixedIn}. - */ - public PropertyDomainEventFacetAbstract( - final Class> eventType, - final PropertyOrCollectionAccessorFacet getterFacetIfAny, - final FacetHolder holder ) { - - super(PropertyDomainEventFacet.class, holder, eventType); - this.getterFacetIfAny = getterFacetIfAny; - - this.translationService = getTranslationService(); - this.translationContext = holder.getTranslationContext(); - - domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); - } - -// private Class> eventType; -// -// /** -// * Can be overwritten if this facet is on a mixin where the subject (mixedInType) is annotated with -// * {@link DomainObject#propertyDomainEvent()}. -// */ -// public void setEventType(final Class> eventType) { -// this.eventType = eventType; -// } - - @Override - public String hides(final VisibilityContext ic) { - - final PropertyDomainEvent event = - domainEventHelper.postEventForProperty( - AbstractDomainEvent.Phase.HIDE, - _Casts.uncheckedCast(getEventType()), null, - getFacetHolder(), ic.getHead(), - null, null); - if (event != null && event.isHidden()) { - return "Hidden by subscriber"; - } - return null; - } - - @Override - public Optional disables(final UsabilityContext ic) { - - final PropertyDomainEvent event = - domainEventHelper.postEventForProperty( - AbstractDomainEvent.Phase.DISABLE, - _Casts.uncheckedCast(getEventType()), null, - getFacetHolder(), ic.getHead(), - null, null); - if (event != null - && event.isDisabled()) { - - final TranslatableString reasonTranslatable = event.getDisabledReasonTranslatable(); - final String reasonString = reasonTranslatable != null - ? reasonTranslatable.translate(translationService, translationContext) - : event.getDisabledReason(); - - return Optional.ofNullable(reasonString) - .map(VetoReason::explicit); - } - return Optional.empty(); - } - - @Override - public String invalidates(final ValidityContext ic) { - - if(getterFacetIfAny == null) { - return null; - } - - // if this is a mixin, then this ain't true. - if(!(ic instanceof ProposedHolder)) { - return null; - } - final ProposedHolder ph = (ProposedHolder) ic; - - final Object oldValue = getterFacetIfAny.getProperty(ic.getTarget(), ic.getInitiatedBy()); - final ManagedObject proposedAdapter = ph.getProposed(); - final Object proposedValue = proposedAdapter != null ? proposedAdapter.getPojo() : null; - - final PropertyDomainEvent event = - domainEventHelper.postEventForProperty( - AbstractDomainEvent.Phase.VALIDATE, - _Casts.uncheckedCast(getEventType()), null, - getFacetHolder(), ic.getHead(), - oldValue, proposedValue); - if (event != null && event.isInvalid()) { - final TranslatableString reasonTranslatable = event.getInvalidityReasonTranslatable(); - if(reasonTranslatable != null) { - return reasonTranslatable.translate(translationService, translationContext); - } - return event.getInvalidityReason(); - } - - return null; - } - - - @Override - public void visitAttributes(final BiConsumer visitor) { - super.visitAttributes(visitor); - visitor.accept("getterFacet", getterFacetIfAny); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetDefault.java deleted file mode 100644 index 345f66ed08e..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetDefault.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.properties.property.modify; - -import org.apache.causeway.applib.events.domain.PropertyDomainEvent; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; -import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; - -public class PropertyDomainEventFacetDefault extends PropertyDomainEventFacetAbstract { - - /** - * @param getterFacetIfAny - will be null if this is for a mixin {@link OneToOneAssociationMixedIn}. - */ - public PropertyDomainEventFacetDefault( - final Class> eventType, - final PropertyOrCollectionAccessorFacet getterFacetIfAny, - final FacetHolder holder) { - - super(eventType, getterFacetIfAny, holder); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetForPropertyAnnotation.java deleted file mode 100644 index 1979de2be9f..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetForPropertyAnnotation.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.properties.property.modify; - -import org.apache.causeway.applib.events.domain.PropertyDomainEvent; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; -import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; - -public class PropertyDomainEventFacetForPropertyAnnotation extends PropertyDomainEventFacetAbstract { - - /** - * @param getterFacetIfAny - will be null if this is for a mixin {@link OneToOneAssociationMixedIn}. - */ - public PropertyDomainEventFacetForPropertyAnnotation( - final Class> eventType, - final PropertyOrCollectionAccessorFacet getterFacetIfAny, - final FacetHolder holder) { - super(eventType, getterFacetIfAny, holder); - } - - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java index 5aea1911ea0..2918377da77 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java @@ -32,7 +32,7 @@ public PropertySetterFacetForDomainEventFromDefault( final Class> eventType, final PropertyOrCollectionAccessorFacet getterFacet, final PropertySetterFacet setterFacet, - final PropertyDomainEventFacetAbstract propertyInteractionFacet, + final PropertyDomainEventFacet propertyInteractionFacet, final FacetHolder holder) { super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, holder); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java index 4103cecf755..9e9218ed459 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java @@ -32,7 +32,7 @@ public PropertySetterFacetForDomainEventFromPropertyAnnotation( final Class> eventType, final PropertyOrCollectionAccessorFacet getterFacet, final PropertySetterFacet setterFacet, - final PropertyDomainEventFacetAbstract propertyInteractionFacet, + final PropertyDomainEventFacet propertyInteractionFacet, final FacetHolder holder) { super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, holder); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java index f57830b7e5d..4e634e08cdd 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java @@ -65,7 +65,7 @@ protected PropertySetterOrClearFacetForDomainEventAbstract( final PropertyOrCollectionAccessorFacet getterFacet, final PropertySetterFacet setterFacet, final PropertyClearFacet clearFacet, - final PropertyDomainEventFacetAbstract propertyDomainEventFacet, + final PropertyDomainEventFacet propertyDomainEventFacet, final FacetHolder holder) { super(facetType, eventType, holder); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java index f2a12f74e47..d8e03f77182 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java @@ -31,12 +31,11 @@ import org.apache.causeway.commons.internal.reflection._Annotations; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetUtil; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.collections.collection.CollectionAnnotationFacetFactory; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetForCollectionAnnotation; import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.ActionDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.CollectionDomainEventDefaultFacetForDomainObjectAnnotation; @@ -44,8 +43,6 @@ import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.facets.properties.property.PropertyAnnotationFacetFactory; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetAbstract; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.postprocessors.ObjectSpecificationPostProcessorAbstract; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; @@ -72,13 +69,13 @@ public void postProcessAction(final ObjectSpecification objectSpecification, fin objectSpecification.lookupFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class) .ifPresent(actionDomainEventDefaultFacet->{ _Casts.castTo( - ActionDomainEventFacetAbstract.class, + ActionDomainEventFacet.class, objectAction.getFacet(ActionDomainEventFacet.class)) .filter(actionDomainEventFacetAbstract-> - actionDomainEventFacetAbstract.getEventType() == ActionDomainEvent.Default.class) - .ifPresent(actionDomainEventFacetAbstract->{ - //FIXME[CAUSEWAY-3409] - //actionDomainEventFacetAbstract.setEventType(actionDomainEventDefaultFacet.getEventType()); + actionDomainEventFacetAbstract.getEventType() != ActionDomainEvent.Default.class) + .ifPresent(existing->{ + //FIXME[CAUSEWAY-3409] code smell + existing.updateEventType(actionDomainEventDefaultFacet.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); }); }); } @@ -106,20 +103,20 @@ public void postProcessProperty(final ObjectSpecification objectSpecification, f objectSpecification, propertyAnnot.domainEvent()); final PropertyOrCollectionAccessorFacet getterFacetIfAny = null; FacetUtil.addFacet( - new PropertyDomainEventFacetForPropertyAnnotation( - propertyDomainEventType, getterFacetIfAny, property)); + new PropertyDomainEventFacet( + propertyDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, getterFacetIfAny, property)); } } final PropertyDomainEventDefaultFacetForDomainObjectAnnotation propertyDomainEventDefaultFacet = objectSpecification.getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class); if(propertyDomainEventDefaultFacet != null) { final PropertyDomainEventFacet propertyFacet = property.getFacet(PropertyDomainEventFacet.class); - if (propertyFacet instanceof PropertyDomainEventFacetAbstract) { - final PropertyDomainEventFacetAbstract facetAbstract = (PropertyDomainEventFacetAbstract) propertyFacet; + if (propertyFacet instanceof PropertyDomainEventFacet) { + final PropertyDomainEventFacet facetAbstract = propertyFacet; if (facetAbstract.getEventType() == PropertyDomainEvent.Default.class) { - final PropertyDomainEventFacetAbstract existing = (PropertyDomainEventFacetAbstract) propertyFacet; - //FIXME[CAUSEWAY-3409] - //existing.setEventType(propertyDomainEventDefaultFacet.getEventType()); + final PropertyDomainEventFacet existing = propertyFacet; + //FIXME[CAUSEWAY-3409] code smell + existing.updateEventType(propertyDomainEventDefaultFacet.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); } } } @@ -155,12 +152,12 @@ public void postProcessCollection(final ObjectSpecification objectSpecification, objectSpecification.getFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class); if(collectionDomainEventDefaultFacet != null) { final CollectionDomainEventFacet collectionFacet = collection.getFacet(CollectionDomainEventFacet.class); - if (collectionFacet instanceof CollectionDomainEventFacetAbstract) { - final CollectionDomainEventFacetAbstract facetAbstract = (CollectionDomainEventFacetAbstract) collectionFacet; + if (collectionFacet instanceof CollectionDomainEventFacet) { + final CollectionDomainEventFacet facetAbstract = collectionFacet; if (facetAbstract.getEventType() == CollectionDomainEvent.Default.class) { - final CollectionDomainEventFacetAbstract existing = (CollectionDomainEventFacetAbstract) collectionFacet; - //FIXME[CAUSEWAY-3409] - //existing.setEventType(collectionDomainEventDefaultFacet.getEventType()); + final CollectionDomainEventFacet existing = collectionFacet; + //FIXME[CAUSEWAY-3409] code smell + existing.updateEventType(collectionDomainEventDefaultFacet.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); } } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java index 90d1c062375..0ddedc08276 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java @@ -29,9 +29,6 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetAbstract; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetDefault; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromDefault; @@ -79,8 +76,8 @@ public void someAction() { // then final ActionDomainEventFacet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof ActionDomainEventFacetAbstract); - final ActionDomainEventFacetAbstract domainEventFacetImpl = (ActionDomainEventFacetAbstract) domainEventFacet; + assertTrue(domainEventFacet instanceof ActionDomainEventFacet); + final ActionDomainEventFacet domainEventFacetImpl = domainEventFacet; assertThat(domainEventFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); @@ -117,9 +114,9 @@ public void someAction() { // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof ActionDomainEventFacetForActionAnnotation); - final ActionDomainEventFacetForActionAnnotation domainEventFacetImpl = - (ActionDomainEventFacetForActionAnnotation) domainEventFacet; + assertTrue(domainEventFacet instanceof ActionDomainEventFacet); + final ActionDomainEventFacet domainEventFacetImpl = (ActionDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); assertThat(domainEventFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); @@ -158,8 +155,9 @@ public void someAction() { // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof ActionDomainEventFacetForActionAnnotation); - final ActionDomainEventFacetForActionAnnotation domainEventFacetImpl = (ActionDomainEventFacetForActionAnnotation) domainEventFacet; + assertTrue(domainEventFacet instanceof ActionDomainEventFacet); + final ActionDomainEventFacet domainEventFacetImpl = (ActionDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); assertThat(domainEventFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); @@ -196,8 +194,9 @@ public void someAction() { // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof ActionDomainEventFacetDefault); - final ActionDomainEventFacetDefault domainEventFacetImpl = (ActionDomainEventFacetDefault) domainEventFacet; + assertTrue(domainEventFacet instanceof ActionDomainEventFacet); + final ActionDomainEventFacet domainEventFacetImpl = (ActionDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isDefault()); assertThat(domainEventFacetImpl.getEventType(), classEqualTo(ActionDomainEvent.Default.class)); final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java index dea0d8c5ded..aed7c85b9bd 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java @@ -68,8 +68,6 @@ import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromDefault; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetDefault; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation; @@ -230,9 +228,10 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {} // then final PropertyDomainEventFacet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof PropertyDomainEventFacetForPropertyAnnotation); - final PropertyDomainEventFacetForPropertyAnnotation domainEventFacetDefault = (PropertyDomainEventFacetForPropertyAnnotation) domainEventFacet; - assertThat(domainEventFacetDefault.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); + final PropertyDomainEventFacet domainEventFacetImpl = domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); + assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); @@ -277,8 +276,9 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {} // then final Facet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof PropertyDomainEventFacetForPropertyAnnotation); - final PropertyDomainEventFacetForPropertyAnnotation domainEventFacetImpl = (PropertyDomainEventFacetForPropertyAnnotation) domainEventFacet; + assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); + final PropertyDomainEventFacet domainEventFacetImpl = (PropertyDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then @@ -324,8 +324,9 @@ class NamedChangedDomainEvent extends PropertyDomainEvent { // then final Facet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof PropertyDomainEventFacetForPropertyAnnotation); - final PropertyDomainEventFacetForPropertyAnnotation domainEventFacetImpl = (PropertyDomainEventFacetForPropertyAnnotation) domainEventFacet; + assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); + final PropertyDomainEventFacet domainEventFacetImpl = (PropertyDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); MatcherAssert.assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then @@ -371,8 +372,9 @@ class Customer { // then final Facet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof PropertyDomainEventFacetDefault); - final PropertyDomainEventFacetDefault domainEventFacetImpl = (PropertyDomainEventFacetDefault) domainEventFacet; + assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); + final PropertyDomainEventFacet domainEventFacetImpl = (PropertyDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isDefault()); assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); // then From 268779c2d40db91ada514f2424c69694792eec2f Mon Sep 17 00:00:00 2001 From: andi-huber Date: Sun, 16 Apr 2023 08:36:44 +0200 Subject: [PATCH 03/37] CAUSEWAY-3409: test approvals --- ...sViewer_IntegTest.dump_facets.approved.xml | 49 +- ...wer_IntegTest.dump_facets.approved.xml.bak | 1125 +++++++++++++++++ ...nDomain_IntegTest.dump_facets.approved.xml | 49 +- ...ain_IntegTest.dump_facets.approved.xml.bak | 1111 ++++++++++++++++ ...sViewer_IntegTest.dump_facets.approved.xml | 42 +- ...wer_IntegTest.dump_facets.approved.xml.bak | 919 ++++++++++++++ ...pDomain_IntegTest.dump_facets.approved.xml | 42 +- ...ain_IntegTest.dump_facets.approved.xml.bak | 912 +++++++++++++ 8 files changed, 4171 insertions(+), 78 deletions(-) create mode 100644 extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml.bak create mode 100644 extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml.bak create mode 100644 extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml.bak create mode 100644 extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml.bak diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml index e7516cfb068..78c87db6ac5 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml @@ -108,11 +108,12 @@ - - + + + + - @@ -208,11 +209,12 @@ - - + + + + - @@ -461,11 +463,12 @@ - - + + + + - @@ -617,11 +620,12 @@ - - + + + + - @@ -720,11 +724,12 @@ - - + + + + - @@ -823,11 +828,12 @@ - - + + + + - @@ -1028,11 +1034,12 @@ - - + + + + - diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml.bak b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml.bak new file mode 100644 index 00000000000..e7516cfb068 --- /dev/null +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml.bak @@ -0,0 +1,1125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.Blob + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.String + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.services.layout.LayoutExportStyle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.String + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.LocalResourcePath + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.Blob + + + + + \ No newline at end of file diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml index ee91db967cd..766895b30df 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml @@ -108,11 +108,12 @@ - - + + + + - @@ -201,11 +202,12 @@ - - + + + + - @@ -454,11 +456,12 @@ - - + + + + - @@ -610,11 +613,12 @@ - - + + + + - @@ -713,11 +717,12 @@ - - + + + + - @@ -816,11 +821,12 @@ - - + + + + - @@ -1021,11 +1027,12 @@ - - + + + + - diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml.bak b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml.bak new file mode 100644 index 00000000000..ee91db967cd --- /dev/null +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml.bak @@ -0,0 +1,1111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.Blob + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.String + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.services.layout.LayoutExportStyle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.String + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.LocalResourcePath + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.Blob + + + + + \ No newline at end of file diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml index 448433c9546..aa54f1065b1 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml @@ -166,12 +166,13 @@ - - + + + + - @@ -202,11 +203,12 @@ - - + + + + - @@ -455,11 +457,12 @@ - - + + + + - @@ -611,11 +614,12 @@ - - + + + + - @@ -714,11 +718,12 @@ - - + + + + - @@ -817,11 +822,12 @@ - - + + + + - diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml.bak b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml.bak new file mode 100644 index 00000000000..448433c9546 --- /dev/null +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml.bak @@ -0,0 +1,919 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.Blob + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.String + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.services.layout.LayoutExportStyle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.String + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.LocalResourcePath + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + \ No newline at end of file diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml index f0de323ffdb..fae4448a007 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml @@ -166,12 +166,13 @@ - - + + + + - @@ -195,11 +196,12 @@ - - + + + + - @@ -448,11 +450,12 @@ - - + + + + - @@ -604,11 +607,12 @@ - - + + + + - @@ -707,11 +711,12 @@ - - + + + + - @@ -810,11 +815,12 @@ - - + + + + - diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml.bak b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml.bak new file mode 100644 index 00000000000..f0de323ffdb --- /dev/null +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml.bak @@ -0,0 +1,912 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.Blob + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.String + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.services.layout.LayoutExportStyle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.String + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.causeway.applib.value.LocalResourcePath + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Object + + + + + \ No newline at end of file From 3a63024fbdc4ceed58fa4fd0cec58db37dd6e6f0 Mon Sep 17 00:00:00 2001 From: andi-huber Date: Sun, 16 Apr 2023 09:00:53 +0200 Subject: [PATCH 04/37] CAUSEWAY-3409: further simplify hierarchy of DomainEventFacetAbstract (coll) --- .../CollectionAnnotationFacetFactory.java | 14 +++--- .../CollectionDomainEventFacetDefault.java | 31 ------------- ...mainEventFacetForCollectionAnnotation.java | 45 ------------------- ...weakDomainEventsForMixinPostProcessor.java | 5 +-- 4 files changed, 9 insertions(+), 86 deletions(-) delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetDefault.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetForCollectionAnnotation.java diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java index f5963da10d5..5e09b081769 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java @@ -28,6 +28,7 @@ import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FeatureType; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet.Contributing; @@ -35,8 +36,6 @@ import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract; import org.apache.causeway.core.metamodel.facets.collections.collection.hidden.HiddenFacetForCollectionAnnotation; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetDefault; -import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetForCollectionAnnotation; import org.apache.causeway.core.metamodel.facets.collections.collection.typeof.TypeOfFacetForCollectionAnnotation; import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.CollectionDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; @@ -111,12 +110,13 @@ void processModify(final ProcessMethodContext processMethodContext, final Option .map(Collection::domainEvent) .filter(domainEvent -> domainEvent != CollectionDomainEvent.Default.class) .map(domainEvent -> - (CollectionDomainEventFacet) - new CollectionDomainEventFacetForCollectionAnnotation( - defaultFromDomainObjectIfRequired(typeSpec, domainEvent), holder)) + new CollectionDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, domainEvent), + EventTypeOrigin.ANNOTATED_MEMBER, holder)) .orElse( - new CollectionDomainEventFacetDefault( - defaultFromDomainObjectIfRequired(typeSpec, CollectionDomainEvent.Default.class), holder)); + new CollectionDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, CollectionDomainEvent.Default.class), + EventTypeOrigin.DEFAULT, holder)); if(!CollectionDomainEvent.Noop.class.isAssignableFrom(collectionDomainEventFacet.getEventType())) { addFacet(collectionDomainEventFacet); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetDefault.java deleted file mode 100644 index 2fff17743d2..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetDefault.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.collections.collection.modify; - -import org.apache.causeway.applib.events.domain.CollectionDomainEvent; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; - -public class CollectionDomainEventFacetDefault extends CollectionDomainEventFacet { - - public CollectionDomainEventFacetDefault( - final Class> eventType, final FacetHolder holder) { - super(eventType, EventTypeOrigin.DEFAULT, holder); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetForCollectionAnnotation.java deleted file mode 100644 index 3c94a800c67..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetForCollectionAnnotation.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.collections.collection.modify; - -import org.apache.causeway.applib.annotation.Collection; -import org.apache.causeway.applib.events.domain.CollectionDomainEvent; -import org.apache.causeway.applib.services.inject.ServiceInjector; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; - -public class CollectionDomainEventFacetForCollectionAnnotation -extends CollectionDomainEventFacet { - - static CollectionDomainEventFacet create( - final Collection collection, - final ServiceInjector servicesInjector, - final SpecificationLoader specificationLoader, - final FacetHolder holder) { - Class> collectionInteractionEventType = collection.domainEvent(); - return new CollectionDomainEventFacetForCollectionAnnotation( - collectionInteractionEventType, holder); - } - - public CollectionDomainEventFacetForCollectionAnnotation( - final Class> eventType, final FacetHolder holder) { - super(eventType, EventTypeOrigin.ANNOTATED_MEMBER, holder); - } - -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java index d8e03f77182..806230bb166 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java @@ -36,7 +36,6 @@ import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; import org.apache.causeway.core.metamodel.facets.collections.collection.CollectionAnnotationFacetFactory; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetForCollectionAnnotation; import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.ActionDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.CollectionDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.PropertyDomainEventDefaultFacetForDomainObjectAnnotation; @@ -144,8 +143,8 @@ public void postProcessCollection(final ObjectSpecification objectSpecification, CollectionAnnotationFacetFactory.defaultFromDomainObjectIfRequired( objectSpecification, collectionAnnot.domainEvent()); FacetUtil.addFacet( - new CollectionDomainEventFacetForCollectionAnnotation( - collectionDomainEventType, collection)); + new CollectionDomainEventFacet( + collectionDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, collection)); } final CollectionDomainEventDefaultFacetForDomainObjectAnnotation collectionDomainEventDefaultFacet = From 0309ee75d7c0468bacdcb50fa758cbc16741bd11 Mon Sep 17 00:00:00 2001 From: andi-huber Date: Sun, 16 Apr 2023 09:56:03 +0200 Subject: [PATCH 05/37] CAUSEWAY-3409: refactor the DomainEventFacetAbstract such, that it can receive the actual mixee during MM postprocessing and in turn hold the correct event-type (which for mixed in members might need to be looked up on the mixee type) --- .../facets/DomainEventFacetAbstract.java | 4 +- .../invocation/ActionDomainEventFacet.java | 24 +- .../modify/CollectionDomainEventFacet.java | 25 +- .../modify/PropertyDomainEventFacet.java | 24 +- ...weakDomainEventsForMixinPostProcessor.java | 61 +- ...etaModelRegressionTest.verify.approved.xml | 1435 ++++++++++------- 6 files changed, 906 insertions(+), 667 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java index 7ec25bb3f23..885fa9a4458 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java @@ -62,8 +62,8 @@ public final EventTypeOrigin getEventTypeOrigin() { return eventTypeOrigin; } - /** called by meta-model post-processors only */ - public final void updateEventType( + /** called during meta-model post-processing only */ + protected final void updateEventType( final Class eventType, final EventTypeOrigin eventTypeOrigin) { this.eventType = eventType; diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java index 6a4f28c0874..6517817982b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java @@ -28,9 +28,11 @@ import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; +import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.DomainEventHelper; +import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.ActionDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.interactions.ActionInteractionContext; import org.apache.causeway.core.metamodel.interactions.ActionValidityContext; import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor; @@ -40,6 +42,7 @@ import org.apache.causeway.core.metamodel.interactions.ValidatingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.ValidityContext; import org.apache.causeway.core.metamodel.interactions.VisibilityContext; +import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; public class ActionDomainEventFacet @@ -49,6 +52,10 @@ public class ActionDomainEventFacet DisablingInteractionAdvisor, ValidatingInteractionAdvisor { + private static Class type() { + return ActionDomainEventFacet.class; + } + private final TranslationService translationService; private final TranslationContext translationContext; private final DomainEventHelper domainEventHelper; @@ -58,7 +65,7 @@ public ActionDomainEventFacet( final EventTypeOrigin eventTypeOrigin, final FacetHolder holder) { - super(ActionDomainEventFacet.class, eventType, eventTypeOrigin, holder); + super(type(), eventType, eventTypeOrigin, holder); this.translationService = getTranslationService(); this.translationContext = holder.getTranslationContext(); @@ -66,6 +73,21 @@ public ActionDomainEventFacet( domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } + /** + * Called by meta-model post-processors, to honor domain object annotations on mixees. + * (required only, if this facet belongs to a mixed-in member) + */ + public void initWithMixee(final ObjectSpecification mixeeSpec) { + mixeeSpec + .lookupFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class) + .ifPresent(facetOnMixee->{ + if(facetOnMixee.getEventType() != ActionDomainEvent.Default.class + && getEventTypeOrigin().isDefault()) { + super.updateEventType(facetOnMixee.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); + } + }); + } + @Override public String hides(final VisibilityContext ic) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java index ec3f9577c45..ab6fa8a4d6b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java @@ -21,27 +21,48 @@ import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.commons.internal.base._Casts; +import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.DomainEventHelper; +import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.CollectionDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.VisibilityContext; +import org.apache.causeway.core.metamodel.spec.ObjectSpecification; public class CollectionDomainEventFacet extends DomainEventFacetAbstract> implements HidingInteractionAdvisor { + private static Class type() { + return CollectionDomainEventFacet.class; + } + private final DomainEventHelper domainEventHelper; public CollectionDomainEventFacet( final Class> eventType, final EventTypeOrigin eventTypeOrigin, final FacetHolder holder) { - - super(CollectionDomainEventFacet.class, eventType, eventTypeOrigin, holder); + super(type(), eventType, eventTypeOrigin, holder); domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } + /** + * Called by meta-model post-processors, to honor domain object annotations on mixees. + * (required only, if this facet belongs to a mixed-in member) + */ + public void initWithMixee(final ObjectSpecification mixeeSpec) { + mixeeSpec + .lookupFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class) + .ifPresent(facetOnMixee->{ + if(facetOnMixee.getEventType() != CollectionDomainEvent.Default.class + && getEventTypeOrigin().isDefault()) { + super.updateEventType(facetOnMixee.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); + } + }); + } + @Override public String hides(final VisibilityContext ic) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java index 73d41f510ec..00ce49e82f9 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java @@ -28,9 +28,11 @@ import org.apache.causeway.applib.services.i18n.TranslationService; import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; +import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.DomainEventHelper; +import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.PropertyDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.interactions.DisablingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; @@ -40,6 +42,7 @@ import org.apache.causeway.core.metamodel.interactions.ValidityContext; import org.apache.causeway.core.metamodel.interactions.VisibilityContext; import org.apache.causeway.core.metamodel.object.ManagedObject; +import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; public class PropertyDomainEventFacet @@ -49,6 +52,10 @@ public class PropertyDomainEventFacet DisablingInteractionAdvisor, ValidatingInteractionAdvisor { + private static Class type() { + return PropertyDomainEventFacet.class; + } + private final DomainEventHelper domainEventHelper; private final PropertyOrCollectionAccessorFacet getterFacetIfAny; @@ -64,7 +71,7 @@ public PropertyDomainEventFacet( final PropertyOrCollectionAccessorFacet getterFacetIfAny, final FacetHolder holder ) { - super(PropertyDomainEventFacet.class, eventType, eventTypeOrigin, holder); + super(type(), eventType, eventTypeOrigin, holder); this.getterFacetIfAny = getterFacetIfAny; this.translationService = getTranslationService(); @@ -73,6 +80,21 @@ public PropertyDomainEventFacet( domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } + /** + * Called by meta-model post-processors, to honor domain object annotations on mixees. + * (required only, if this facet belongs to a mixed-in member) + */ + public void initWithMixee(final ObjectSpecification mixeeSpec) { + mixeeSpec + .lookupFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class) + .ifPresent(facetOnMixee->{ + if(facetOnMixee.getEventType() != PropertyDomainEvent.Default.class + && getEventTypeOrigin().isDefault()) { + super.updateEventType(facetOnMixee.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); + } + }); + } + @Override public String hides(final VisibilityContext ic) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java index 806230bb166..b88d5bdf9a5 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java @@ -24,10 +24,8 @@ import org.apache.causeway.applib.annotation.Collection; import org.apache.causeway.applib.annotation.Property; -import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.applib.events.domain.PropertyDomainEvent; -import org.apache.causeway.commons.internal.base._Casts; import org.apache.causeway.commons.internal.reflection._Annotations; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetUtil; @@ -36,9 +34,6 @@ import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; import org.apache.causeway.core.metamodel.facets.collections.collection.CollectionAnnotationFacetFactory; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.ActionDomainEventDefaultFacetForDomainObjectAnnotation; -import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.CollectionDomainEventDefaultFacetForDomainObjectAnnotation; -import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.PropertyDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.facets.properties.property.PropertyAnnotationFacetFactory; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet; @@ -60,23 +55,13 @@ public TweakDomainEventsForMixinPostProcessor(final MetaModelContext metaModelCo @Override public void postProcessAction(final ObjectSpecification objectSpecification, final ObjectAction objectAction) { - if(objectAction.isMixedIn()) { // unlike collection and property mixins, there is no need to create the DomainEventFacet, it will // have been created in the ActionAnnotationFacetFactory - - objectSpecification.lookupFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class) - .ifPresent(actionDomainEventDefaultFacet->{ - _Casts.castTo( - ActionDomainEventFacet.class, - objectAction.getFacet(ActionDomainEventFacet.class)) - .filter(actionDomainEventFacetAbstract-> - actionDomainEventFacetAbstract.getEventType() != ActionDomainEvent.Default.class) - .ifPresent(existing->{ - //FIXME[CAUSEWAY-3409] code smell - existing.updateEventType(actionDomainEventDefaultFacet.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); - }); - }); + objectAction + .lookupFacet(ActionDomainEventFacet.class) + .ifPresent(actionDomainEventFacet-> + actionDomainEventFacet.initWithMixee(objectSpecification)); } } @@ -106,19 +91,11 @@ public void postProcessProperty(final ObjectSpecification objectSpecification, f propertyDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, getterFacetIfAny, property)); } } - final PropertyDomainEventDefaultFacetForDomainObjectAnnotation propertyDomainEventDefaultFacet = - objectSpecification.getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class); - if(propertyDomainEventDefaultFacet != null) { - final PropertyDomainEventFacet propertyFacet = property.getFacet(PropertyDomainEventFacet.class); - if (propertyFacet instanceof PropertyDomainEventFacet) { - final PropertyDomainEventFacet facetAbstract = propertyFacet; - if (facetAbstract.getEventType() == PropertyDomainEvent.Default.class) { - final PropertyDomainEventFacet existing = propertyFacet; - //FIXME[CAUSEWAY-3409] code smell - existing.updateEventType(propertyDomainEventDefaultFacet.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); - } - } - } + + property + .lookupFacet(PropertyDomainEventFacet.class) + .ifPresent(propertyDomainEventFacet-> + propertyDomainEventFacet.initWithMixee(objectSpecification)); } } @@ -146,21 +123,13 @@ public void postProcessCollection(final ObjectSpecification objectSpecification, new CollectionDomainEventFacet( collectionDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, collection)); } - - final CollectionDomainEventDefaultFacetForDomainObjectAnnotation collectionDomainEventDefaultFacet = - objectSpecification.getFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class); - if(collectionDomainEventDefaultFacet != null) { - final CollectionDomainEventFacet collectionFacet = collection.getFacet(CollectionDomainEventFacet.class); - if (collectionFacet instanceof CollectionDomainEventFacet) { - final CollectionDomainEventFacet facetAbstract = collectionFacet; - if (facetAbstract.getEventType() == CollectionDomainEvent.Default.class) { - final CollectionDomainEventFacet existing = collectionFacet; - //FIXME[CAUSEWAY-3409] code smell - existing.updateEventType(collectionDomainEventDefaultFacet.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); - } - } - } } + + collection + .lookupFacet(CollectionDomainEventFacet.class) + .ifPresent(collectionDomainEventFacet-> + collectionDomainEventFacet.initWithMixee(objectSpecification)); + } } diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml index cad3c8b1851..738a027adeb 100644 --- a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml +++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml @@ -95,11 +95,12 @@ - - + + + + - @@ -189,11 +190,12 @@ - - + + + + - @@ -386,11 +388,12 @@ - - + + + + - @@ -520,11 +523,12 @@ - - + + + + - @@ -618,11 +622,12 @@ - - + + + + - @@ -716,11 +721,12 @@ - - + + + + - @@ -910,11 +916,12 @@ - - + + + + - @@ -1107,11 +1114,12 @@ - - + + + + - @@ -1241,11 +1249,12 @@ - - + + + + - @@ -1349,11 +1358,12 @@ - - + + + + - @@ -1447,11 +1457,12 @@ - - + + + + - @@ -1545,11 +1556,12 @@ - - + + + + - @@ -1643,11 +1655,12 @@ - - + + + + - @@ -1854,11 +1867,12 @@ - - + + + + - @@ -1899,11 +1913,12 @@ - - + + + + - @@ -2096,11 +2111,12 @@ - - + + + + - @@ -2230,11 +2246,12 @@ - - + + + + - @@ -2328,11 +2345,12 @@ - - + + + + - @@ -2426,11 +2444,12 @@ - - + + + + - @@ -2524,11 +2543,12 @@ - - + + + + - @@ -2724,11 +2744,12 @@ - - + + + + - @@ -2936,11 +2957,12 @@ - - + + + + - @@ -2981,11 +3003,12 @@ - - + + + + - @@ -3178,11 +3201,12 @@ - - + + + + - @@ -3312,11 +3336,12 @@ - - + + + + - @@ -3410,11 +3435,12 @@ - - + + + + - @@ -3508,11 +3534,12 @@ - - + + + + - @@ -3606,11 +3633,12 @@ - - + + + + - @@ -3812,11 +3840,12 @@ - - + + + + - @@ -4030,11 +4059,12 @@ - - + + + + - @@ -4087,11 +4117,12 @@ - - + + + + - @@ -4198,11 +4229,12 @@ - - + + + + - @@ -4395,11 +4427,12 @@ - - + + + + - @@ -4529,11 +4562,12 @@ - - + + + + - @@ -4627,11 +4661,12 @@ - - + + + + - @@ -4725,11 +4760,12 @@ - - + + + + - @@ -4926,11 +4962,12 @@ - - + + + + - @@ -4977,11 +5014,12 @@ - - + + + + - @@ -5028,11 +5066,12 @@ - - + + + + - @@ -5079,11 +5118,12 @@ - - + + + + - @@ -5130,11 +5170,12 @@ - - + + + + - @@ -5181,11 +5222,12 @@ - - + + + + - @@ -5232,11 +5274,12 @@ - - + + + + - @@ -5283,11 +5326,12 @@ - - + + + + - @@ -5334,11 +5378,12 @@ - - + + + + - @@ -5385,11 +5430,12 @@ - - + + + + - @@ -5430,11 +5476,12 @@ - - + + + + - @@ -5534,11 +5581,12 @@ - - + + + + - @@ -5731,11 +5779,12 @@ - - + + + + - @@ -5865,11 +5914,12 @@ - - + + + + - @@ -5963,11 +6013,12 @@ - - + + + + - @@ -6061,11 +6112,12 @@ - - + + + + - @@ -6319,12 +6371,13 @@ - - + + + + - @@ -6389,11 +6442,12 @@ - - + + + + - @@ -6438,11 +6492,12 @@ - - + + + + - @@ -6635,11 +6690,12 @@ - - + + + + - @@ -6769,11 +6825,12 @@ - - + + + + - @@ -6867,11 +6924,12 @@ - - + + + + - @@ -6965,11 +7023,12 @@ - - + + + + - @@ -7063,11 +7122,12 @@ - - + + + + - @@ -7266,12 +7326,13 @@ - - + + + + - @@ -7315,11 +7376,12 @@ - - + + + + - @@ -7512,11 +7574,12 @@ - - + + + + - @@ -7646,11 +7709,12 @@ - - + + + + - @@ -7744,11 +7808,12 @@ - - + + + + - @@ -7842,11 +7907,12 @@ - - + + + + - @@ -8082,12 +8148,13 @@ - - + + + + - @@ -8131,11 +8198,12 @@ - - + + + + - @@ -8328,11 +8396,12 @@ - - + + + + - @@ -8462,11 +8531,12 @@ - - + + + + - @@ -8560,11 +8630,12 @@ - - + + + + - @@ -8658,11 +8729,12 @@ - - + + + + - @@ -8916,12 +8988,13 @@ - - + + + + - @@ -9004,12 +9077,13 @@ - - + + + + - @@ -9074,11 +9148,12 @@ - - + + + + - @@ -9123,11 +9198,12 @@ - - + + + + - @@ -9320,11 +9396,12 @@ - - + + + + - @@ -9454,11 +9531,12 @@ - - + + + + - @@ -9552,11 +9630,12 @@ - - + + + + - @@ -9650,11 +9729,12 @@ - - + + + + - @@ -9748,11 +9828,12 @@ - - + + + + - @@ -9833,11 +9914,12 @@ - - + + + + - @@ -10078,12 +10160,13 @@ - - + + + + - @@ -10146,12 +10229,13 @@ - - + + + + - @@ -10216,11 +10300,12 @@ - - + + + + - @@ -10265,11 +10350,12 @@ - - + + + + - @@ -10462,11 +10548,12 @@ - - + + + + - @@ -10596,11 +10683,12 @@ - - + + + + - @@ -10694,11 +10782,12 @@ - - + + + + - @@ -10792,11 +10881,12 @@ - - + + + + - @@ -10890,11 +10980,12 @@ - - + + + + - @@ -10975,11 +11066,12 @@ - - + + + + - @@ -11060,11 +11152,12 @@ - - + + + + - @@ -11271,11 +11364,12 @@ - - + + + + - @@ -11338,11 +11432,12 @@ - - + + + + - @@ -11535,11 +11630,12 @@ - - + + + + - @@ -11669,11 +11765,12 @@ - - + + + + - @@ -11767,11 +11864,12 @@ - - + + + + - @@ -11865,11 +11963,12 @@ - - + + + + - @@ -12064,11 +12163,12 @@ - - + + + + - @@ -12131,11 +12231,12 @@ - - + + + + - @@ -12328,11 +12429,12 @@ - - + + + + - @@ -12462,11 +12564,12 @@ - - + + + + - @@ -12560,11 +12663,12 @@ - - + + + + - @@ -12658,11 +12762,12 @@ - - + + + + - @@ -12857,11 +12962,12 @@ - - + + + + - @@ -12924,11 +13030,12 @@ - - + + + + - @@ -13121,11 +13228,12 @@ - - + + + + - @@ -13255,11 +13363,12 @@ - - + + + + - @@ -13353,11 +13462,12 @@ - - + + + + - @@ -13451,11 +13561,12 @@ - - + + + + - @@ -13720,12 +13831,13 @@ - - + + + + - @@ -13764,11 +13876,12 @@ - - + + + + - @@ -13892,11 +14005,12 @@ - - + + + + - @@ -14020,11 +14134,12 @@ - - + + + + - @@ -14122,11 +14237,12 @@ - - + + + + - @@ -14241,11 +14357,12 @@ - - + + + + - @@ -14360,11 +14477,12 @@ - - + + + + - @@ -14477,11 +14595,12 @@ - - + + + + - @@ -14540,11 +14659,12 @@ - - + + + + - @@ -14768,11 +14888,12 @@ - - + + + + - @@ -14985,11 +15106,12 @@ - - + + + + - @@ -15216,11 +15338,12 @@ - - + + + + - @@ -15447,11 +15570,12 @@ - - + + + + - @@ -15542,11 +15666,12 @@ - - + + + + - @@ -15756,11 +15881,12 @@ - - + + + + - @@ -15953,11 +16079,12 @@ - - + + + + - @@ -16087,11 +16214,12 @@ - - + + + + - @@ -16154,11 +16282,12 @@ - - + + + + - @@ -16252,11 +16381,12 @@ - - + + + + - @@ -16346,11 +16476,12 @@ - - + + + + - @@ -16575,11 +16706,12 @@ - - + + + + - @@ -16673,11 +16805,12 @@ - - + + + + - @@ -16935,12 +17068,13 @@ - - + + + + - @@ -17007,11 +17141,12 @@ - - + + + + - @@ -17066,11 +17201,12 @@ - - + + + + - @@ -17263,11 +17399,12 @@ - - + + + + - @@ -17397,11 +17534,12 @@ - - + + + + - @@ -17495,11 +17633,12 @@ - - + + + + - @@ -17589,11 +17728,12 @@ - - + + + + - @@ -17817,11 +17957,12 @@ - - + + + + - @@ -18079,12 +18220,13 @@ - - + + + + - @@ -18151,11 +18293,12 @@ - - + + + + - @@ -18210,11 +18353,12 @@ - - + + + + - @@ -18407,11 +18551,12 @@ - - + + + + - @@ -18541,11 +18686,12 @@ - - + + + + - @@ -18639,11 +18785,12 @@ - - + + + + - @@ -18737,11 +18884,12 @@ - - + + + + - @@ -18965,11 +19113,12 @@ - - + + + + - @@ -19227,12 +19376,13 @@ - - + + + + - @@ -19299,11 +19449,12 @@ - - + + + + - @@ -19358,11 +19509,12 @@ - - + + + + - @@ -19555,11 +19707,12 @@ - - + + + + - @@ -19689,11 +19842,12 @@ - - + + + + - @@ -19787,11 +19941,12 @@ - - + + + + - @@ -19885,11 +20040,12 @@ - - + + + + - @@ -20113,11 +20269,12 @@ - - + + + + - @@ -20302,11 +20459,12 @@ - - + + + + - @@ -20621,11 +20779,12 @@ - - + + + + - @@ -20929,11 +21088,12 @@ - - + + + + - @@ -21251,11 +21411,12 @@ - - + + + + - @@ -21573,11 +21734,12 @@ - - + + + + - @@ -21759,11 +21921,12 @@ - - + + + + - @@ -22067,11 +22230,12 @@ - - + + + + - @@ -22278,11 +22442,12 @@ - - + + + + - @@ -22489,11 +22654,12 @@ - - + + + + - @@ -22672,11 +22838,12 @@ - - + + + + - @@ -22892,11 +23059,12 @@ - - + + + + - @@ -23112,11 +23280,12 @@ - - + + + + - @@ -23306,11 +23475,12 @@ - - + + + + - @@ -23575,11 +23745,12 @@ - - + + + + - @@ -23772,11 +23943,12 @@ - - + + + + - @@ -23906,11 +24078,12 @@ - - + + + + - @@ -24004,11 +24177,12 @@ - - + + + + - @@ -24102,11 +24276,12 @@ - - + + + + - @@ -24296,11 +24471,12 @@ - - + + + + - @@ -24493,11 +24669,12 @@ - - + + + + - @@ -24627,11 +24804,12 @@ - - + + + + - @@ -24694,11 +24872,12 @@ - - + + + + - @@ -24792,11 +24971,12 @@ - - + + + + - @@ -24890,11 +25070,12 @@ - - + + + + - @@ -25106,12 +25287,13 @@ - - + + + + - @@ -25155,11 +25337,12 @@ - - + + + + - @@ -25229,11 +25412,12 @@ - - + + + + - @@ -25426,11 +25610,12 @@ - - + + + + - @@ -25560,11 +25745,12 @@ - - + + + + - @@ -25658,11 +25844,12 @@ - - + + + + - @@ -25756,11 +25943,12 @@ - - + + + + - @@ -25945,11 +26133,12 @@ - - + + + + - @@ -26187,12 +26376,13 @@ - - + + + + - @@ -26243,11 +26433,12 @@ - - + + + + - @@ -26309,11 +26500,12 @@ - - + + + + - @@ -26506,11 +26698,12 @@ - - + + + + - @@ -26640,11 +26833,12 @@ - - + + + + - @@ -26738,11 +26932,12 @@ - - + + + + - @@ -26826,11 +27021,12 @@ - - + + + + - @@ -26924,11 +27120,12 @@ - - + + + + - @@ -27152,12 +27349,13 @@ - - + + + + - @@ -27208,11 +27406,12 @@ - - + + + + - @@ -27260,11 +27459,12 @@ - - + + + + - @@ -27457,11 +27657,12 @@ - - + + + + - @@ -27591,11 +27792,12 @@ - - + + + + - @@ -27689,11 +27891,12 @@ - - + + + + - @@ -27763,11 +27966,12 @@ - - + + + + - @@ -27861,11 +28065,12 @@ - - + + + + - From 346d8db8d6b07487eb50579ac99d8e3d3023cbb2 Mon Sep 17 00:00:00 2001 From: andi-huber Date: Sun, 16 Apr 2023 10:14:06 +0200 Subject: [PATCH 06/37] CAUSEWAY-3075: minor code quality --- .gitignore | 3 + .../facets/DomainEventFacetAbstract.java | 8 + .../invocation/ActionDomainEventFacet.java | 5 +- .../modify/CollectionDomainEventFacet.java | 5 +- .../modify/PropertyDomainEventFacet.java | 5 +- ...wer_IntegTest.dump_facets.approved.xml.bak | 1125 ----------------- ...ain_IntegTest.dump_facets.approved.xml.bak | 1111 ---------------- ...wer_IntegTest.dump_facets.approved.xml.bak | 919 -------------- ...ain_IntegTest.dump_facets.approved.xml.bak | 912 ------------- 9 files changed, 14 insertions(+), 4079 deletions(-) delete mode 100644 extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml.bak delete mode 100644 extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml.bak delete mode 100644 extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml.bak delete mode 100644 extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml.bak diff --git a/.gitignore b/.gitignore index 377559525bb..687d4138552 100644 --- a/.gitignore +++ b/.gitignore @@ -66,6 +66,9 @@ component/objectstore/xml/tmp/objects/ component/objectstore/xml/xml/objects/ component/objectstore/xml/tmp/tests/ +# backup files +*.bak + # log files *.log diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java index 885fa9a4458..fa06d2e0adf 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java @@ -23,6 +23,7 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import lombok.NonNull; @@ -70,6 +71,13 @@ protected final void updateEventType( this.eventTypeOrigin = eventTypeOrigin; } + /** + * Called by meta-model post-processors, to honor domain object annotations on mixees. + * (required only, if this facet belongs to a mixed-in member) + */ + public void initWithMixee(final ObjectSpecification mixeeSpec) {} + + @Override public void visitAttributes(final BiConsumer visitor) { super.visitAttributes(visitor); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java index 6517817982b..b6995539cf3 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java @@ -73,10 +73,7 @@ public ActionDomainEventFacet( domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } - /** - * Called by meta-model post-processors, to honor domain object annotations on mixees. - * (required only, if this facet belongs to a mixed-in member) - */ + @Override public void initWithMixee(final ObjectSpecification mixeeSpec) { mixeeSpec .lookupFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java index ab6fa8a4d6b..b27bb5f16fc 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java @@ -48,10 +48,7 @@ public CollectionDomainEventFacet( domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } - /** - * Called by meta-model post-processors, to honor domain object annotations on mixees. - * (required only, if this facet belongs to a mixed-in member) - */ + @Override public void initWithMixee(final ObjectSpecification mixeeSpec) { mixeeSpec .lookupFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java index 00ce49e82f9..8270378c1b7 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java @@ -80,10 +80,7 @@ public PropertyDomainEventFacet( domainEventHelper = DomainEventHelper.ofServiceRegistry(getServiceRegistry()); } - /** - * Called by meta-model post-processors, to honor domain object annotations on mixees. - * (required only, if this facet belongs to a mixed-in member) - */ + @Override public void initWithMixee(final ObjectSpecification mixeeSpec) { mixeeSpec .lookupFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class) diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml.bak b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml.bak deleted file mode 100644 index e7516cfb068..00000000000 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml.bak +++ /dev/null @@ -1,1125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.Blob - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.String - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.services.layout.LayoutExportStyle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.String - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.LocalResourcePath - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.Blob - - - - - \ No newline at end of file diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml.bak b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml.bak deleted file mode 100644 index ee91db967cd..00000000000 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml.bak +++ /dev/null @@ -1,1111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.Blob - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.String - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.services.layout.LayoutExportStyle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.String - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.LocalResourcePath - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.Blob - - - - - \ No newline at end of file diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml.bak b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml.bak deleted file mode 100644 index 448433c9546..00000000000 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml.bak +++ /dev/null @@ -1,919 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.Blob - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.String - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.services.layout.LayoutExportStyle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.String - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.LocalResourcePath - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - \ No newline at end of file diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml.bak b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml.bak deleted file mode 100644 index f0de323ffdb..00000000000 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml.bak +++ /dev/null @@ -1,912 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.Blob - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.String - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.services.layout.LayoutExportStyle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.NamedWithMimeType$CommonMimeType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.String - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.causeway.applib.value.LocalResourcePath - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - java.lang.Object - - - - - \ No newline at end of file From 64595efc8b2b2ae93ee76fcf58b7ef6ad30d6f58 Mon Sep 17 00:00:00 2001 From: andi-huber Date: Sun, 16 Apr 2023 10:30:47 +0200 Subject: [PATCH 07/37] CAUSEWAY-3409: simplify further --- .../invocation/ActionDomainEventFacet.java | 9 +++------ .../modify/CollectionDomainEventFacet.java | 9 +++------ .../DomainObjectAnnotationFacetFactory.java | 18 ++++++------------ ...tDefaultFacetForDomainObjectAnnotation.java | 16 +++++++++++++--- ...tDefaultFacetForDomainObjectAnnotation.java | 16 +++++++++++++--- ...tDefaultFacetForDomainObjectAnnotation.java | 16 +++++++++++++--- .../modify/PropertyDomainEventFacet.java | 9 +++------ 7 files changed, 54 insertions(+), 39 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java index b6995539cf3..3375d3da42c 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java @@ -75,14 +75,11 @@ public ActionDomainEventFacet( @Override public void initWithMixee(final ObjectSpecification mixeeSpec) { + if(!getEventTypeOrigin().isDefault()) return; // skip if already set explicitly mixeeSpec .lookupFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class) - .ifPresent(facetOnMixee->{ - if(facetOnMixee.getEventType() != ActionDomainEvent.Default.class - && getEventTypeOrigin().isDefault()) { - super.updateEventType(facetOnMixee.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); - } - }); + .ifPresent(facetOnMixee-> + super.updateEventType(facetOnMixee.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT)); } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java index b27bb5f16fc..dd89eef80b2 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java @@ -50,14 +50,11 @@ public CollectionDomainEventFacet( @Override public void initWithMixee(final ObjectSpecification mixeeSpec) { + if(!getEventTypeOrigin().isDefault()) return; // skip if already set explicitly mixeeSpec .lookupFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class) - .ifPresent(facetOnMixee->{ - if(facetOnMixee.getEventType() != CollectionDomainEvent.Default.class - && getEventTypeOrigin().isDefault()) { - super.updateEventType(facetOnMixee.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); - } - }); + .ifPresent(facetOnMixee-> + super.updateEventType(facetOnMixee.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT)); } @Override diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java index e63564c2dce..5f87c62213a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java @@ -34,9 +34,6 @@ import org.apache.causeway.applib.annotation.Nature; import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.applib.annotation.Value; -import org.apache.causeway.applib.events.domain.ActionDomainEvent; -import org.apache.causeway.applib.events.domain.CollectionDomainEvent; -import org.apache.causeway.applib.events.domain.PropertyDomainEvent; import org.apache.causeway.applib.events.lifecycle.ObjectCreatedEvent; import org.apache.causeway.applib.events.lifecycle.ObjectLoadedEvent; import org.apache.causeway.applib.events.lifecycle.ObjectPersistedEvent; @@ -528,9 +525,8 @@ private void processDomainEventAction( domainObjectIfAny .map(DomainObject::actionDomainEvent) - .filter(domainEvent -> domainEvent != ActionDomainEvent.Default.class) - .map(domainEvent -> new ActionDomainEventDefaultFacetForDomainObjectAnnotation( - holder, domainEvent)) + .flatMap(domainEvent -> ActionDomainEventDefaultFacetForDomainObjectAnnotation + .create(domainEvent, holder)) .ifPresent(super::addFacet); } @@ -541,9 +537,8 @@ private void processDomainEventProperty( domainObjectIfAny .map(DomainObject::propertyDomainEvent) - .filter(domainEvent -> domainEvent != PropertyDomainEvent.Default.class) - .map(domainEvent -> new PropertyDomainEventDefaultFacetForDomainObjectAnnotation( - holder, domainEvent)) + .flatMap(domainEvent -> PropertyDomainEventDefaultFacetForDomainObjectAnnotation + .create(domainEvent, holder)) .ifPresent(super::addFacet); } @@ -553,9 +548,8 @@ private void processDomainEventCollection( domainObjectIfAny .map(DomainObject::collectionDomainEvent) - .filter(domainEvent -> domainEvent != CollectionDomainEvent.Default.class) - .map(domainEvent -> new CollectionDomainEventDefaultFacetForDomainObjectAnnotation( - holder, domainEvent)) + .flatMap(domainEvent -> CollectionDomainEventDefaultFacetForDomainObjectAnnotation + .create(domainEvent, holder)) .ifPresent(super::addFacet); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java index 2b4be892bf2..6f5108d6b63 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/ActionDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -18,6 +18,8 @@ */ package org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents; +import java.util.Optional; + import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; @@ -31,13 +33,21 @@ public class ActionDomainEventDefaultFacetForDomainObjectAnnotation extends DomainEventFacetAbstract> { + public static Optional create( + final Class> domainEvent, + final FacetHolder holder) { + return domainEvent != ActionDomainEvent.Default.class + ? Optional.of(new ActionDomainEventDefaultFacetForDomainObjectAnnotation(domainEvent, holder)) + : Optional.empty(); + } + private static Class type() { return ActionDomainEventDefaultFacetForDomainObjectAnnotation.class; } - public ActionDomainEventDefaultFacetForDomainObjectAnnotation( - final FacetHolder holder, - final Class> value) { + private ActionDomainEventDefaultFacetForDomainObjectAnnotation( + final Class> value, + final FacetHolder holder) { super(type(), value, EventTypeOrigin.ANNOTATED_OBJECT, holder); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java index 6ec57b46109..89dd9292a8f 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/CollectionDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -18,6 +18,8 @@ */ package org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents; +import java.util.Optional; + import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; @@ -31,13 +33,21 @@ public class CollectionDomainEventDefaultFacetForDomainObjectAnnotation extends DomainEventFacetAbstract> { + public static Optional create( + final Class> domainEvent, + final FacetHolder holder) { + return domainEvent != CollectionDomainEvent.Default.class + ? Optional.of(new CollectionDomainEventDefaultFacetForDomainObjectAnnotation(domainEvent, holder)) + : Optional.empty(); + } + private static Class type() { return CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class; } - public CollectionDomainEventDefaultFacetForDomainObjectAnnotation( - final FacetHolder holder, - final Class> value) { + private CollectionDomainEventDefaultFacetForDomainObjectAnnotation( + final Class> value, + final FacetHolder holder) { super(type(), value, EventTypeOrigin.ANNOTATED_OBJECT, holder); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java index 2bf356fc386..3827e1f7a9d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobject/domainevents/PropertyDomainEventDefaultFacetForDomainObjectAnnotation.java @@ -18,6 +18,8 @@ */ package org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents; +import java.util.Optional; + import org.apache.causeway.applib.events.domain.PropertyDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; @@ -31,13 +33,21 @@ public class PropertyDomainEventDefaultFacetForDomainObjectAnnotation extends DomainEventFacetAbstract> { + public static Optional create( + final Class> domainEvent, + final FacetHolder holder) { + return domainEvent != PropertyDomainEvent.Default.class + ? Optional.of(new PropertyDomainEventDefaultFacetForDomainObjectAnnotation(domainEvent, holder)) + : Optional.empty(); + } + private static Class type() { return PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class; } - public PropertyDomainEventDefaultFacetForDomainObjectAnnotation( - final FacetHolder holder, - final Class> value) { + private PropertyDomainEventDefaultFacetForDomainObjectAnnotation( + final Class> value, + final FacetHolder holder) { super(type(), value, EventTypeOrigin.ANNOTATED_OBJECT, holder); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java index 8270378c1b7..525f96545af 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java @@ -82,14 +82,11 @@ public PropertyDomainEventFacet( @Override public void initWithMixee(final ObjectSpecification mixeeSpec) { + if(!getEventTypeOrigin().isDefault()) return; // skip if already set explicitly mixeeSpec .lookupFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class) - .ifPresent(facetOnMixee->{ - if(facetOnMixee.getEventType() != PropertyDomainEvent.Default.class - && getEventTypeOrigin().isDefault()) { - super.updateEventType(facetOnMixee.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT); - } - }); + .ifPresent(facetOnMixee-> + super.updateEventType(facetOnMixee.getEventType(), EventTypeOrigin.ANNOTATED_OBJECT)); } @Override From ddbf038626cb8fd1e0346d0829c06374587b7908 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Mon, 17 Apr 2023 11:28:28 +0200 Subject: [PATCH 08/37] CAUSEWAY-3409: don't install non-postable event-type holding facets (on props+colls) --- .../CollectionAnnotationFacetFactory.java | 47 +------- .../modify/CollectionDomainEventFacet.java | 88 +++++++++++++- .../PropertyAnnotationFacetFactory.java | 111 +++++++----------- ...tyClearFacetForDomainEventFromDefault.java | 4 +- ...tForDomainEventFromPropertyAnnotation.java | 4 +- .../modify/PropertyDomainEventFacet.java | 90 +++++++++++++- ...ySetterFacetForDomainEventFromDefault.java | 3 +- ...tForDomainEventFromPropertyAnnotation.java | 3 +- ...terOrClearFacetForDomainEventAbstract.java | 1 - ...weakDomainEventsForMixinPostProcessor.java | 61 +--------- 10 files changed, 229 insertions(+), 183 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java index 5e09b081769..2b19c3c89aa 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java @@ -24,11 +24,9 @@ import org.apache.causeway.applib.annotation.Collection; import org.apache.causeway.applib.annotation.SemanticsOf; -import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet.Contributing; @@ -37,11 +35,8 @@ import org.apache.causeway.core.metamodel.facets.collections.collection.hidden.HiddenFacetForCollectionAnnotation; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet; import org.apache.causeway.core.metamodel.facets.collections.collection.typeof.TypeOfFacetForCollectionAnnotation; -import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.CollectionDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.specloader.validator.MetaModelValidatorForAmbiguousMixinAnnotations; -import org.apache.causeway.core.metamodel.util.EventUtil; import lombok.val; @@ -106,46 +101,11 @@ void processModify(final ProcessMethodContext processMethodContext, final Option // // search for @Collection(domainEvent=...) - val collectionDomainEventFacet = collectionIfAny - .map(Collection::domainEvent) - .filter(domainEvent -> domainEvent != CollectionDomainEvent.Default.class) - .map(domainEvent -> - new CollectionDomainEventFacet( - defaultFromDomainObjectIfRequired(typeSpec, domainEvent), - EventTypeOrigin.ANNOTATED_MEMBER, holder)) - .orElse( - new CollectionDomainEventFacet( - defaultFromDomainObjectIfRequired(typeSpec, CollectionDomainEvent.Default.class), - EventTypeOrigin.DEFAULT, holder)); - if(!CollectionDomainEvent.Noop.class.isAssignableFrom(collectionDomainEventFacet.getEventType())) { - addFacet(collectionDomainEventFacet); - } - - if(EventUtil.eventTypeIsPostable( - collectionDomainEventFacet.getEventType(), - CollectionDomainEvent.Noop.class, - CollectionDomainEvent.Default.class, - getConfiguration().getApplib().getAnnotation().getCollection().getDomainEvent().isPostForDefault() - )) { - addFacet(collectionDomainEventFacet); - } - - } - - public static Class> defaultFromDomainObjectIfRequired( - final ObjectSpecification typeSpec, - final Class> collectionDomainEventType) { - if (collectionDomainEventType == CollectionDomainEvent.Default.class) { - final CollectionDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject = - typeSpec.getFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class); - if (typeFromDomainObject != null) { - return typeFromDomainObject.getEventType(); - } - } - return collectionDomainEventType; + addFacetIfPresent( + CollectionDomainEventFacet + .createRegular(collectionIfAny, typeSpec, getterFacet, holder)); } - void processHidden(final ProcessMethodContext processMethodContext, final Optional collectionIfAny) { val holder = processMethodContext.getFacetHolder(); @@ -180,5 +140,4 @@ void processTypeOf(final ProcessMethodContext processMethodContext, final Option }); } - } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java index dd89eef80b2..2419d4b7e9d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java @@ -18,29 +18,115 @@ */ package org.apache.causeway.core.metamodel.facets.collections.collection.modify; +import java.lang.reflect.Method; +import java.util.Optional; + +import org.apache.causeway.applib.annotation.Collection; import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.CollectionDomainEvent; import org.apache.causeway.commons.internal.base._Casts; +import org.apache.causeway.commons.internal.reflection._Annotations; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.DomainEventHelper; import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.CollectionDomainEventDefaultFacetForDomainObjectAnnotation; +import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor; import org.apache.causeway.core.metamodel.interactions.VisibilityContext; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; +import org.apache.causeway.core.metamodel.specloader.specimpl.OneToManyAssociationMixedIn; +import org.apache.causeway.core.metamodel.util.EventUtil; + +import lombok.NonNull; +import lombok.val; public class CollectionDomainEventFacet extends DomainEventFacetAbstract> implements HidingInteractionAdvisor { + // -- FACTORIES + + /** + * For regular (non mixed-in) members only. + *

+ * @return empty, if event is not post-able + */ + public static Optional createRegular( + final Optional collectionIfAny, + final ObjectSpecification typeSpec, + final PropertyOrCollectionAccessorFacet getterFacet, + final FacetHolder facetHolder) { + + val collectionDomainEventFacet = collectionIfAny + .map(Collection::domainEvent) + .filter(domainEvent -> domainEvent != CollectionDomainEvent.Default.class) + .map(domainEvent -> + new CollectionDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, domainEvent), + EventTypeOrigin.ANNOTATED_MEMBER, facetHolder)) + .orElse( + new CollectionDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, CollectionDomainEvent.Default.class), + EventTypeOrigin.DEFAULT, facetHolder)); + + return EventUtil.eventTypeIsPostable( + collectionDomainEventFacet.getEventType(), + CollectionDomainEvent.Noop.class, + CollectionDomainEvent.Default.class, + facetHolder.getConfiguration().getApplib().getAnnotation().getCollection().getDomainEvent().isPostForDefault()) + ? Optional.of(collectionDomainEventFacet) + : Optional.empty(); + } + + /** + * For mixed-in members. + */ + public static Optional createMixedIn( + final @NonNull ObjectSpecification mixeeSpecification, + final @NonNull OneToManyAssociationMixedIn mixedInCollection) { + + val facetedMethod = mixedInCollection.getFacetedMethod(); + final Method method = facetedMethod.getMethod().asMethodElseFail(); // no-arg method, should have a regular facade + + //TODO[CAUSEWAY-3409] what if the @Collection annotation is not on the method but on the (mixin) type + final Collection collectionAnnot = + _Annotations.synthesize(method, Collection.class) + .orElse(null); + + if(collectionAnnot != null) { + final Class> collectionDomainEventType = + defaultFromDomainObjectIfRequired( + mixeeSpecification, collectionAnnot.domainEvent()); + return Optional.of( + new CollectionDomainEventFacet( + collectionDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, mixedInCollection)); + } + return Optional.empty(); + } + + // -- + private static Class type() { return CollectionDomainEventFacet.class; } + private static Class> defaultFromDomainObjectIfRequired( + final ObjectSpecification typeSpec, + final Class> collectionDomainEventType) { + if (collectionDomainEventType == CollectionDomainEvent.Default.class) { + final CollectionDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject = + typeSpec.getFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class); + if (typeFromDomainObject != null) { + return typeFromDomainObject.getEventType(); + } + } + return collectionDomainEventType; + } + private final DomainEventHelper domainEventHelper; - public CollectionDomainEventFacet( + protected CollectionDomainEventFacet( final Class> eventType, final EventTypeOrigin eventTypeOrigin, final FacetHolder holder) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java index 8657c9fc7da..aa62a8d0f02 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java @@ -25,18 +25,15 @@ import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.applib.annotation.SemanticsOf; -import org.apache.causeway.applib.events.domain.PropertyDomainEvent; import org.apache.causeway.applib.mixins.system.HasInteractionId; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet.Contributing; import org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract; import org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingPropertyFacetForPropertyAnnotation; -import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.PropertyDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.facets.properties.projection.ProjectingFacetFromPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.disabled.DisabledFacetForPropertyAnnotation; @@ -57,10 +54,8 @@ import org.apache.causeway.core.metamodel.facets.properties.property.snapshot.SnapshotExcludeFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacet; import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.specloader.validator.MetaModelValidatorForAmbiguousMixinAnnotations; import org.apache.causeway.core.metamodel.specloader.validator.MetaModelValidatorForConflictingOptionality; -import org.apache.causeway.core.metamodel.util.EventUtil; import lombok.val; @@ -135,77 +130,53 @@ void processModify(final ProcessMethodContext processMethodContext, final Option // // search for @Property(domainEvent=...), else use default event type - val propertyDomainEventFacet = propertyIfAny - .map(Property::domainEvent) - .filter(domainEvent -> domainEvent != PropertyDomainEvent.Default.class) - .map(domainEvent -> new PropertyDomainEventFacet( - defaultFromDomainObjectIfRequired(typeSpec, domainEvent), - EventTypeOrigin.ANNOTATED_MEMBER, getterFacet, holder)) - .orElse(new PropertyDomainEventFacet( - defaultFromDomainObjectIfRequired(typeSpec, PropertyDomainEvent.Default.class), - EventTypeOrigin.DEFAULT, getterFacet, holder)); - - if(EventUtil.eventTypeIsPostable( - propertyDomainEventFacet.getEventType(), - PropertyDomainEvent.Noop.class, - PropertyDomainEvent.Default.class, - getConfiguration().getApplib().getAnnotation().getProperty().getDomainEvent().isPostForDefault() - )) { - addFacet(propertyDomainEventFacet); - } - + PropertyDomainEventFacet + .createRegular(propertyIfAny, typeSpec, getterFacet, holder) + .ifPresent(propertyDomainEventFacet->{ - // - // if the property is mutable, then replace the current setter and clear facets with equivalents that - // emit the appropriate domain event and then delegate onto the underlying - // + addFacet(propertyDomainEventFacet); - final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class); - if(setterFacet != null) { - // the current setter facet will end up as the underlying facet - final PropertySetterFacet replacementFacet; - - if(propertyDomainEventFacet.getEventTypeOrigin().isAnnotatedMember()) { - replacementFacet = new PropertySetterFacetForDomainEventFromPropertyAnnotation( - propertyDomainEventFacet.getEventType(), getterFacet, setterFacet, propertyDomainEventFacet, holder); - } else - // default - { - replacementFacet = new PropertySetterFacetForDomainEventFromDefault( - propertyDomainEventFacet.getEventType(), getterFacet, setterFacet, propertyDomainEventFacet, holder); + var eventType = propertyDomainEventFacet.getEventType(); + var eventTypeOrigin = propertyDomainEventFacet.getEventTypeOrigin(); + + // + // if the property is mutable, then replace the current setter and clear facets with equivalents that + // emit the appropriate domain event and then delegate onto the underlying + // + + final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class); + if(setterFacet != null) { + // the current setter facet will end up as the underlying facet + final PropertySetterFacet replacementFacet; + + if(eventTypeOrigin.isAnnotatedMember()) { + replacementFacet = new PropertySetterFacetForDomainEventFromPropertyAnnotation( + eventType, getterFacet, setterFacet, holder); + } else { + // default + replacementFacet = new PropertySetterFacetForDomainEventFromDefault( + eventType, getterFacet, setterFacet, holder); + } + addFacet(replacementFacet); } - addFacet(replacementFacet); - } - final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class); - if(clearFacet != null) { - // the current clear facet will end up as the underlying facet - final PropertyClearFacet replacementFacet; - - if(propertyDomainEventFacet.getEventTypeOrigin().isAnnotatedMember()) { - replacementFacet = new PropertyClearFacetForDomainEventFromPropertyAnnotation( - propertyDomainEventFacet.getEventType(), getterFacet, clearFacet, propertyDomainEventFacet, holder); - } else - // default - { - replacementFacet = new PropertyClearFacetForDomainEventFromDefault( - propertyDomainEventFacet.getEventType(), getterFacet, clearFacet, propertyDomainEventFacet, holder); + final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class); + if(clearFacet != null) { + // the current clear facet will end up as the underlying facet + final PropertyClearFacet replacementFacet; + + if(eventTypeOrigin.isAnnotatedMember()) { + replacementFacet = new PropertyClearFacetForDomainEventFromPropertyAnnotation( + eventType, getterFacet, clearFacet, holder); + } else { + // default + replacementFacet = new PropertyClearFacetForDomainEventFromDefault( + eventType, getterFacet, clearFacet, holder); + } + addFacet(replacementFacet); } - addFacet(replacementFacet); - } - } - public static Class> defaultFromDomainObjectIfRequired( - final ObjectSpecification typeSpec, - final Class> propertyDomainEventType) { - if (propertyDomainEventType == PropertyDomainEvent.Default.class) { - final PropertyDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject = - typeSpec.getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class); - if (typeFromDomainObject != null) { - return typeFromDomainObject.getEventType(); - } - } - return propertyDomainEventType; + }); } void processHidden(final ProcessMethodContext processMethodContext, final Optional propertyIfAny) { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java index 645160f5c47..d513a87b969 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java @@ -27,14 +27,12 @@ public class PropertyClearFacetForDomainEventFromDefault extends PropertySetterOrClearFacetForDomainEventAbstract implements PropertyClearFacet { - public PropertyClearFacetForDomainEventFromDefault( final Class> eventType, final PropertyOrCollectionAccessorFacet getterFacet, final PropertyClearFacet clearFacet, - final PropertyDomainEventFacet propertyInteractionFacet, final FacetHolder holder) { - super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, holder); + super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java index 0e0c5df79b2..abb9d80b666 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java @@ -27,14 +27,12 @@ public class PropertyClearFacetForDomainEventFromPropertyAnnotation extends PropertySetterOrClearFacetForDomainEventAbstract implements PropertyClearFacet { - public PropertyClearFacetForDomainEventFromPropertyAnnotation( final Class> eventType, final PropertyOrCollectionAccessorFacet getterFacet, final PropertyClearFacet clearFacet, - final PropertyDomainEventFacet propertyInteractionFacet, final FacetHolder holder) { - super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, holder); + super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java index 525f96545af..5c472b10eb8 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java @@ -18,15 +18,18 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property.modify; +import java.lang.reflect.Method; import java.util.Optional; import java.util.function.BiConsumer; +import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.PropertyDomainEvent; import org.apache.causeway.applib.services.i18n.TranslatableString; import org.apache.causeway.applib.services.i18n.TranslationContext; import org.apache.causeway.applib.services.i18n.TranslationService; import org.apache.causeway.commons.internal.base._Casts; +import org.apache.causeway.commons.internal.reflection._Annotations; import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; @@ -44,6 +47,10 @@ import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.specloader.specimpl.OneToOneAssociationMixedIn; +import org.apache.causeway.core.metamodel.util.EventUtil; + +import lombok.NonNull; +import lombok.val; public class PropertyDomainEventFacet extends DomainEventFacetAbstract> @@ -52,10 +59,87 @@ public class PropertyDomainEventFacet DisablingInteractionAdvisor, ValidatingInteractionAdvisor { + // -- FACTORIES + + /** + * For regular (non mixed-in) members only. + *

+ * @return empty, if event is not post-able + */ + public static Optional createRegular( + final Optional propertyIfAny, + final ObjectSpecification typeSpec, + final PropertyOrCollectionAccessorFacet getterFacet, + final FacetHolder facetHolder) { + + val propertyDomainEventFacet = propertyIfAny + .map(Property::domainEvent) + .filter(domainEvent -> domainEvent != PropertyDomainEvent.Default.class) + .map(domainEvent -> new PropertyDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, domainEvent), + EventTypeOrigin.ANNOTATED_MEMBER, getterFacet, facetHolder)) + .orElse(new PropertyDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, PropertyDomainEvent.Default.class), + EventTypeOrigin.DEFAULT, getterFacet, facetHolder)); + + return EventUtil.eventTypeIsPostable( + propertyDomainEventFacet.getEventType(), + PropertyDomainEvent.Noop.class, + PropertyDomainEvent.Default.class, + facetHolder.getConfiguration().getApplib().getAnnotation().getProperty().getDomainEvent().isPostForDefault()) + ? Optional.of(propertyDomainEventFacet) + : Optional.empty(); + } + + /** + * For mixed-in members. + */ + public static Optional createMixedIn( + final @NonNull ObjectSpecification mixeeSpecification, + final @NonNull OneToOneAssociationMixedIn mixedInProperty) { + + val facetedMethod = mixedInProperty.getFacetedMethod(); + final Method method = facetedMethod.getMethod().asMethodElseFail(); // no-arg method, should have a regular facade + + //TODO[CAUSEWAY-3409] what if the @Property annotation is not on the method but on the (mixin) type + final Property propertyAnnot = + _Annotations.synthesize(method, Property.class) + .orElse(null); + + if(propertyAnnot != null) { + final Class> propertyDomainEventType = + defaultFromDomainObjectIfRequired( + mixeeSpecification, propertyAnnot.domainEvent()); + val getterFacet = (PropertyOrCollectionAccessorFacet)null; + + return Optional.of( + new PropertyDomainEventFacet( + propertyDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, getterFacet, mixedInProperty)); + } + + return Optional.empty(); + + } + + // -- + private static Class type() { return PropertyDomainEventFacet.class; } + private static Class> defaultFromDomainObjectIfRequired( + final ObjectSpecification typeSpec, + final Class> propertyDomainEventType) { + if (propertyDomainEventType == PropertyDomainEvent.Default.class) { + final PropertyDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject = + typeSpec.getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class); + if (typeFromDomainObject != null) { + return typeFromDomainObject.getEventType(); + } + } + return propertyDomainEventType; + } + private final DomainEventHelper domainEventHelper; private final PropertyOrCollectionAccessorFacet getterFacetIfAny; @@ -65,11 +149,11 @@ private static Class type() { /** * @param getterFacetIfAny - will be null if this is for a mixin {@link OneToOneAssociationMixedIn}. */ - public PropertyDomainEventFacet( + protected PropertyDomainEventFacet( final Class> eventType, final EventTypeOrigin eventTypeOrigin, final PropertyOrCollectionAccessorFacet getterFacetIfAny, - final FacetHolder holder ) { + final FacetHolder holder) { super(type(), eventType, eventTypeOrigin, holder); this.getterFacetIfAny = getterFacetIfAny; @@ -168,4 +252,6 @@ public void visitAttributes(final BiConsumer visitor) { visitor.accept("getterFacet", getterFacetIfAny); } + + } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java index 2918377da77..754a31c2cf9 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java @@ -32,10 +32,9 @@ public PropertySetterFacetForDomainEventFromDefault( final Class> eventType, final PropertyOrCollectionAccessorFacet getterFacet, final PropertySetterFacet setterFacet, - final PropertyDomainEventFacet propertyInteractionFacet, final FacetHolder holder) { - super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, holder); + super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java index 9e9218ed459..77351e625e5 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java @@ -32,9 +32,8 @@ public PropertySetterFacetForDomainEventFromPropertyAnnotation( final Class> eventType, final PropertyOrCollectionAccessorFacet getterFacet, final PropertySetterFacet setterFacet, - final PropertyDomainEventFacet propertyInteractionFacet, final FacetHolder holder) { - super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, holder); + super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java index 4e634e08cdd..cf961e6a78a 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java @@ -65,7 +65,6 @@ protected PropertySetterOrClearFacetForDomainEventAbstract( final PropertyOrCollectionAccessorFacet getterFacet, final PropertySetterFacet setterFacet, final PropertyClearFacet clearFacet, - final PropertyDomainEventFacet propertyDomainEventFacet, final FacetHolder holder) { super(facetType, eventType, holder); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java index b88d5bdf9a5..ce2b606936b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java @@ -18,24 +18,12 @@ */ package org.apache.causeway.core.metamodel.postprocessors.members; -import java.lang.reflect.Method; - import javax.inject.Inject; -import org.apache.causeway.applib.annotation.Collection; -import org.apache.causeway.applib.annotation.Property; -import org.apache.causeway.applib.events.domain.CollectionDomainEvent; -import org.apache.causeway.applib.events.domain.PropertyDomainEvent; -import org.apache.causeway.commons.internal.reflection._Annotations; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetUtil; -import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.collections.collection.CollectionAnnotationFacetFactory; import org.apache.causeway.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; -import org.apache.causeway.core.metamodel.facets.properties.property.PropertyAnnotationFacetFactory; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet; import org.apache.causeway.core.metamodel.postprocessors.ObjectSpecificationPostProcessorAbstract; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; @@ -69,29 +57,10 @@ public void postProcessAction(final ObjectSpecification objectSpecification, fin public void postProcessProperty(final ObjectSpecification objectSpecification, final OneToOneAssociation property) { if(property instanceof OneToOneAssociationMixedIn) { - final OneToOneAssociationMixedIn propertyMixin = (OneToOneAssociationMixedIn) property; - final FacetedMethod facetedMethod = propertyMixin.getFacetedMethod(); - final Method method = facetedMethod.getMethod().asMethodElseFail(); // no-arg method, should have a regular facade - - { - // this is basically a subset of the code that is in CollectionAnnotationFacetFactory, - // ignoring stuff which is deprecated for Causeway v2 - - final Property propertyAnnot = - _Annotations.synthesize(method, Property.class) - .orElse(null); - - if(propertyAnnot != null) { - final Class> propertyDomainEventType = - PropertyAnnotationFacetFactory.defaultFromDomainObjectIfRequired( - objectSpecification, propertyAnnot.domainEvent()); - final PropertyOrCollectionAccessorFacet getterFacetIfAny = null; - FacetUtil.addFacet( - new PropertyDomainEventFacet( - propertyDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, getterFacetIfAny, property)); - } - } + FacetUtil.addFacetIfPresent( + PropertyDomainEventFacet.createMixedIn(objectSpecification, (OneToOneAssociationMixedIn)property)); +//TODO[CAUSEWAY-3409] even when this lookup returns empty, we still might need an event-type holding facet property .lookupFacet(PropertyDomainEventFacet.class) .ifPresent(propertyDomainEventFacet-> @@ -103,28 +72,10 @@ public void postProcessProperty(final ObjectSpecification objectSpecification, f public void postProcessCollection(final ObjectSpecification objectSpecification, final OneToManyAssociation collection) { if(collection instanceof OneToManyAssociationMixedIn) { - final OneToManyAssociationMixedIn collectionMixin = (OneToManyAssociationMixedIn) collection; - final FacetedMethod facetedMethod = collectionMixin.getFacetedMethod(); - final Method method = facetedMethod.getMethod().asMethodElseFail(); // no-arg method, should have a regular facade - - { - // this is basically a subset of the code that is in CollectionAnnotationFacetFactory, - // ignoring stuff which is deprecated for Causeway v2 - - final Collection collectionAnnot = - _Annotations.synthesize(method, Collection.class) - .orElse(null); - - if(collectionAnnot != null) { - final Class> collectionDomainEventType = - CollectionAnnotationFacetFactory.defaultFromDomainObjectIfRequired( - objectSpecification, collectionAnnot.domainEvent()); - FacetUtil.addFacet( - new CollectionDomainEventFacet( - collectionDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, collection)); - } - } + FacetUtil.addFacetIfPresent( + CollectionDomainEventFacet.createMixedIn(objectSpecification, (OneToManyAssociationMixedIn)collection)); +//TODO[CAUSEWAY-3409] even when this lookup returns empty, we still might need an event-type holding facet collection .lookupFacet(CollectionDomainEventFacet.class) .ifPresent(collectionDomainEventFacet-> From c584f243489178f21b2a4f91366294c8dbc29b9c Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Mon, 17 Apr 2023 12:03:31 +0200 Subject: [PATCH 09/37] CAUSEWAY-3409: simplifies hierarchy for facet PropertySetterOrClearFacetForDomainEventAbstract --- .../PropertyAnnotationFacetFactory.java | 48 ++--- ... => PropertyClearFacetForDomainEvent.java} | 13 +- ...tForDomainEventFromPropertyAnnotation.java | 38 ---- ...=> PropertySetterFacetForDomainEvent.java} | 14 +- ...tForDomainEventFromPropertyAnnotation.java | 39 ---- ...terOrClearFacetForDomainEventAbstract.java | 24 ++- .../PropertyAnnotationFacetFactoryTest.java | 65 ++++--- ...etaModelRegressionTest.verify.approved.xml | 182 ++++++++++-------- 8 files changed, 176 insertions(+), 247 deletions(-) rename core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/{PropertyClearFacetForDomainEventFromDefault.java => PropertyClearFacetForDomainEvent.java} (77%) delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java rename core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/{PropertySetterFacetForDomainEventFromDefault.java => PropertySetterFacetForDomainEvent.java} (77%) delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java index aa62a8d0f02..fc96f0abb2f 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java @@ -43,11 +43,9 @@ import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByNullableAnnotationOnProperty; import org.apache.causeway.core.metamodel.facets.properties.property.maxlength.MaxLengthFacetForPropertyAnnotation; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromDefault; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromPropertyAnnotation; +import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEvent; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation; +import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEvent; import org.apache.causeway.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPatternAnnotationOnProperty; import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPropertyAnnotation; @@ -144,38 +142,18 @@ void processModify(final ProcessMethodContext processMethodContext, final Option // emit the appropriate domain event and then delegate onto the underlying // - final PropertySetterFacet setterFacet = holder.getFacet(PropertySetterFacet.class); - if(setterFacet != null) { - // the current setter facet will end up as the underlying facet - final PropertySetterFacet replacementFacet; - - if(eventTypeOrigin.isAnnotatedMember()) { - replacementFacet = new PropertySetterFacetForDomainEventFromPropertyAnnotation( - eventType, getterFacet, setterFacet, holder); - } else { - // default - replacementFacet = new PropertySetterFacetForDomainEventFromDefault( - eventType, getterFacet, setterFacet, holder); - } - addFacet(replacementFacet); - } - - final PropertyClearFacet clearFacet = holder.getFacet(PropertyClearFacet.class); - if(clearFacet != null) { - // the current clear facet will end up as the underlying facet - final PropertyClearFacet replacementFacet; - - if(eventTypeOrigin.isAnnotatedMember()) { - replacementFacet = new PropertyClearFacetForDomainEventFromPropertyAnnotation( - eventType, getterFacet, clearFacet, holder); - } else { - // default - replacementFacet = new PropertyClearFacetForDomainEventFromDefault( - eventType, getterFacet, clearFacet, holder); - } - addFacet(replacementFacet); - } + holder.lookupFacet(PropertySetterFacet.class) + .ifPresent(setterFacet-> + // the current setter facet will end up as the underlying facet + addFacet(new PropertySetterFacetForDomainEvent( + eventType, eventTypeOrigin, getterFacet, setterFacet, holder))); + + holder.lookupFacet(PropertyClearFacet.class) + .ifPresent(clearFacet-> + // the current clear facet will end up as the underlying facet + addFacet(new PropertyClearFacetForDomainEvent( + eventType, eventTypeOrigin, getterFacet, clearFacet, holder))); }); } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEvent.java similarity index 77% rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEvent.java index d513a87b969..025f328b6fd 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEvent.java @@ -23,16 +23,17 @@ import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacet; -public class PropertyClearFacetForDomainEventFromDefault +public class PropertyClearFacetForDomainEvent extends PropertySetterOrClearFacetForDomainEventAbstract implements PropertyClearFacet { - public PropertyClearFacetForDomainEventFromDefault( + public PropertyClearFacetForDomainEvent( final Class> eventType, - final PropertyOrCollectionAccessorFacet getterFacet, - final PropertyClearFacet clearFacet, - final FacetHolder holder) { + final EventTypeOrigin eventTypeOrigin, + final PropertyOrCollectionAccessorFacet getterFacet, + final PropertyClearFacet clearFacet, + final FacetHolder holder) { - super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, holder); + super(PropertyClearFacet.class, eventType, eventTypeOrigin, getterFacet, null, clearFacet, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java deleted file mode 100644 index abb9d80b666..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.properties.property.modify; - -import org.apache.causeway.applib.events.domain.PropertyDomainEvent; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; -import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacet; - -public class PropertyClearFacetForDomainEventFromPropertyAnnotation -extends PropertySetterOrClearFacetForDomainEventAbstract -implements PropertyClearFacet { - - public PropertyClearFacetForDomainEventFromPropertyAnnotation( - final Class> eventType, - final PropertyOrCollectionAccessorFacet getterFacet, - final PropertyClearFacet clearFacet, - final FacetHolder holder) { - - super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, holder); - } -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEvent.java similarity index 77% rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEvent.java index 754a31c2cf9..ade1fa2df24 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEvent.java @@ -23,18 +23,18 @@ import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet; -public class PropertySetterFacetForDomainEventFromDefault +public class PropertySetterFacetForDomainEvent extends PropertySetterOrClearFacetForDomainEventAbstract implements PropertySetterFacet { - - public PropertySetterFacetForDomainEventFromDefault( + public PropertySetterFacetForDomainEvent( final Class> eventType, - final PropertyOrCollectionAccessorFacet getterFacet, - final PropertySetterFacet setterFacet, - final FacetHolder holder) { + final EventTypeOrigin eventTypeOrigin, + final PropertyOrCollectionAccessorFacet getterFacet, + final PropertySetterFacet setterFacet, + final FacetHolder holder) { - super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, holder); + super(PropertySetterFacet.class, eventType, eventTypeOrigin, getterFacet, setterFacet, null, holder); } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java deleted file mode 100644 index 77351e625e5..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.properties.property.modify; - -import org.apache.causeway.applib.events.domain.PropertyDomainEvent; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; -import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet; - -public class PropertySetterFacetForDomainEventFromPropertyAnnotation -extends PropertySetterOrClearFacetForDomainEventAbstract -implements PropertySetterFacet { - - - public PropertySetterFacetForDomainEventFromPropertyAnnotation( - final Class> eventType, - final PropertyOrCollectionAccessorFacet getterFacet, - final PropertySetterFacet setterFacet, - final FacetHolder holder) { - - super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, holder); - } -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java index cf961e6a78a..2306ba8e274 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java @@ -28,8 +28,8 @@ import org.apache.causeway.core.metamodel.execution.InteractionInternal; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.DomainEventHelper; -import org.apache.causeway.core.metamodel.facets.SingleValueFacetAbstract; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearFacet; import org.apache.causeway.core.metamodel.facets.properties.update.clear.PropertyClearingAccessor; @@ -48,7 +48,7 @@ import lombok.val; public abstract class PropertySetterOrClearFacetForDomainEventAbstract -extends SingleValueFacetAbstract>> +extends DomainEventFacetAbstract> implements PropertyClearingAccessor, PropertySettingAccessor { @@ -62,12 +62,13 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract protected PropertySetterOrClearFacetForDomainEventAbstract( final Class facetType, final Class> eventType, - final PropertyOrCollectionAccessorFacet getterFacet, - final PropertySetterFacet setterFacet, - final PropertyClearFacet clearFacet, - final FacetHolder holder) { + final EventTypeOrigin eventTypeOrigin, + final PropertyOrCollectionAccessorFacet getterFacet, + final PropertySetterFacet setterFacet, + final PropertyClearFacet clearFacet, + final FacetHolder holder) { - super(facetType, eventType, holder); + super(facetType, eventType, eventTypeOrigin, holder); this.getterFacet = getterFacet; this.setterFacet = setterFacet; this.clearFacet = clearFacet; @@ -198,7 +199,7 @@ public Object execute(final PropertyEdit currentExecution) { val propertyDomainEvent = domainEventHelper.postEventForProperty( AbstractDomainEvent.Phase.EXECUTING, - PropertySetterOrClearFacetForDomainEventAbstract.this.getEventType(), null, + uncheckedCast(PropertySetterOrClearFacetForDomainEventAbstract.this.getEventType()), null, PropertySetterOrClearFacetForDomainEventAbstract.this.getFacetHolder(), head, oldValuePojo, newValuePojo); @@ -224,7 +225,8 @@ public Object execute(final PropertyEdit currentExecution) { // ... post the executed event domainEventHelper.postEventForProperty( AbstractDomainEvent.Phase.EXECUTED, - PropertySetterOrClearFacetForDomainEventAbstract.this.getEventType(), uncheckedCast(propertyDomainEvent), + uncheckedCast(PropertySetterOrClearFacetForDomainEventAbstract.this.getEventType()), + uncheckedCast(propertyDomainEvent), PropertySetterOrClearFacetForDomainEventAbstract.this.getFacetHolder(), head, oldValuePojo, actualNewValue); } @@ -278,10 +280,6 @@ private ManagedObject doSetOrClearProperty( ); } - public Class> getEventType() { - return uncheckedCast(value()); - } - private InteractionDtoFactory getInteractionDtoServiceInternal() { return getServiceRegistry().lookupServiceElseFail(InteractionDtoFactory.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java index aed7c85b9bd..a74d9e17d00 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java @@ -30,6 +30,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +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.assertNull; @@ -50,6 +51,7 @@ import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.FacetUtil; import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; @@ -65,11 +67,9 @@ import org.apache.causeway.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.maxlength.MaxLengthFacetForPropertyAnnotation; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromDefault; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromPropertyAnnotation; +import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEvent; import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault; -import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation; +import org.apache.causeway.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEvent; import org.apache.causeway.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.snapshot.SnapshotExcludeFacetForPropertyAnnotation; @@ -236,17 +236,18 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {} // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); assertNotNull(setterFacet); - assertTrue(setterFacet instanceof PropertySetterFacetForDomainEventFromPropertyAnnotation, - "unexpected facet: " + setterFacet); - final PropertySetterFacetForDomainEventFromPropertyAnnotation setterFacetImpl = (PropertySetterFacetForDomainEventFromPropertyAnnotation) setterFacet; - assertThat(setterFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); + final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); + assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); assertNotNull(clearFacet); - assertTrue(clearFacet instanceof PropertyClearFacetForDomainEventFromPropertyAnnotation); - final PropertyClearFacetForDomainEventFromPropertyAnnotation clearFacetImpl = (PropertyClearFacetForDomainEventFromPropertyAnnotation) clearFacet; - assertThat(clearFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); + final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); + assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); } @@ -284,17 +285,18 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {} // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); assertNotNull(setterFacet); - assertTrue(setterFacet instanceof PropertySetterFacetForDomainEventFromPropertyAnnotation, - "unexpected facet: " + setterFacet); - final PropertySetterFacetForDomainEventFromPropertyAnnotation setterFacetImpl = (PropertySetterFacetForDomainEventFromPropertyAnnotation) setterFacet; - assertThat(setterFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); + final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); + assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); assertNotNull(clearFacet); - assertTrue(clearFacet instanceof PropertyClearFacetForDomainEventFromPropertyAnnotation); - final PropertyClearFacetForDomainEventFromPropertyAnnotation clearFacetImpl = (PropertyClearFacetForDomainEventFromPropertyAnnotation) clearFacet; - assertThat(clearFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); + final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, clearFacetImpl.getEventTypeOrigin()); + assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); } @Test @@ -332,17 +334,18 @@ class NamedChangedDomainEvent extends PropertyDomainEvent { // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); assertNotNull(setterFacet); - assertTrue(setterFacet instanceof PropertySetterFacetForDomainEventFromPropertyAnnotation, - "unexpected facet: " + setterFacet); - final PropertySetterFacetForDomainEventFromPropertyAnnotation setterFacetImpl = (PropertySetterFacetForDomainEventFromPropertyAnnotation) setterFacet; - assertThat(setterFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); + final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); + assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); // then final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); assertNotNull(clearFacet); - assertTrue(clearFacet instanceof PropertyClearFacetForDomainEventFromPropertyAnnotation); - final PropertyClearFacetForDomainEventFromPropertyAnnotation clearFacetImpl = (PropertyClearFacetForDomainEventFromPropertyAnnotation) clearFacet; - assertThat(clearFacetImpl.value(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); + final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, clearFacetImpl.getEventTypeOrigin()); + assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); } @Test @@ -380,17 +383,17 @@ class Customer { // then final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); assertNotNull(setterFacet); - assertTrue(setterFacet instanceof PropertySetterFacetForDomainEventFromDefault, + assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); - final PropertySetterFacetForDomainEventFromDefault setterFacetImpl = (PropertySetterFacetForDomainEventFromDefault) setterFacet; - assertThat(setterFacetImpl.value(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); + final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; + assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); // then final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); assertNotNull(clearFacet); - assertTrue(clearFacet instanceof PropertyClearFacetForDomainEventFromDefault); - final PropertyClearFacetForDomainEventFromDefault clearFacetImpl = (PropertyClearFacetForDomainEventFromDefault) clearFacet; - assertThat(clearFacetImpl.value(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); + assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); + final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; + assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); } } diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml index 738a027adeb..98c6cf0af6a 100644 --- a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml +++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml @@ -6379,12 +6379,13 @@ - + - + + + - @@ -6392,12 +6393,13 @@ - - + + + + - @@ -7334,12 +7336,13 @@ - + - + + + - @@ -7347,12 +7350,13 @@ - - + + + + - @@ -8156,12 +8160,13 @@ - + - + + + - @@ -8169,12 +8174,13 @@ - - + + + + - @@ -8996,12 +9002,13 @@ - + - + + + - @@ -9009,12 +9016,13 @@ - - + + + + - @@ -9085,12 +9093,13 @@ - + - + + + - @@ -9098,12 +9107,13 @@ - - + + + + - @@ -10237,12 +10247,13 @@ - + - + + + - @@ -10250,12 +10261,13 @@ - - + + + + - @@ -13839,12 +13851,13 @@ - + - + + + - @@ -13852,12 +13865,13 @@ - - + + + + - @@ -17076,12 +17090,13 @@ - + - + + + - @@ -17089,12 +17104,13 @@ - - + + + + - @@ -18228,12 +18244,13 @@ - + - + + + - @@ -18241,12 +18258,13 @@ - - + + + + - @@ -19384,12 +19402,13 @@ - + - + + + - @@ -19397,12 +19416,13 @@ - - + + + + - @@ -25295,12 +25315,13 @@ - + - + + + - @@ -25308,12 +25329,13 @@ - - + + + + - @@ -26384,12 +26406,13 @@ - + - + + + - @@ -26397,12 +26420,13 @@ - - + + + + - @@ -27357,12 +27381,13 @@ - + - + + + - @@ -27370,12 +27395,13 @@ - - + + + + - From 2cb388c1a5a1e2912bc460617bf9f6916c5f5a98 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 06:48:44 +0200 Subject: [PATCH 10/37] CAUSEWAY-3409: further simplify event-type holding facet hierarchy (actions) --- .../facets/DomainEventFacetAbstract.java | 4 + .../action/ActionAnnotationFacetFactory.java | 70 +- .../invocation/ActionDomainEventFacet.java | 91 +- .../ActionInvocationFacetAbstract.java | 36 +- ... ActionInvocationFacetForDomainEvent.java} | 26 +- ...cetForDomainEventFromActionAnnotation.java | 38 - ...ocationFacetForDomainEventFromDefault.java | 38 - .../modify/CollectionDomainEventFacet.java | 41 +- .../PropertyAnnotationFacetFactory.java | 2 + .../modify/PropertyDomainEventFacet.java | 47 +- ...weakDomainEventsForMixinPostProcessor.java | 11 +- ...tionFacetFactoryTest_ActionInvocation.java | 14 +- ...AnnotationFacetFactoryTest_Invocation.java | 25 +- ...sViewer_IntegTest.dump_facets.approved.xml | 35 +- ...nDomain_IntegTest.dump_facets.approved.xml | 35 +- ...sViewer_IntegTest.dump_facets.approved.xml | 25 +- ...pDomain_IntegTest.dump_facets.approved.xml | 25 +- ...etaModelRegressionTest.verify.approved.xml | 845 +++++++++++------- 18 files changed, 808 insertions(+), 600 deletions(-) rename core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/{ActionInvocationFacetForDomainEventAbstract.java => ActionInvocationFacetForDomainEvent.java} (91%) delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventFromActionAnnotation.java delete mode 100644 core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventFromDefault.java diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java index fa06d2e0adf..8eedca62dac 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/DomainEventFacetAbstract.java @@ -27,6 +27,10 @@ import lombok.NonNull; +/** + * Base for any event-type holding facets, + * while defining the facet-type is up to implementors. + */ public abstract class DomainEventFacetAbstract extends FacetAbstract { diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java index d8022e605c2..57ce939e5fa 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java @@ -23,20 +23,17 @@ import javax.inject.Inject; import org.apache.causeway.applib.annotation.Action; -import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.applib.mixins.system.HasInteractionId; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actions.action.choicesfrom.ChoicesFromFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromDefault; +import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEvent; import org.apache.causeway.core.metamodel.facets.actions.action.prototype.PrototypeFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.actions.action.typeof.TypeOfFacetForActionAnnotation; @@ -44,10 +41,7 @@ import org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation; import org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingActionFacetForActionAnnotation; -import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.ActionDomainEventDefaultFacetForDomainObjectAnnotation; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.specloader.validator.MetaModelValidatorForAmbiguousMixinAnnotations; -import org.apache.causeway.core.metamodel.util.EventUtil; import lombok.val; @@ -110,65 +104,41 @@ void processInvocation(final ProcessMethodContext processMethodContext, final Op val cls = processMethodContext.getCls(); val typeSpec = getSpecificationLoader().loadSpecification(cls); - val holder = processMethodContext.getFacetHolder(); + if(typeSpec.isMixin()) { + /* don't process mixed in actions, as we would require the actual mixee + * (deferred to post processing) */ + //TODO[CAUSEWAY-3409] breaks tests ... return; + } - //FIXME[CAUSEWAY-3409] - //_Assert.assertFalse(typeSpec.isMixin(), ()->"we need the mixee instead"); + val holder = processMethodContext.getFacetHolder(); // // Set up ActionDomainEventFacet, which will act as the hiding/disabling/validating advisor // - // search for @Action(domainEvent=...), else use the default event type - val actionDomainEventFacet = - actionIfAny - .map(Action::domainEvent) - .filter(domainEvent -> domainEvent != ActionDomainEvent.Default.class) - .map(domainEvent -> - new ActionDomainEventFacet( - defaultFromDomainObjectIfRequired(typeSpec, domainEvent), EventTypeOrigin.ANNOTATED_MEMBER, holder)) - .orElse( - new ActionDomainEventFacet( - defaultFromDomainObjectIfRequired(typeSpec, ActionDomainEvent.Default.class), EventTypeOrigin.DEFAULT, holder) - ); - - if(EventUtil.eventTypeIsPostable( - actionDomainEventFacet.getEventType(), - ActionDomainEvent.Noop.class, - ActionDomainEvent.Default.class, - getConfiguration().getApplib().getAnnotation().getAction().getDomainEvent().isPostForDefault())) { + ActionDomainEventFacet + .createRegular(actionIfAny, typeSpec, holder) + .ifPresent(actionDomainEventFacet->{ + addFacet(actionDomainEventFacet); - } - // replace the current actionInvocationFacet with one that will - // emit the appropriate domain event and then delegate onto the underlying + // replace the current actionInvocationFacet with one that will + // emit the appropriate domain event and then delegate onto the underlying + + addFacet( + //TODO[CAUSEWAY-3409] we don't install those for the mixin case, if bailing out above + new ActionInvocationFacetForDomainEvent( + actionDomainEventFacet.getEventType(), actionDomainEventFacet.getEventTypeOrigin(), + actionMethod, typeSpec, returnSpec, holder)); + }); - addFacet(actionDomainEventFacet.getEventTypeOrigin().isAnnotatedMember() - ? new ActionInvocationFacetForDomainEventFromActionAnnotation( - actionDomainEventFacet.getEventType(), actionMethod, typeSpec, returnSpec, holder) - : new ActionInvocationFacetForDomainEventFromDefault( - actionDomainEventFacet.getEventType(), actionMethod, typeSpec, returnSpec, holder)); } finally { processMethodContext.removeMethod(actionMethod.asMethodForIntrospection()); } } - private static Class> defaultFromDomainObjectIfRequired( - final ObjectSpecification typeSpec, - final Class> actionDomainEventType) { - - if (actionDomainEventType == ActionDomainEvent.Default.class) { - val typeFromDomainObject = - typeSpec.getFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class); - if (typeFromDomainObject != null) { - return typeFromDomainObject.getEventType(); - } - } - return actionDomainEventType; - } - void processHidden(final ProcessMethodContext processMethodContext, final Optional actionIfAny) { val facetedMethod = processMethodContext.getFacetHolder(); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java index 3375d3da42c..d7150a4e161 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacet.java @@ -18,8 +18,10 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action.invocation; +import java.lang.reflect.Method; import java.util.Optional; +import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.applib.services.i18n.TranslatableString; @@ -27,6 +29,7 @@ import org.apache.causeway.applib.services.i18n.TranslationService; import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.internal.assertions._Assert; +import org.apache.causeway.commons.internal.reflection._Annotations; import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; @@ -44,6 +47,11 @@ import org.apache.causeway.core.metamodel.interactions.VisibilityContext; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; +import org.apache.causeway.core.metamodel.specloader.specimpl.ObjectActionMixedIn; +import org.apache.causeway.core.metamodel.util.EventUtil; + +import lombok.NonNull; +import lombok.val; public class ActionDomainEventFacet extends DomainEventFacetAbstract> @@ -52,15 +60,82 @@ public class ActionDomainEventFacet DisablingInteractionAdvisor, ValidatingInteractionAdvisor { + // -- FACET TYPE + private static Class type() { return ActionDomainEventFacet.class; } + // -- FACTORIES + + /** + * For regular (non mixed-in) members only. + *

+ * @return empty, if event is not post-able + */ + public static Optional createRegular( + final @NonNull Optional actionIfAny, + final @NonNull ObjectSpecification typeSpec, + final @NonNull FacetHolder facetHolder){ + + val actionDomainEventFacet = + actionIfAny + .map(Action::domainEvent) + .filter(domainEvent -> domainEvent != ActionDomainEvent.Default.class) + .map(domainEvent -> + new ActionDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, domainEvent), EventTypeOrigin.ANNOTATED_MEMBER, facetHolder)) + .orElse( + new ActionDomainEventFacet( + defaultFromDomainObjectIfRequired(typeSpec, ActionDomainEvent.Default.class), EventTypeOrigin.DEFAULT, facetHolder) + ); + + return EventUtil.eventTypeIsPostable( + actionDomainEventFacet.getEventType(), + ActionDomainEvent.Noop.class, + ActionDomainEvent.Default.class, + facetHolder.getConfiguration().getApplib().getAnnotation().getAction().getDomainEvent().isPostForDefault()) + ? Optional.of(actionDomainEventFacet) + : Optional.empty(); + } + + /** + * For mixed-in members. + */ + public static Optional createMixedIn( + final @NonNull ObjectSpecification mixeeSpecification, + final @NonNull ObjectActionMixedIn mixedInAction) { + + + val facetedMethod = mixedInAction.getFacetedMethod(); + final Method method = facetedMethod.getMethod().asMethodElseFail(); // no-arg method, should have a regular facade + + //TODO[CAUSEWAY-3409] what if the @Action annotation is not on the method but on the (mixin) type + final Action actionAnnot = + _Annotations.synthesize(method, Action.class) + .orElse(null); + + if(actionAnnot != null) { + final Class> actionDomainEventType = + defaultFromDomainObjectIfRequired( + mixeeSpecification, actionAnnot.domainEvent()); + + return Optional.of( + new ActionDomainEventFacet( + actionDomainEventType, EventTypeOrigin.ANNOTATED_MEMBER, mixedInAction)); + } + + return Optional.empty(); + + } + + // -- CONSTRUCTION + private final TranslationService translationService; private final TranslationContext translationContext; private final DomainEventHelper domainEventHelper; - public ActionDomainEventFacet( + protected ActionDomainEventFacet( final Class> eventType, final EventTypeOrigin eventTypeOrigin, final FacetHolder holder) { @@ -164,4 +239,18 @@ private static ObjectAction actionFrom(final InteractionContext ic) { return ((ActionInteractionContext) ic).getObjectAction(); } + private static Class> defaultFromDomainObjectIfRequired( + final ObjectSpecification typeSpec, + final Class> actionDomainEventType) { + + if (actionDomainEventType == ActionDomainEvent.Default.class) { + val typeFromDomainObject = + typeSpec.getFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class); + if (typeFromDomainObject != null) { + return typeFromDomainObject.getEventType(); + } + } + return actionDomainEventType; + } + } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetAbstract.java index eb188b7b373..d85051424e1 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetAbstract.java @@ -18,20 +18,46 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action.invocation; +import java.util.function.BiConsumer; + +import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facetapi.FacetAbstract; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; +import org.apache.causeway.core.metamodel.facets.ImperativeFacet; + +import lombok.NonNull; public abstract class ActionInvocationFacetAbstract -extends FacetAbstract -implements ActionInvocationFacet { +extends DomainEventFacetAbstract> +implements ActionInvocationFacet, ImperativeFacet { private static final Class type() { return ActionInvocationFacet.class; } - public ActionInvocationFacetAbstract(final FacetHolder holder) { - super(type(), holder); + protected ActionInvocationFacetAbstract( + final Class> eventType, + final EventTypeOrigin eventTypeOrigin, + final FacetHolder holder) { + super(type(), eventType, eventTypeOrigin, holder); + } + + @Override + public void visitAttributes(final BiConsumer visitor) { + super.visitAttributes(visitor); + ImperativeFacet.visitAttributes(this, visitor); + visitor.accept("declaringType", getDeclaringType()); + visitor.accept("returnType", getReturnType()); + //visitor.accept("eventType", getEventType()); done already in super + //visitor.accept("eventTypeOrigin", getEventTypeOrigin()); done already in super + } + + @Override + public boolean semanticEquals(final @NonNull Facet other) { + return other instanceof ActionInvocationFacetAbstract + ? this.getEventType() == ((ActionInvocationFacetAbstract)other).getEventType() + : false; } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEvent.java similarity index 91% rename from core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java rename to core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEvent.java index 23a668da282..17b9c290e7b 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEvent.java @@ -21,7 +21,6 @@ import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Objects; -import java.util.function.BiConsumer; import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.ActionDomainEvent; @@ -54,26 +53,24 @@ import lombok.SneakyThrows; import lombok.val; -public abstract class ActionInvocationFacetForDomainEventAbstract -extends ActionInvocationFacetAbstract -implements ImperativeFacet { +public class ActionInvocationFacetForDomainEvent +extends ActionInvocationFacetAbstract { - @Getter private final Class> eventType; @Getter(onMethod_ = {@Override}) private final @NonNull Can methods; - @Getter(onMethod = @__(@Override)) private final ObjectSpecification declaringType; - @Getter(onMethod = @__(@Override)) private final ObjectSpecification returnType; + @Getter(onMethod_ = {@Override}) private final ObjectSpecification declaringType; + @Getter(onMethod_ = {@Override}) private final ObjectSpecification returnType; private final ServiceRegistry serviceRegistry; private final DomainEventHelper domainEventHelper; - protected ActionInvocationFacetForDomainEventAbstract( + public ActionInvocationFacetForDomainEvent( final Class> eventType, + final EventTypeOrigin eventTypeOrigin, final MethodFacade method, final ObjectSpecification declaringType, final ObjectSpecification returnType, final FacetHolder holder) { - super(holder); - this.eventType = eventType; + super(eventType, eventTypeOrigin, holder); this.methods = ImperativeFacet.singleMethod(method); this.declaringType = declaringType; this.returnType = returnType; @@ -106,15 +103,6 @@ public ManagedObject invoke( .getValue().orElse(null); } - @Override - public void visitAttributes(final BiConsumer visitor) { - super.visitAttributes(visitor); - ImperativeFacet.visitAttributes(this, visitor); - visitor.accept("declaringType", declaringType); - visitor.accept("returnType", returnType); - visitor.accept("eventType", eventType); - } - // -- HELPER private ManagedObject doInvoke( diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventFromActionAnnotation.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventFromActionAnnotation.java deleted file mode 100644 index bfd6385159b..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventFromActionAnnotation.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.actions.action.invocation; - -import org.apache.causeway.applib.events.domain.ActionDomainEvent; -import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; - -public class ActionInvocationFacetForDomainEventFromActionAnnotation -extends ActionInvocationFacetForDomainEventAbstract { - - public ActionInvocationFacetForDomainEventFromActionAnnotation( - final Class> eventType, - final MethodFacade method, - final ObjectSpecification onType, - final ObjectSpecification returnType, - final FacetHolder holder) { - - super(eventType, method, onType, returnType, holder); - } -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventFromDefault.java deleted file mode 100644 index 0a0c0d6e2f2..00000000000 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventFromDefault.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets.actions.action.invocation; - -import org.apache.causeway.applib.events.domain.ActionDomainEvent; -import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; - -public class ActionInvocationFacetForDomainEventFromDefault -extends ActionInvocationFacetForDomainEventAbstract { - - public ActionInvocationFacetForDomainEventFromDefault( - final Class> eventType, - final MethodFacade method, - final ObjectSpecification onType, - final ObjectSpecification returnType, - final FacetHolder holder) { - - super(eventType, method, onType, returnType, holder); - } -} diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java index 2419d4b7e9d..41c1069f296 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacet.java @@ -45,6 +45,12 @@ public class CollectionDomainEventFacet extends DomainEventFacetAbstract> implements HidingInteractionAdvisor { + // -- FACET TYPE + + private static Class type() { + return CollectionDomainEventFacet.class; + } + // -- FACTORIES /** @@ -105,24 +111,7 @@ public static Optional createMixedIn( return Optional.empty(); } - // -- - - private static Class type() { - return CollectionDomainEventFacet.class; - } - - private static Class> defaultFromDomainObjectIfRequired( - final ObjectSpecification typeSpec, - final Class> collectionDomainEventType) { - if (collectionDomainEventType == CollectionDomainEvent.Default.class) { - final CollectionDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject = - typeSpec.getFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class); - if (typeFromDomainObject != null) { - return typeFromDomainObject.getEventType(); - } - } - return collectionDomainEventType; - } + // -- CONSTRUCTION private final DomainEventHelper domainEventHelper; @@ -158,4 +147,20 @@ public String hides(final VisibilityContext ic) { return null; } + // -- HELPER + + private static Class> defaultFromDomainObjectIfRequired( + final ObjectSpecification typeSpec, + final Class> collectionDomainEventType) { + if (collectionDomainEventType == CollectionDomainEvent.Default.class) { + final CollectionDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject = + typeSpec.getFacet(CollectionDomainEventDefaultFacetForDomainObjectAnnotation.class); + if (typeFromDomainObject != null) { + return typeFromDomainObject.getEventType(); + } + } + return collectionDomainEventType; + } + + } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java index fc96f0abb2f..2455af6334d 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java @@ -144,6 +144,7 @@ void processModify(final ProcessMethodContext processMethodContext, final Option holder.lookupFacet(PropertySetterFacet.class) .ifPresent(setterFacet-> + //TODO[CAUSEWAY-3409] we don't install those for the mixin case // the current setter facet will end up as the underlying facet addFacet(new PropertySetterFacetForDomainEvent( eventType, eventTypeOrigin, getterFacet, setterFacet, holder))); @@ -151,6 +152,7 @@ void processModify(final ProcessMethodContext processMethodContext, final Option holder.lookupFacet(PropertyClearFacet.class) .ifPresent(clearFacet-> + //TODO[CAUSEWAY-3409] we don't install those for the mixin case // the current clear facet will end up as the underlying facet addFacet(new PropertyClearFacetForDomainEvent( eventType, eventTypeOrigin, getterFacet, clearFacet, holder))); diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java index 5c472b10eb8..564d5f005c6 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacet.java @@ -59,6 +59,12 @@ public class PropertyDomainEventFacet DisablingInteractionAdvisor, ValidatingInteractionAdvisor { + // -- FACET TYPE + + private static Class type() { + return PropertyDomainEventFacet.class; + } + // -- FACTORIES /** @@ -67,10 +73,10 @@ public class PropertyDomainEventFacet * @return empty, if event is not post-able */ public static Optional createRegular( - final Optional propertyIfAny, - final ObjectSpecification typeSpec, - final PropertyOrCollectionAccessorFacet getterFacet, - final FacetHolder facetHolder) { + final @NonNull Optional propertyIfAny, + final @NonNull ObjectSpecification typeSpec, + final @NonNull PropertyOrCollectionAccessorFacet getterFacet, + final @NonNull FacetHolder facetHolder) { val propertyDomainEventFacet = propertyIfAny .map(Property::domainEvent) @@ -118,27 +124,9 @@ public static Optional createMixedIn( } return Optional.empty(); - - } - - // -- - - private static Class type() { - return PropertyDomainEventFacet.class; } - private static Class> defaultFromDomainObjectIfRequired( - final ObjectSpecification typeSpec, - final Class> propertyDomainEventType) { - if (propertyDomainEventType == PropertyDomainEvent.Default.class) { - final PropertyDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject = - typeSpec.getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class); - if (typeFromDomainObject != null) { - return typeFromDomainObject.getEventType(); - } - } - return propertyDomainEventType; - } + // -- CONSTRUCTION private final DomainEventHelper domainEventHelper; @@ -252,6 +240,19 @@ public void visitAttributes(final BiConsumer visitor) { visitor.accept("getterFacet", getterFacetIfAny); } + // -- HELPER + private static Class> defaultFromDomainObjectIfRequired( + final ObjectSpecification typeSpec, + final Class> propertyDomainEventType) { + if (propertyDomainEventType == PropertyDomainEvent.Default.class) { + final PropertyDomainEventDefaultFacetForDomainObjectAnnotation typeFromDomainObject = + typeSpec.getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class); + if (typeFromDomainObject != null) { + return typeFromDomainObject.getEventType(); + } + } + return propertyDomainEventType; + } } diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java index ce2b606936b..d9d4fcaae55 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/members/TweakDomainEventsForMixinPostProcessor.java @@ -44,8 +44,11 @@ public TweakDomainEventsForMixinPostProcessor(final MetaModelContext metaModelCo @Override public void postProcessAction(final ObjectSpecification objectSpecification, final ObjectAction objectAction) { if(objectAction.isMixedIn()) { - // unlike collection and property mixins, there is no need to create the DomainEventFacet, it will - // have been created in the ActionAnnotationFacetFactory + + //TODO[CAUSEWAY-3409] yet already created in ActionAnnotationFacetFactory + //FacetUtil.addFacetIfPresent( + //ActionDomainEventFacet.createMixedIn(objectSpecification, (ObjectActionMixedIn)objectAction)); + //TODO[CAUSEWAY-3409] even when this lookup returns empty, we still might need an event-type holding facet objectAction .lookupFacet(ActionDomainEventFacet.class) .ifPresent(actionDomainEventFacet-> @@ -56,7 +59,7 @@ public void postProcessAction(final ObjectSpecification objectSpecification, fin @Override public void postProcessProperty(final ObjectSpecification objectSpecification, final OneToOneAssociation property) { - if(property instanceof OneToOneAssociationMixedIn) { + if(property.isMixedIn()) { FacetUtil.addFacetIfPresent( PropertyDomainEventFacet.createMixedIn(objectSpecification, (OneToOneAssociationMixedIn)property)); @@ -71,7 +74,7 @@ public void postProcessProperty(final ObjectSpecification objectSpecification, f @Override public void postProcessCollection(final ObjectSpecification objectSpecification, final OneToManyAssociation collection) { - if(collection instanceof OneToManyAssociationMixedIn) { + if(collection.isMixedIn()) { FacetUtil.addFacetIfPresent( CollectionDomainEventFacet.createMixedIn(objectSpecification, (OneToManyAssociationMixedIn)collection)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java index 4412c49703f..f22a09459af 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java @@ -32,7 +32,7 @@ import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract; +import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEvent; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethod; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethodFactory; @@ -83,8 +83,8 @@ public void someAction() { final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); assertNotNull(facet); - assertTrue(facet instanceof ActionInvocationFacetForDomainEventAbstract); - final ActionInvocationFacetForDomainEventAbstract actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEventAbstract) facet; + assertTrue(facet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEvent) facet; assertEquals(actionMethod, actionInvocationFacetViaMethod.getMethods().getFirstElseFail()); assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(actionMethod)); @@ -102,7 +102,7 @@ public void someAction() { .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); - final ActionInvocationFacetForDomainEventAbstract actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEventAbstract) facet; + final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEvent) facet; assertEquals(voidSpec, actionInvocationFacetViaMethod.getReturnType()); } @@ -119,7 +119,7 @@ public String someAction() { .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); - final ActionInvocationFacetForDomainEventAbstract actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEventAbstract) facet; + final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEvent) facet; assertEquals(stringSpec, actionInvocationFacetViaMethod.getReturnType()); } @@ -139,8 +139,8 @@ public String someAction() { .forTesting(LocalCustomer.class, null, actionMethod, methodRemover, facetedMethod)); final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); - final ActionInvocationFacetForDomainEventAbstract actionInvocationFacetViaMethod = - (ActionInvocationFacetForDomainEventAbstract) facet; + final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = + (ActionInvocationFacetForDomainEvent) facet; assertEquals( customerSpec, actionInvocationFacetViaMethod.getDeclaringType()); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java index 0ddedc08276..86b3b500587 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java @@ -21,17 +21,18 @@ import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; +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.causeway.applib.annotation.Action; import org.apache.causeway.applib.events.domain.ActionDomainEvent; import org.apache.causeway.core.metamodel.facetapi.Facet; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation; -import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromDefault; +import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEvent; import static org.apache.causeway.core.metamodel.commons.matchers.CausewayMatchers.classEqualTo; @@ -82,8 +83,9 @@ public void someAction() { final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); assertNotNull(invocationFacet); - assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEventFromActionAnnotation); - final ActionInvocationFacetForDomainEventFromActionAnnotation invocationFacetImpl = (ActionInvocationFacetForDomainEventFromActionAnnotation) invocationFacet; + assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, invocationFacetImpl.getEventTypeOrigin()); assertThat(invocationFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); } @@ -122,9 +124,9 @@ public void someAction() { final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); assertNotNull(invocationFacet); - assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEventFromActionAnnotation); - final ActionInvocationFacetForDomainEventFromActionAnnotation invocationFacetImpl = - (ActionInvocationFacetForDomainEventFromActionAnnotation) invocationFacet; + assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, invocationFacetImpl.getEventTypeOrigin()); assertThat(invocationFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); } @@ -162,8 +164,9 @@ public void someAction() { final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); assertNotNull(invocationFacet); - assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEventFromActionAnnotation); - final ActionInvocationFacetForDomainEventFromActionAnnotation invocationFacetImpl = (ActionInvocationFacetForDomainEventFromActionAnnotation) invocationFacet; + assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, invocationFacetImpl.getEventTypeOrigin()); assertThat(invocationFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); } @@ -201,8 +204,8 @@ public void someAction() { final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); assertNotNull(invocationFacet); - assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEventFromDefault); - final ActionInvocationFacetForDomainEventFromDefault invocationFacetImpl = (ActionInvocationFacetForDomainEventFromDefault) invocationFacet; + assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; assertThat(invocationFacetImpl.getEventType(), classEqualTo(ActionDomainEvent.Default.class)); } } diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml index 78c87db6ac5..49217be8da1 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomainWithPdfJsViewer_IntegTest.dump_facets.approved.xml @@ -115,10 +115,11 @@ - + - + + @@ -216,10 +217,11 @@ - + - + + @@ -470,10 +472,11 @@ - + - + + @@ -627,10 +630,11 @@ - + - + + @@ -731,10 +735,11 @@ - + - + + @@ -835,10 +840,11 @@ - + - + + @@ -1041,10 +1047,11 @@ - + - + + diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml index 766895b30df..066719d6e6a 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_MixinDomain_IntegTest.dump_facets.approved.xml @@ -115,10 +115,11 @@ - + - + + @@ -209,10 +210,11 @@ - + - + + @@ -463,10 +465,11 @@ - + - + + @@ -620,10 +623,11 @@ - + - + + @@ -724,10 +728,11 @@ - + - + + @@ -828,10 +833,11 @@ - + - + + @@ -1034,10 +1040,11 @@ - + - + + diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml index aa54f1065b1..e40b7175c04 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomainWithPdfjsViewer_IntegTest.dump_facets.approved.xml @@ -210,10 +210,11 @@ - + - + + @@ -464,10 +465,11 @@ - + - + + @@ -621,10 +623,11 @@ - + - + + @@ -725,10 +728,11 @@ - + - + + @@ -829,10 +833,11 @@ - + - + + diff --git a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml index fae4448a007..77556bcc190 100644 --- a/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml +++ b/extensions/vw/pdfjs/metamodel/src/test/java/org/apache/causeway/extensions/pdfjs/metamodel/PdfjsViewer_PropDomain_IntegTest.dump_facets.approved.xml @@ -203,10 +203,11 @@ - + - + + @@ -457,10 +458,11 @@ - + - + + @@ -614,10 +616,11 @@ - + - + + @@ -718,10 +721,11 @@ - + - + + @@ -822,10 +826,11 @@ - + - + + diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml index 98c6cf0af6a..153fce3c6c6 100644 --- a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml +++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/MetaModelRegressionTest.verify.approved.xml @@ -102,10 +102,11 @@ - + - + + @@ -197,10 +198,11 @@ - + - + + @@ -395,10 +397,11 @@ - + - + + @@ -530,10 +533,11 @@ - + - + + @@ -629,10 +633,11 @@ - + - + + @@ -728,10 +733,11 @@ - + - + + @@ -923,10 +929,11 @@ - + - + + @@ -1121,10 +1128,11 @@ - + - + + @@ -1256,10 +1264,11 @@ - + - + + @@ -1365,10 +1374,11 @@ - + - + + @@ -1464,10 +1474,11 @@ - + - + + @@ -1563,10 +1574,11 @@ - + - + + @@ -1662,10 +1674,11 @@ - + - + + @@ -1920,10 +1933,11 @@ - + - + + @@ -2118,10 +2132,11 @@ - + - + + @@ -2253,10 +2268,11 @@ - + - + + @@ -2352,10 +2368,11 @@ - + - + + @@ -2451,10 +2468,11 @@ - + - + + @@ -2550,10 +2568,11 @@ - + - + + @@ -2751,10 +2770,11 @@ - + - + + @@ -3010,10 +3030,11 @@ - + - + + @@ -3208,10 +3229,11 @@ - + - + + @@ -3343,10 +3365,11 @@ - + - + + @@ -3442,10 +3465,11 @@ - + - + + @@ -3541,10 +3565,11 @@ - + - + + @@ -3640,10 +3665,11 @@ - + - + + @@ -3847,10 +3873,11 @@ - + - + + @@ -4124,10 +4151,11 @@ - + - + + @@ -4236,10 +4264,11 @@ - + - + + @@ -4434,10 +4463,11 @@ - + - + + @@ -4569,10 +4599,11 @@ - + - + + @@ -4668,10 +4699,11 @@ - + - + + @@ -4767,10 +4799,11 @@ - + - + + @@ -5483,10 +5516,11 @@ - + - + + @@ -5588,10 +5622,11 @@ - + - + + @@ -5786,10 +5821,11 @@ - + - + + @@ -5921,10 +5957,11 @@ - + - + + @@ -6020,10 +6057,11 @@ - + - + + @@ -6119,10 +6157,11 @@ - + - + + @@ -6501,10 +6540,11 @@ - + - + + @@ -6699,10 +6739,11 @@ - + - + + @@ -6834,10 +6875,11 @@ - + - + + @@ -6933,10 +6975,11 @@ - + - + + @@ -7032,10 +7075,11 @@ - + - + + @@ -7131,10 +7175,11 @@ - + - + + @@ -7387,10 +7432,11 @@ - + - + + @@ -7585,10 +7631,11 @@ - + - + + @@ -7720,10 +7767,11 @@ - + - + + @@ -7819,10 +7867,11 @@ - + - + + @@ -7918,10 +7967,11 @@ - + - + + @@ -8211,10 +8261,11 @@ - + - + + @@ -8409,10 +8460,11 @@ - + - + + @@ -8544,10 +8596,11 @@ - + - + + @@ -8643,10 +8696,11 @@ - + - + + @@ -8742,10 +8796,11 @@ - + - + + @@ -9215,10 +9270,11 @@ - + - + + @@ -9413,10 +9469,11 @@ - + - + + @@ -9548,10 +9605,11 @@ - + - + + @@ -9647,10 +9705,11 @@ - + - + + @@ -9746,10 +9805,11 @@ - + - + + @@ -9845,10 +9905,11 @@ - + - + + @@ -9931,10 +9992,11 @@ - + - + + @@ -10369,10 +10431,11 @@ - + - + + @@ -10567,10 +10630,11 @@ - + - + + @@ -10702,10 +10766,11 @@ - + - + + @@ -10801,10 +10866,11 @@ - + - + + @@ -10900,10 +10966,11 @@ - + - + + @@ -10999,10 +11066,11 @@ - + - + + @@ -11085,10 +11153,11 @@ - + - + + @@ -11171,10 +11240,11 @@ - + - + + @@ -11383,10 +11453,11 @@ - + - + + @@ -11451,10 +11522,11 @@ - + - + + @@ -11649,10 +11721,11 @@ - + - + + @@ -11784,10 +11857,11 @@ - + - + + @@ -11883,10 +11957,11 @@ - + - + + @@ -11982,10 +12057,11 @@ - + - + + @@ -12182,10 +12258,11 @@ - + - + + @@ -12250,10 +12327,11 @@ - + - + + @@ -12448,10 +12526,11 @@ - + - + + @@ -12583,10 +12662,11 @@ - + - + + @@ -12682,10 +12762,11 @@ - + - + + @@ -12781,10 +12862,11 @@ - + - + + @@ -12981,10 +13063,11 @@ - + - + + @@ -13049,10 +13132,11 @@ - + - + + @@ -13247,10 +13331,11 @@ - + - + + @@ -13382,10 +13467,11 @@ - + - + + @@ -13481,10 +13567,11 @@ - + - + + @@ -13580,10 +13667,11 @@ - + - + + @@ -13897,10 +13985,11 @@ - + - + + @@ -14026,10 +14115,11 @@ - + - + + @@ -14155,10 +14245,11 @@ - + - + + @@ -14258,10 +14349,11 @@ - + - + + @@ -14378,10 +14470,11 @@ - + - + + @@ -14498,10 +14591,11 @@ - + - + + @@ -14680,10 +14774,11 @@ - + - + + @@ -14909,10 +15004,11 @@ - + - + + @@ -15127,10 +15223,11 @@ - + - + + @@ -15359,10 +15456,11 @@ - + - + + @@ -15591,10 +15689,11 @@ - + - + + @@ -15687,10 +15786,11 @@ - + - + + @@ -15902,10 +16002,11 @@ - + - + + @@ -16100,10 +16201,11 @@ - + - + + @@ -16235,10 +16337,11 @@ - + - + + @@ -16303,10 +16406,11 @@ - + - + + @@ -16402,10 +16506,11 @@ - + - + + @@ -16497,10 +16602,11 @@ - + - + + @@ -16727,10 +16833,11 @@ - + - + + @@ -16826,10 +16933,11 @@ - + - + + @@ -17224,10 +17332,11 @@ - + - + + @@ -17422,10 +17531,11 @@ - + - + + @@ -17557,10 +17667,11 @@ - + - + + @@ -17656,10 +17767,11 @@ - + - + + @@ -17751,10 +17863,11 @@ - + - + + @@ -17980,10 +18093,11 @@ - + - + + @@ -18378,10 +18492,11 @@ - + - + + @@ -18576,10 +18691,11 @@ - + - + + @@ -18711,10 +18827,11 @@ - + - + + @@ -18810,10 +18927,11 @@ - + - + + @@ -18909,10 +19027,11 @@ - + - + + @@ -19138,10 +19257,11 @@ - + - + + @@ -19536,10 +19656,11 @@ - + - + + @@ -19734,10 +19855,11 @@ - + - + + @@ -19869,10 +19991,11 @@ - + - + + @@ -19968,10 +20091,11 @@ - + - + + @@ -20067,10 +20191,11 @@ - + - + + @@ -20296,10 +20421,11 @@ - + - + + @@ -20486,10 +20612,11 @@ - + - + + @@ -20806,10 +20933,11 @@ - + - + + @@ -21115,10 +21243,11 @@ - + - + + @@ -21438,10 +21567,11 @@ - + - + + @@ -21761,10 +21891,11 @@ - + - + + @@ -21948,10 +22079,11 @@ - + - + + @@ -22257,10 +22389,11 @@ - + - + + @@ -22469,10 +22602,11 @@ - + - + + @@ -22681,10 +22815,11 @@ - + - + + @@ -22865,10 +23000,11 @@ - + - + + @@ -23086,10 +23222,11 @@ - + - + + @@ -23307,10 +23444,11 @@ - + - + + @@ -23502,10 +23640,11 @@ - + - + + @@ -23772,10 +23911,11 @@ - + - + + @@ -23970,10 +24110,11 @@ - + - + + @@ -24105,10 +24246,11 @@ - + - + + @@ -24204,10 +24346,11 @@ - + - + + @@ -24303,10 +24446,11 @@ - + - + + @@ -24498,10 +24642,11 @@ - + - + + @@ -24696,10 +24841,11 @@ - + - + + @@ -24831,10 +24977,11 @@ - + - + + @@ -24899,10 +25046,11 @@ - + - + + @@ -24998,10 +25146,11 @@ - + - + + @@ -25097,10 +25246,11 @@ - + - + + @@ -25366,10 +25516,11 @@ - + - + + @@ -25441,10 +25592,11 @@ - + - + + @@ -25639,10 +25791,11 @@ - + - + + @@ -25774,10 +25927,11 @@ - + - + + @@ -25873,10 +26027,11 @@ - + - + + @@ -25972,10 +26127,11 @@ - + - + + @@ -26162,10 +26318,11 @@ - + - + + @@ -26531,10 +26688,11 @@ - + - + + @@ -26729,10 +26887,11 @@ - + - + + @@ -26864,10 +27023,11 @@ - + - + + @@ -26963,10 +27123,11 @@ - + - + + @@ -27052,10 +27213,11 @@ - + - + + @@ -27151,10 +27313,11 @@ - + - + + @@ -27492,10 +27655,11 @@ - + - + + @@ -27690,10 +27854,11 @@ - + - + + @@ -27825,10 +27990,11 @@ - + - + + @@ -27924,10 +28090,11 @@ - + - + + @@ -27999,10 +28166,11 @@ - + - + + @@ -28098,10 +28266,11 @@ - + - + + From 11196a81dc957d92267453584ae897a86eb42d54 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 11:00:12 +0200 Subject: [PATCH 11/37] CAUSEWAY-3409: simplify FacetFactory testing --- .../ActionInvocationFacetForDomainEvent.java | 3 + .../AbstractFacetFactoryJupiterTestCase.java | 138 ---- .../facets/FacetFactoryTestAbstract.java | 244 +++++++ .../causeway/core/metamodel/facets/Utils.java | 14 +- .../ActionAnnotationFacetFactoryTest.java | 7 +- ...tionAnnotationFacetFactoryTest_Hidden.java | 32 +- ...AnnotationFacetFactoryTest_Invocation.java | 212 +++--- ...AnnotationFacetFactoryTest_RestrictTo.java | 63 +- ...nAnnotationFacetFactoryTest_Semantics.java | 69 +- ...tionAnnotationFacetFactoryTest_TypeOf.java | 123 ++-- ...ionFacetFactoryTest_commandPublishing.java | 68 +- ...nFacetFactoryTest_executionPublishing.java | 272 +++---- ...ctionLayoutAnnotationFacetFactoryTest.java | 108 ++- ...acetFromDomainServiceFacetFactoryTest.java | 4 +- .../CollectionAnnotationFacetFactoryTest.java | 143 ++-- ...assFaFacetOnTypeAnnotationFactoryTest.java | 4 +- ...omainObjectAnnotationFacetFactoryTest.java | 373 +++++----- .../NamedAnnotationFacetFactoryTest.java | 4 +- .../DomainObjectLayoutFactoryTest.java | 216 +++--- .../cssclass/CssClassFacetMethodTest.java | 12 +- .../TitleAnnotationFacetFactoryTest.java | 115 +-- .../ident/title/TitleFacetViaMethodTest.java | 4 +- .../logicaltype/LogicalTypeInferenceTest.java | 4 +- ...gableParentAnnotationFacetFactoryTest.java | 7 +- .../param/name/ParameterNameFacetTest.java | 57 +- .../ParameterAnnotationFacetFactoryTest.java | 299 +++----- .../PropertyAnnotationFacetFactoryTest.java | 676 ++++++++---------- 27 files changed, 1484 insertions(+), 1787 deletions(-) delete mode 100644 core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryJupiterTestCase.java create mode 100644 core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEvent.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEvent.java index 17b9c290e7b..780ccbc3157 100644 --- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEvent.java +++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEvent.java @@ -21,6 +21,7 @@ import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Objects; +import java.util.function.BiConsumer; import org.apache.causeway.applib.events.domain.AbstractDomainEvent; import org.apache.causeway.applib.events.domain.ActionDomainEvent; @@ -35,7 +36,9 @@ import org.apache.causeway.core.metamodel.commons.CanonicalInvoker; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.execution.InteractionInternal; +import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract; import org.apache.causeway.core.metamodel.facets.DomainEventHelper; import org.apache.causeway.core.metamodel.facets.ImperativeFacet; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryJupiterTestCase.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryJupiterTestCase.java deleted file mode 100644 index 1b152f3b23c..00000000000 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryJupiterTestCase.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets; - -import java.lang.reflect.Method; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.mockito.Mockito; - -import org.apache.causeway.applib.Identifier; -import org.apache.causeway.applib.id.LogicalType; -import org.apache.causeway.commons.collections.ImmutableEnumSet; -import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting; -import org.apache.causeway.core.metamodel._testing.MethodRemover_forTesting; -import org.apache.causeway.core.metamodel.context.HasMetaModelContext; -import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facetapi.MethodRemover; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; -import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; -import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter; -import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; -import org.apache.causeway.core.metamodel.valuesemantics.IntValueSemantics; - -import lombok.Getter; -import lombok.Setter; - -public abstract class AbstractFacetFactoryJupiterTestCase -implements HasMetaModelContext { - - @Getter(onMethod_ = {@Override}) - protected MetaModelContext metaModelContext; - - protected MethodRemover mockMethodRemover; - protected FacetHolder mockFacetHolder; - protected ObjectSpecification mockOnType; - protected ObjectSpecification mockObjSpec; - protected OneToOneAssociation mockOneToOneAssociation; - protected OneToManyAssociation mockOneToManyAssociation; - protected OneToOneActionParameter mockOneToOneActionParameter; - - protected FacetHolder facetHolder; - protected FacetedMethod facetedMethod; - protected FacetedMethodParameter facetedMethodParameter; - - public static class Customer { - @Getter @Setter private String firstName; - } - - protected void setUpMmc() { - 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); - mockObjSpec = Mockito.mock(ObjectSpecification.class); - mockOneToOneAssociation = Mockito.mock(OneToOneAssociation.class); - mockOneToManyAssociation = Mockito.mock(OneToManyAssociation.class); - mockOneToOneActionParameter = Mockito.mock(OneToOneActionParameter.class); - - facetHolder = FacetHolder.simple( - getMetaModelContext(), - Identifier.propertyIdentifier(LogicalType.fqcn(Customer.class), "firstName")); - facetedMethod = facetedSetter( - AbstractFacetFactoryTest.Customer.class, "firstName"); - facetedMethodParameter = new FacetedMethodParameter(getMetaModelContext(), - FeatureType.ACTION_PARAMETER_SINGULAR, facetedMethod.getOwningType(), - facetedMethod.getMethod(), 0); - } - - @AfterEach - protected void tearDown() throws Exception { - facetHolder = null; - facetedMethod = null; - 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); - } - - protected static boolean contains(final ImmutableEnumSet featureTypes, final FeatureType featureType) { - return Utils.contains(featureTypes, featureType); - } - - protected Method findMethod(final Class type, final String methodName, final Class[] methodTypes) { - return Utils.findMethod(type, methodName, methodTypes); - } - - protected Method findMethod(final Class type, final String methodName) { - return Utils.findMethod(type, methodName); - } - - protected void expectNoMethodsRemoved() { - Mockito.verifyNoInteractions(mockMethodRemover); - } - -} diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java new file mode 100644 index 00000000000..95df6bd067e --- /dev/null +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -0,0 +1,244 @@ +/* + * 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.causeway.core.metamodel.facets; + +import java.lang.reflect.Method; +import java.util.Optional; +import java.util.function.BiConsumer; + +import org.junit.jupiter.api.BeforeEach; +import org.mockito.Mockito; + +import org.apache.causeway.applib.Identifier; +import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; +import org.apache.causeway.applib.id.LogicalType; +import org.apache.causeway.commons.collections.ImmutableEnumSet; +import org.apache.causeway.commons.internal.assertions._Assert; +import org.apache.causeway.commons.internal.base._Strings; +import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting; +import org.apache.causeway.core.metamodel._testing.MethodRemover_forTesting; +import org.apache.causeway.core.metamodel.context.HasMetaModelContext; +import org.apache.causeway.core.metamodel.context.MetaModelContext; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FeatureType; +import org.apache.causeway.core.metamodel.facetapi.MethodRemover; +import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; +import org.apache.causeway.core.metamodel.spec.ObjectSpecification; +import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; +import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter; +import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; +import org.apache.causeway.core.metamodel.valuesemantics.IntValueSemantics; + +import lombok.Getter; +import lombok.NonNull; +import lombok.val; +import lombok.experimental.Accessors; + +public abstract class FacetFactoryTestAbstract +implements HasMetaModelContext { + + @Getter(onMethod_ = {@Override}) + protected MetaModelContext metaModelContext; + + protected MethodRemover mockMethodRemover; + protected FacetHolder mockFacetHolder; + protected ObjectSpecification mockOnType; + protected ObjectSpecification mockObjSpec; + protected OneToOneAssociation mockOneToOneAssociation; + protected OneToManyAssociation mockOneToManyAssociation; + protected OneToOneActionParameter mockOneToOneActionParameter; + + @Deprecated protected FacetHolder facetHolder; + @Deprecated protected FacetedMethod facetedMethod; + @Deprecated protected FacetedMethodParameter facetedMethodParameter; + + @lombok.Value + @Getter @Accessors(fluent=true) + public static class Scenario { + private final Class declaringClass; + private final String memberId; + private final Method annotatedMethod; + private final FacetHolder facetHolder; + private final FacetedMethod facetedMethod; + private final FacetedMethodParameter facetedMethodParameter; + + public static Scenario act( + final @NonNull MetaModelContext mmc, + final Class declaringClass, final String memberId) { + + val facetHolder = facetHolder(mmc, declaringClass, memberId); + val actionMethod = Utils.findMethodByNameOrFail(declaringClass, memberId); + val facetedMethod = FacetedMethod.createForAction(mmc, declaringClass, memberId, actionMethod.getParameterTypes()); + val facetedMethodParameter = + actionMethod.getParameterCount()==0 + ? (FacetedMethodParameter)null + : new FacetedMethodParameter(mmc, + FeatureType.ACTION_PARAMETER_SINGULAR, facetedMethod.getOwningType(), + facetedMethod.getMethod(), 0); + + return new Scenario(declaringClass, memberId, actionMethod, facetHolder, facetedMethod, facetedMethodParameter); + } + + public static Scenario prop( + final @NonNull MetaModelContext mmc, + final Class declaringClass, final String memberId) { + + val facetHolder = facetHolder(mmc, declaringClass, memberId); + val getter = Optional.ofNullable( + Utils.findMethod(declaringClass, "get" + _Strings.capitalize(memberId))) + .orElseGet(()->Utils.findMethod(declaringClass, "is" + _Strings.capitalize(memberId))); + val facetedMethod = FacetedMethod.createForProperty(mmc, declaringClass, getter); + val facetedMethodParameter = (FacetedMethodParameter)null; + return new Scenario(declaringClass, memberId, getter, facetHolder, facetedMethod, facetedMethodParameter); + } + + private static FacetHolder facetHolder( + final @NonNull MetaModelContext mmc, + final Class declaringClass, final String memberId) { + return FacetHolder.simple(mmc, + Identifier.propertyIdentifier(LogicalType.fqcn(declaringClass), memberId)); + } + + } + + protected void setUpMmc() { + 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); + mockObjSpec = Mockito.mock(ObjectSpecification.class); + mockOneToOneAssociation = Mockito.mock(OneToOneAssociation.class); + mockOneToManyAssociation = Mockito.mock(OneToManyAssociation.class); + mockOneToOneActionParameter = Mockito.mock(OneToOneActionParameter.class); + + //scenario = Scenario.prop(getMetaModelContext(), AbstractFacetFactoryTest.Customer.class, "firstName"); + } + + + @FunctionalInterface + public static interface MemberScenarioConsumer { + void accept( + ProcessMethodContext processMethodContext, + FacetHolder facetHolder, + FacetedMethod facetedMethod, + FacetedMethodParameter facetedMethodParameter); + } + + @FunctionalInterface + public static interface ParameterScenarioConsumer { + void accept( + ProcessParameterContext processParameterContext, + FacetHolder facetHolder, + FacetedMethod facetedMethod, + FacetedMethodParameter facetedMethodParameter); + } + + /** + * Action scenario. + */ + protected void actionScenario( + final Class declaringClass, final String actionName, final MemberScenarioConsumer consumer) { + val scenario = Scenario.act(getMetaModelContext(), declaringClass, actionName); + val processMethodContext = ProcessMethodContext + .forTesting(declaringClass, null, scenario.annotatedMethod(), mockMethodRemover, scenario.facetedMethod()); + consumer.accept(processMethodContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); + } + + /** + * Action Parameter scenario. + */ + protected void parameterScenario( + final Class declaringClass, final String actionName, final int paramIndex, + final ParameterScenarioConsumer consumer) { + _Assert.assertEquals(0, paramIndex, ()->"not yet implemented otherwise"); + val scenario = Scenario.act(getMetaModelContext(), declaringClass, actionName); + val processParameterContext = + FacetFactory.ProcessParameterContext.forTesting( + declaringClass, IntrospectionPolicy.ANNOTATION_OPTIONAL, scenario.annotatedMethod(), null, scenario.facetedMethodParameter()); + consumer.accept(processParameterContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); + } + + /** + * Property scenario. + */ + protected void propertyScenario( + final Class declaringClass, final String propertyName, final MemberScenarioConsumer consumer) { + val scenario = Scenario.prop(getMetaModelContext(), declaringClass, propertyName); + val processMethodContext = ProcessMethodContext + .forTesting(declaringClass, null, scenario.annotatedMethod(), mockMethodRemover, scenario.facetedMethod()); + consumer.accept(processMethodContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); + } + + /** + * DomainObject scenario. + */ + protected void objectScenario(final Class declaringClass, final BiConsumer consumer) { + val facetHolder = FacetHolder.simple(getMetaModelContext(), + Identifier.classIdentifier(LogicalType.fqcn(declaringClass))); + val processClassContext = ProcessClassContext + .forTesting(declaringClass, mockMethodRemover, facetHolder); + consumer.accept(processClassContext, facetHolder); + } + + 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); + } + + protected static boolean contains(final ImmutableEnumSet featureTypes, final FeatureType featureType) { + return Utils.contains(featureTypes, featureType); + } + + protected Method findMethod(final Class type, final String methodName, final Class[] methodTypes) { + return Utils.findMethod(type, methodName, methodTypes); + } + + protected Method findMethod(final Class type, final String methodName) { + return Utils.findMethod(type, methodName); + } + + protected void expectNoMethodsRemoved() { + Mockito.verifyNoInteractions(mockMethodRemover); + } + +} diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/Utils.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/Utils.java index 67b62290e8b..36bdeb25d29 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/Utils.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/Utils.java @@ -20,8 +20,10 @@ import java.lang.reflect.Method; +import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.collections.ImmutableEnumSet; import org.apache.causeway.commons.internal._Constants; +import org.apache.causeway.commons.internal.reflection._ClassCache; import org.apache.causeway.core.metamodel.facetapi.FeatureType; class Utils { @@ -39,7 +41,7 @@ protected static boolean contains(final Class[] array, final Class val) { return false; } - protected static boolean contains(ImmutableEnumSet featureTypes, final FeatureType featureType) { + protected static boolean contains(final ImmutableEnumSet featureTypes, final FeatureType featureType) { if(featureTypes==null || featureType==null) { return false; } @@ -60,4 +62,14 @@ protected static Method findMethod(final Class type, final String methodName) return findMethod(type, methodName, _Constants.emptyClasses); } + protected static Can findMethodsByName(final Class type, final String methodName) { + return _ClassCache.getInstance().streamPublicOrDeclaredMethods(type) + .filter(method->method.getName().equals(methodName)) + .collect(Can.toCan()); + } + + protected static Method findMethodByNameOrFail(final Class type, final String methodName) { + return findMethodsByName(type, methodName).getSingletonOrFail(); + } + } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java index f8e0f64d25c..e8828c86a6c 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java @@ -27,17 +27,16 @@ import org.apache.causeway.applib.mixins.system.HasInteractionId; import org.apache.causeway.core.config.metamodel.facets.ActionConfigOptions; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.ActionDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import lombok.val; class ActionAnnotationFacetFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { ActionAnnotationFacetFactory facetFactory; - Method actionMethod; ObjectSpecification mockTypeSpec; ObjectSpecification mockReturnTypeSpec; @@ -57,10 +56,8 @@ public void setUp() throws Exception { Mockito.when(mockTypeSpec.getFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class)) .thenReturn(null); - actionMethod = findMethod(Customer.class, "someAction"); } - @Override @AfterEach public void tearDown() throws Exception { facetFactory = null; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Hidden.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Hidden.java index 771f4b708a5..f45a9add28a 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Hidden.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Hidden.java @@ -53,22 +53,22 @@ public void someAction() { } // given - val cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processHidden(facetFactory, processMethodContext); - - // then - val hiddenFacet = facetedMethod.getFacet(HiddenFacet.class); - assertNotNull(hiddenFacet); - assertThat(hiddenFacet.where(), is(Where.REFERENCES_PARENT)); - - val hiddenFacetImpl = facetedMethod.getFacet(HiddenFacet.class); - assertNotNull(hiddenFacetImpl); - assertTrue(hiddenFacet == hiddenFacetImpl); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + + // when + processHidden(facetFactory, processMethodContext); + + // then + val hiddenFacet = facetedMethod.getFacet(HiddenFacet.class); + assertNotNull(hiddenFacet); + assertThat(hiddenFacet.where(), is(Where.REFERENCES_PARENT)); + + val hiddenFacetImpl = facetedMethod.getFacet(HiddenFacet.class); + assertNotNull(hiddenFacetImpl); + assertTrue(hiddenFacet == hiddenFacetImpl); + + }); + } } \ No newline at end of file diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java index 86b3b500587..cbc955e5089 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java @@ -51,123 +51,105 @@ private void processInvocation( void withPostsActionInvokedEvent() { class Customer { - class SomeActionInvokedDomainEvent extends ActionDomainEvent {} - @Action(domainEvent = SomeActionInvokedDomainEvent.class) - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - super.metaModelContext.getConfiguration() - .getApplib().getAnnotation().getAction().getDomainEvent().setPostForDefault(true); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processInvocation(facetFactory, processMethodContext); - - // expect - expectRemoveMethod(actionMethod); - - // then - final ActionDomainEventFacet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); - assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof ActionDomainEventFacet); - final ActionDomainEventFacet domainEventFacetImpl = domainEventFacet; - assertThat(domainEventFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); - - final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); - assertNotNull(invocationFacet); - assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); - final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; - assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, invocationFacetImpl.getEventTypeOrigin()); - assertThat(invocationFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); + .getApplib().getAnnotation().getAction().getDomainEvent().setPostForDefault(true); + + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processInvocation(facetFactory, processMethodContext); + + // expect + expectRemoveMethod(findMethod(Customer.class, "someAction")); + + // then + final ActionDomainEventFacet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); + assertNotNull(domainEventFacet); + assertTrue(domainEventFacet instanceof ActionDomainEventFacet); + final ActionDomainEventFacet domainEventFacetImpl = domainEventFacet; + assertThat(domainEventFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); + + final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); + assertNotNull(invocationFacet); + assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, invocationFacetImpl.getEventTypeOrigin()); + assertThat(invocationFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); + }); } @Test void withActionInteractionEvent() { class Customer { - class SomeActionInvokedDomainEvent extends ActionDomainEvent {} - @Action(domainEvent = SomeActionInvokedDomainEvent.class) - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processInvocation(facetFactory, processMethodContext); - - // expect - expectRemoveMethod(actionMethod); - - // then - final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); - assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof ActionDomainEventFacet); - final ActionDomainEventFacet domainEventFacetImpl = (ActionDomainEventFacet) domainEventFacet; - assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); - assertThat(domainEventFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); - - final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); - assertNotNull(invocationFacet); - - assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); - final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; - assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, invocationFacetImpl.getEventTypeOrigin()); - assertThat(invocationFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processInvocation(facetFactory, processMethodContext); + + // expect + expectRemoveMethod(findMethod(Customer.class, "someAction")); + + // then + final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); + assertNotNull(domainEventFacet); + assertTrue(domainEventFacet instanceof ActionDomainEventFacet); + final ActionDomainEventFacet domainEventFacetImpl = (ActionDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); + assertThat(domainEventFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); + + final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); + assertNotNull(invocationFacet); + + assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, invocationFacetImpl.getEventTypeOrigin()); + assertThat(invocationFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); + }); } @Test void withActionDomainEvent() { class Customer { - class SomeActionInvokedDomainEvent extends ActionDomainEvent {} - @Action(domainEvent= SomeActionInvokedDomainEvent.class) - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processInvocation(facetFactory, processMethodContext); - - // expect - expectRemoveMethod(actionMethod); - - // then - final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); - assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof ActionDomainEventFacet); - final ActionDomainEventFacet domainEventFacetImpl = (ActionDomainEventFacet) domainEventFacet; - assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); - assertThat(domainEventFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); - - final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); - assertNotNull(invocationFacet); - assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); - final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; - assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, invocationFacetImpl.getEventTypeOrigin()); - assertThat(invocationFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processInvocation(facetFactory, processMethodContext); + + // expect + expectRemoveMethod(findMethod(Customer.class, "someAction")); + + // then + final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); + assertNotNull(domainEventFacet); + assertTrue(domainEventFacet instanceof ActionDomainEventFacet); + final ActionDomainEventFacet domainEventFacetImpl = (ActionDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); + assertThat(domainEventFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); + + final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); + assertNotNull(invocationFacet); + assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, invocationFacetImpl.getEventTypeOrigin()); + assertThat(invocationFacetImpl.getEventType(), classEqualTo(Customer.SomeActionInvokedDomainEvent.class)); + }); } @Test @@ -175,37 +157,33 @@ void withDefaultEvent() { class Customer { @SuppressWarnings("unused") - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - super.metaModelContext.getConfiguration() - .getApplib().getAnnotation().getAction().getDomainEvent().setPostForDefault(true); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processInvocation(facetFactory, processMethodContext); - - // expect - expectRemoveMethod(actionMethod); - - // then - final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); - assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof ActionDomainEventFacet); - final ActionDomainEventFacet domainEventFacetImpl = (ActionDomainEventFacet) domainEventFacet; - assertTrue(domainEventFacetImpl.getEventTypeOrigin().isDefault()); - assertThat(domainEventFacetImpl.getEventType(), classEqualTo(ActionDomainEvent.Default.class)); - - final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); - assertNotNull(invocationFacet); - assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); - final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; - assertThat(invocationFacetImpl.getEventType(), classEqualTo(ActionDomainEvent.Default.class)); + .getApplib().getAnnotation().getAction().getDomainEvent().setPostForDefault(true); + + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processInvocation(facetFactory, processMethodContext); + + // expect + expectRemoveMethod(findMethod(Customer.class, "someAction")); + + // then + final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); + assertNotNull(domainEventFacet); + assertTrue(domainEventFacet instanceof ActionDomainEventFacet); + final ActionDomainEventFacet domainEventFacetImpl = (ActionDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isDefault()); + assertThat(domainEventFacetImpl.getEventType(), classEqualTo(ActionDomainEvent.Default.class)); + + final Facet invocationFacet = facetedMethod.getFacet(ActionInvocationFacet.class); + assertNotNull(invocationFacet); + assertTrue(invocationFacet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent invocationFacetImpl = (ActionInvocationFacetForDomainEvent) invocationFacet; + assertThat(invocationFacetImpl.getEventType(), classEqualTo(ActionDomainEvent.Default.class)); + }); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_RestrictTo.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_RestrictTo.java index 9298ffb8fba..28f3bdc4d73 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_RestrictTo.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_RestrictTo.java @@ -43,22 +43,17 @@ void whenRestrictedToPrototyping() { class Customer { @Action(restrictTo = org.apache.causeway.applib.annotation.RestrictTo.PROTOTYPING) - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processRestrictTo(facetFactory, processMethodContext); - - // then - final PrototypeFacet facet = facetedMethod.getFacet(PrototypeFacet.class); - assertNotNull(facet); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processRestrictTo(facetFactory, processMethodContext); + // then + final PrototypeFacet facet = facetedMethod.getFacet(PrototypeFacet.class); + assertNotNull(facet); + }); } @Test @@ -66,22 +61,17 @@ void whenRestrictedToNoRestriction() { class Customer { @Action(restrictTo = org.apache.causeway.applib.annotation.RestrictTo.NO_RESTRICTIONS) - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processRestrictTo(facetFactory, processMethodContext); - - // then - final PrototypeFacet facet = facetedMethod.getFacet(PrototypeFacet.class); - assertNull(facet); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processRestrictTo(facetFactory, processMethodContext); + // then + final PrototypeFacet facet = facetedMethod.getFacet(PrototypeFacet.class); + assertNull(facet); + }); } @Test @@ -89,22 +79,17 @@ void whenNotPresent() { class Customer { @SuppressWarnings("unused") - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processRestrictTo(facetFactory, processMethodContext); - - // then - final PrototypeFacet facet = facetedMethod.getFacet(PrototypeFacet.class); - assertNull(facet); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processRestrictTo(facetFactory, processMethodContext); + // then + final PrototypeFacet facet = facetedMethod.getFacet(PrototypeFacet.class); + assertNull(facet); + }); } } \ No newline at end of file diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Semantics.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Semantics.java index 6c0c83d03ed..473cad797ca 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Semantics.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Semantics.java @@ -45,23 +45,18 @@ void whenSafe() { class Customer { @Action(semantics = SemanticsOf.SAFE) - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processSemantics(facetFactory, processMethodContext); - - // then - final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class); - assertNotNull(facet); - assertThat(facet.value(), is(SemanticsOf.SAFE)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processSemantics(facetFactory, processMethodContext); + // then + final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class); + assertNotNull(facet); + assertThat(facet.value(), is(SemanticsOf.SAFE)); + }); } @Test @@ -69,23 +64,18 @@ void whenNotSpecified() { class Customer { @Action() - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processSemantics(facetFactory, processMethodContext); - - // then - final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class); - assertNotNull(facet); - assertThat(facet.value(), is(SemanticsOf.NON_IDEMPOTENT)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processSemantics(facetFactory, processMethodContext); + // then + final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class); + assertNotNull(facet); + assertThat(facet.value(), is(SemanticsOf.NON_IDEMPOTENT)); + }); } @Test @@ -93,23 +83,18 @@ void whenNoAnnotation() { class Customer { @SuppressWarnings("unused") - public void someAction() { - } + public void someAction() {} } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processSemantics(facetFactory, processMethodContext); - - // then - final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class); - assertNotNull(facet); - assertThat(facet.value(), is(SemanticsOf.NON_IDEMPOTENT)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processSemantics(facetFactory, processMethodContext); + // then + final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class); + assertNotNull(facet); + assertThat(facet.value(), is(SemanticsOf.NON_IDEMPOTENT)); + }); } } \ No newline at end of file diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_TypeOf.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_TypeOf.java index 0e2c9f4dac8..5e1007fd3f6 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_TypeOf.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_TypeOf.java @@ -55,22 +55,17 @@ void whenDeprecatedTypeOfAnnotationOnActionNotReturningCollection() { class Customer { @SuppressWarnings("unused") - public Customer someAction() { - return null; - } + public Customer someAction() { return null; } } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext.forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processTypeOf(facetFactory, processMethodContext); - - // then - final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNull(facet); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processTypeOf(facetFactory, processMethodContext); + // then + final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNull(facet); + }); } @Test @@ -81,24 +76,19 @@ class Order { class Customer { @SuppressWarnings("rawtypes") @Action(typeOf = Order.class) - public Collection someAction() { - return null; - } + public Collection someAction() { return null; } } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext.forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processTypeOf(facetFactory, processMethodContext); - - // then - final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TypeOfFacetForActionAnnotation); - assertThat(facet.value().getElementType(), classEqualTo(Order.class)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processTypeOf(facetFactory, processMethodContext); + // then + final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TypeOfFacetForActionAnnotation); + assertThat(facet.value().getElementType(), classEqualTo(Order.class)); + }); } @Test @@ -108,23 +98,17 @@ class Order { } class Customer { @Action(typeOf = Order.class) - public Customer someAction() { - return null; - } + public Customer someAction() { return null; } } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processTypeOf(facetFactory, processMethodContext); - - // then - final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNull(facet); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processTypeOf(facetFactory, processMethodContext); + // then + final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNull(facet); + }); } @Test @@ -134,26 +118,20 @@ class Order { } class Customer { @SuppressWarnings("unused") - public Order[] someAction() { - return null; - } + public Order[] someAction() { return null; } } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processTypeOf(facetFactory, processMethodContext); - - // then - final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TypeOfFacet); - assertThat(facet.value().getElementType(), classEqualTo(Order.class)); - assertThat(facet.value().getCollectionSemantics(), Matchers.is(Optional.of(CollectionSemantics.ARRAY))); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processTypeOf(facetFactory, processMethodContext); + // then + final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TypeOfFacet); + assertThat(facet.value().getElementType(), classEqualTo(Order.class)); + assertThat(facet.value().getCollectionSemantics(), Matchers.is(Optional.of(CollectionSemantics.ARRAY))); + }); } @Test @@ -163,25 +141,18 @@ class Order { } class Customer { @SuppressWarnings("unused") - public Collection someAction() { - return null; - } + public Collection someAction() { return null; } } // given - final Class cls = Customer.class; - actionMethod = findMethod(cls, "someAction"); - - // when - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, actionMethod, mockMethodRemover, facetedMethod); - processTypeOf(facetFactory, processMethodContext); - - // then - final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNotNull(facet); - assertEquals(TypeOfFacetFromFeature.class, facet.getClass()); - assertThat(facet.value().getElementType(), classEqualTo(Order.class)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processTypeOf(facetFactory, processMethodContext); + // then + final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNotNull(facet); + assertEquals(TypeOfFacetFromFeature.class, facet.getClass()); + assertThat(facet.value().getElementType(), classEqualTo(Order.class)); + }); } - } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_commandPublishing.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_commandPublishing.java index 9414fdb9e00..334eb5e3b34 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_commandPublishing.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_commandPublishing.java @@ -18,8 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action; -import java.lang.reflect.Method; - import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -47,14 +45,12 @@ private void processCommandPublishing( @Test void given_HasInteractionId_thenIgnored() { // given - final Method actionMethod = findMethod(SomeHasInteractionId.class, "someAction"); - - // when - processCommandPublishing(facetFactory, ProcessMethodContext - .forTesting(SomeHasInteractionId.class, null, actionMethod, mockMethodRemover, facetedMethod)); - - // then - assertFalse(CommandPublishingFacet.isPublishingEnabled(facetedMethod)); + actionScenario(SomeHasInteractionId.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processCommandPublishing(facetFactory, processMethodContext); + // then + assertFalse(CommandPublishingFacet.isPublishingEnabled(facetedMethod)); + }); } @Test @@ -63,17 +59,15 @@ void given_annotation_but_command_not_specified_then_facet_not_added() { // given class Customer { @Action() - public void someAction() { - } + public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); - // when - processCommandPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod)); - - // then - assertFalse(CommandPublishingFacet.isPublishingEnabled(facetedMethod)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processCommandPublishing(facetFactory, processMethodContext); + // then + assertFalse(CommandPublishingFacet.isPublishingEnabled(facetedMethod)); + }); } @Test @@ -82,19 +76,17 @@ void given_annotation_with_command_enabled_then_facet_added() { // given class Customer { @Action(commandPublishing = Publishing.ENABLED) - public void someAction() { - } + public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); - - // when - processCommandPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod)); - // then - final Facet facet = facetedMethod.getFacet(CommandPublishingFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CommandPublishingFacetForActionAnnotation); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processCommandPublishing(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(CommandPublishingFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CommandPublishingFacetForActionAnnotation); + }); } @@ -104,17 +96,15 @@ void given_annotation_with_command_disabled_then_facet_not_added() { // given class Customer { @Action(commandPublishing = Publishing.DISABLED) - public void someAction() { - } + public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); - - // when - processCommandPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod)); - // then - assertFalse(CommandPublishingFacet.isPublishingEnabled(facetedMethod)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processCommandPublishing(facetFactory, processMethodContext); + // then + assertFalse(CommandPublishingFacet.isPublishingEnabled(facetedMethod)); + }); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java index a9bba2ebe07..a6c79764133 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java @@ -18,8 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action; -import java.lang.reflect.Method; - import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -51,15 +49,11 @@ private void processExecutionPublishing( @Test void given_HasInteractionId_thenIgnored() { - - final Method actionMethod = findMethod(SomeHasInteractionId.class, "someAction"); - - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(SomeHasInteractionId.class, null, actionMethod, mockMethodRemover, facetedMethod)); - - assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); - - expectNoMethodsRemoved(); + actionScenario(SomeHasInteractionId.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + processExecutionPublishing(facetFactory, processMethodContext); + assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); + expectNoMethodsRemoved(); + }); } @Test @@ -67,17 +61,13 @@ void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andSafeSemantics_t // given allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); - final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction"); - - facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.SAFE, facetedMethod) {}); - - // when - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(ActionAnnotationFacetFactoryTest.Customer.class, null, - actionMethod, mockMethodRemover, facetedMethod)); - - // then - assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); + actionScenario(ActionAnnotationFacetFactoryTest.Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.SAFE, facetedMethod) {}); + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); + }); } @Test @@ -85,20 +75,15 @@ void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andNonSafeSemantic // given allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); - final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction"); - - facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.IDEMPOTENT, facetedMethod) {}); - - // when - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(ActionAnnotationFacetFactoryTest.Customer.class, null, - actionMethod, mockMethodRemover, facetedMethod)); - - // then - final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); - assertNotNull(facet); - final ExecutionPublishingActionFacetFromConfiguration facetImpl = (ExecutionPublishingActionFacetFromConfiguration) facet; - _Blackhole.consume(facetImpl); + actionScenario(ActionAnnotationFacetFactoryTest.Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.IDEMPOTENT, facetedMethod) {}); + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ExecutionPublishingActionFacetFromConfiguration); + }); } @Test @@ -106,14 +91,11 @@ void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andNoSemantics_the // given allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); - final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction"); - - // when - assertThrows(IllegalStateException.class, ()-> - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(ActionAnnotationFacetFactoryTest.Customer.class, null, - actionMethod, mockMethodRemover, facetedMethod))); - + actionScenario(ActionAnnotationFacetFactoryTest.Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + assertThrows(IllegalStateException.class, ()-> + processExecutionPublishing(facetFactory, processMethodContext)); + }); } @Test @@ -121,37 +103,28 @@ void given_noAnnotation_and_configurationSetToNone_thenNone() { // given allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.NONE); - final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction"); - - // when - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(ActionAnnotationFacetFactoryTest.Customer.class, null, - actionMethod, mockMethodRemover, facetedMethod)); - - // then - assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); - - expectNoMethodsRemoved(); - + actionScenario(ActionAnnotationFacetFactoryTest.Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); + expectNoMethodsRemoved(); + }); } @Test void given_noAnnotation_and_configurationSetToAll_thenFacetAdded() { // given - final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction"); - allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.ALL); - - // when - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(ActionAnnotationFacetFactoryTest.Customer.class, null, - actionMethod, mockMethodRemover, facetedMethod)); - - // then - final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ExecutionPublishingActionFacetFromConfiguration); + actionScenario(ActionAnnotationFacetFactoryTest.Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ExecutionPublishingActionFacetFromConfiguration); + }); } @Test @@ -159,21 +132,18 @@ void given_asConfigured_and_configurationSetToIgnoreQueryOnly_andSafeSemantics_t class Customer { @Action(executionPublishing = org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED) - public void someAction() { - } + public void someAction() {} } allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); - final Method actionMethod = findMethod(Customer.class, "someAction"); - - facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.SAFE, facetedMethod) {}); - - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod)); - - assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); - - expectNoMethodsRemoved(); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.SAFE, facetedMethod) {}); + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); + expectNoMethodsRemoved(); + }); } @Test @@ -181,29 +151,22 @@ void given_asConfigured_and_configurationSetToIgnoreQueryOnly_andNonSafeSemantic // given class Customer { - @Action( - executionPublishing = org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED - ) - public void someAction() { - } + @Action(executionPublishing = org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED) + public void someAction() {} } allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); - final Method actionMethod = findMethod(Customer.class, "someAction"); - - facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.IDEMPOTENT, facetedMethod) {}); - - // when - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod)); - - // then - final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); - assertNotNull(facet); - final ExecutionPublishingActionFacetForActionAnnotation facetImpl = (ExecutionPublishingActionFacetForActionAnnotation) facet; - _Blackhole.consume(facetImpl); - - expectNoMethodsRemoved(); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.IDEMPOTENT, facetedMethod) {}); + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); + assertNotNull(facet); + final ExecutionPublishingActionFacetForActionAnnotation facetImpl = (ExecutionPublishingActionFacetForActionAnnotation) facet; + _Blackhole.consume(facetImpl); + expectNoMethodsRemoved(); + }); } @Test @@ -211,16 +174,15 @@ void given_asConfigured_and_configurationSetToIgnoreQueryOnly_andNoSemantics_the class Customer { @Action(executionPublishing = org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED) - public void someAction() { - } + public void someAction() { } } allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY); - final Method actionMethod = findMethod(Customer.class, "someAction"); - - assertThrows(IllegalStateException.class, ()-> - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod))); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + assertThrows(IllegalStateException.class, ()-> + processExecutionPublishing(facetFactory, processMethodContext)); + }); } @Test @@ -228,20 +190,17 @@ void given_asConfigured_and_configurationSetToNone_thenNone() { class Customer { @Action(executionPublishing = org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED) - public void someAction() { - } + public void someAction() {} } allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.NONE); - final Method actionMethod = findMethod(Customer.class, "someAction"); - - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod)); - - assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); - - expectNoMethodsRemoved(); - + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); + expectNoMethodsRemoved(); + }); } @Test @@ -249,26 +208,19 @@ void given_asConfigured_and_configurationSetToAll_thenFacetAdded() { // given class Customer { - @Action( - executionPublishing = org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED - ) - public void someAction() { - } + @Action(executionPublishing = org.apache.causeway.applib.annotation.Publishing.AS_CONFIGURED) + public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); - allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.ALL); - - // when - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod)); - - // then - final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ExecutionPublishingActionFacetForActionAnnotation); - - expectNoMethodsRemoved(); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ExecutionPublishingActionFacetForActionAnnotation); + expectNoMethodsRemoved(); + }); } @Test @@ -276,25 +228,19 @@ void given_enabled_irrespectiveOfConfiguration_thenFacetAdded() { // given class Customer { - @Action( - executionPublishing = org.apache.causeway.applib.annotation.Publishing.ENABLED - ) - public void someAction() { - } + @Action(executionPublishing = org.apache.causeway.applib.annotation.Publishing.ENABLED) + public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); - // even though configuration is disabled allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.NONE); - - // when - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod)); - - // then - final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ExecutionPublishingActionFacetForActionAnnotation); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ExecutionPublishingActionFacetForActionAnnotation); + }); } @Test @@ -302,23 +248,17 @@ void given_disabled_irrespectiveOfConfiguration_thenNone() { // given class Customer { - @Action( - executionPublishing = org.apache.causeway.applib.annotation.Publishing.DISABLED - ) - public void someAction() { - } + @Action(executionPublishing = org.apache.causeway.applib.annotation.Publishing.DISABLED) + public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); - // even though configuration is disabled allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.NONE); - - // when - processExecutionPublishing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, mockMethodRemover, facetedMethod)); - - // then - assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processExecutionPublishing(facetFactory, processMethodContext); + // then + assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); + }); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java index fc03efe6e36..8781ea3c3ad 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java @@ -16,8 +16,6 @@ * under the License. */ package org.apache.causeway.core.metamodel.facets.actions.layout; -import java.lang.reflect.Method; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -34,8 +32,7 @@ import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.applib.layout.component.CssClassFaPosition; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacet; import org.apache.causeway.core.metamodel.facets.actions.position.ActionPositionFacetFallback; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; @@ -44,7 +41,7 @@ import lombok.val; class ActionLayoutAnnotationFacetFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { ActionLayoutFacetFactory facetFactory; @@ -58,21 +55,18 @@ void testActionLayoutAnnotation_position() { class Customer { @ActionLayout(position = ActionLayout.Position.PANEL) - public String foz() { - return null; - } + public String foz() { return null; } } - final Method method = findMethod(Customer.class, "foz"); - - facetFactory.process(ProcessMethodContext.forTesting(Customer.class, null, method, mockMethodRemover, - facetedMethod)); + actionScenario(Customer.class, "foz", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + facetFactory.process(processMethodContext); - final Facet facet = facetedMethod.getFacet(ActionPositionFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ActionPositionFacetForActionLayoutAnnotation); - val actionLayoutFacetAnnotation = (ActionPositionFacetForActionLayoutAnnotation) facet; - assertEquals(ActionLayout.Position.PANEL, actionLayoutFacetAnnotation.position()); + final Facet facet = facetedMethod.getFacet(ActionPositionFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ActionPositionFacetForActionLayoutAnnotation); + val actionLayoutFacetAnnotation = (ActionPositionFacetForActionLayoutAnnotation) facet; + assertEquals(ActionLayout.Position.PANEL, actionLayoutFacetAnnotation.position()); + }); } @Test @@ -85,16 +79,15 @@ public String foz() { } } - final Method method = findMethod(Customer.class, "foz"); - - facetFactory.process(ProcessMethodContext.forTesting(Customer.class, null, method, mockMethodRemover, - facetedMethod)); + actionScenario(Customer.class, "foz", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + facetFactory.process(processMethodContext); - final Facet facet = facetedMethod.getFacet(HiddenFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof HiddenFacetForActionLayoutAnnotation); - val actionLayoutFacetAnnotation = (HiddenFacetForActionLayoutAnnotation) facet; - assertEquals(Where.ALL_TABLES, actionLayoutFacetAnnotation.where()); + final Facet facet = facetedMethod.getFacet(HiddenFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof HiddenFacetForActionLayoutAnnotation); + val actionLayoutFacetAnnotation = (HiddenFacetForActionLayoutAnnotation) facet; + assertEquals(Where.ALL_TABLES, actionLayoutFacetAnnotation.where()); + }); } @Test @@ -103,35 +96,28 @@ void testActionLayoutFallbackPickedUp() { class Customer { @SuppressWarnings("unused") // no @ActionLayout - public String foo() { - return null; - } + public String foo() { return null; } } - final Method method = findMethod(Customer.class, "foo"); - facetFactory.process(ProcessMethodContext.forTesting(Customer.class, null, method, mockMethodRemover, - facetedMethod)); + actionScenario(Customer.class, "foo", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + facetFactory.process(processMethodContext); - final Facet facet = facetedMethod.getFacet(ActionPositionFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ActionPositionFacetFallback); + final Facet facet = facetedMethod.getFacet(ActionPositionFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ActionPositionFacetFallback); + }); } - static class CssClassFa extends ActionLayoutAnnotationFacetFactoryTest { - - @Test - void testDefaultPosition() { + @Test + void testCssClassFa_defaultPosition() { - class Customer { - @ActionLayout(cssClassFa = "font-awesome") - public String foz() { - return null; - } - } - final Method method = findMethod(Customer.class, "foz"); + class Customer { + @ActionLayout(cssClassFa = "font-awesome") + public String foz() { return null; } + } - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, method, mockMethodRemover, facetedMethod)); + actionScenario(Customer.class, "foz", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + facetFactory.process(processMethodContext); Facet facet = facetedMethod.getFacet(CssClassFaFacet.class); assertThat(facet, is(notNullValue())); @@ -139,21 +125,22 @@ public String foz() { val classFaFacetForActionLayoutAnnotation = (CssClassFaFacetForActionLayoutAnnotation) facet; assertThat(classFaFacetForActionLayoutAnnotation.asSpaceSeparated(), is(equalTo("fa fa-fw fa-font-awesome"))); assertThat(classFaFacetForActionLayoutAnnotation.getPosition(), is(CssClassFaPosition.LEFT)); - } - @Test - void testRightPosition() { + }); + } + + @Test + void testCssClassFa_rightPosition() { - class Customer { - @ActionLayout(cssClassFa = "font-awesome", cssClassFaPosition = CssClassFaPosition.RIGHT) - public String foz() { - return null; - } + class Customer { + @ActionLayout(cssClassFa = "font-awesome", cssClassFaPosition = CssClassFaPosition.RIGHT) + public String foz() { + return null; } - final Method method = findMethod(Customer.class, "foz"); + } - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, method, mockMethodRemover, facetedMethod)); + actionScenario(Customer.class, "foz", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + facetFactory.process(processMethodContext); Facet facet = facetedMethod.getFacet(CssClassFaFacet.class); assertThat(facet, is(notNullValue())); @@ -161,7 +148,8 @@ public String foz() { val classFaFacetForActionLayoutAnnotation = (CssClassFaFacetForActionLayoutAnnotation) facet; assertThat(classFaFacetForActionLayoutAnnotation.asSpaceSeparated(), is(equalTo("fa fa-fw fa-font-awesome"))); assertThat(classFaFacetForActionLayoutAnnotation.getPosition(), is(CssClassFaPosition.RIGHT)); - } + + }); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java index acf506c79a2..3f9f6111f7c 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java @@ -33,14 +33,14 @@ import org.apache.causeway.applib.annotation.DomainService; import org.apache.causeway.applib.annotation.NatureOfService; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.NotInServiceMenuFacet; @SuppressWarnings("unused") public class NotInServiceMenuFacetFromDomainServiceFacetFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { private NotInServiceMenuFacetFromDomainServiceFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java index 5ce1cf60631..e7e3fb59618 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java @@ -37,9 +37,8 @@ import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CollectionSemantics; import org.apache.causeway.core.metamodel.commons.matchers.CausewayMatchers; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacetFromFeature; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; @@ -51,7 +50,7 @@ @SuppressWarnings("unused") class CollectionAnnotationFacetFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { CollectionAnnotationFacetFactory facetFactory; Method collectionMethod; @@ -92,7 +91,6 @@ public void setUp() throws Exception { facetFactory = new CollectionAnnotationFacetFactory(metaModelContext); } - @Override @AfterEach public void tearDown() throws Exception { facetFactory = null; @@ -109,33 +107,28 @@ class Order { } class Customer { @Collection(hidden = Where.REFERENCES_PARENT) - public List getOrders() { - return null; - } - - public void setOrders(final List orders) { - } + public List getOrders() { return null; } + public void setOrders(final List orders) {} } // given - final Class cls = Customer.class; - collectionMethod = findMethod(Customer.class, "getOrders"); - - // when - final FacetFactory.ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, collectionMethod, mockMethodRemover, facetedMethod); - processHidden(facetFactory, processMethodContext); - - // then - final HiddenFacet hiddenFacet = facetedMethod.getFacet(HiddenFacet.class); - assertNotNull(hiddenFacet); - assertTrue(hiddenFacet instanceof HiddenFacetForCollectionAnnotation); - final HiddenFacetForCollectionAnnotation hiddenFacetImpl = (HiddenFacetForCollectionAnnotation) hiddenFacet; - assertThat(hiddenFacetImpl.where(), is(Where.REFERENCES_PARENT)); - - final Facet hiddenFacetForColl = facetedMethod.getFacet(HiddenFacet.class); - assertNotNull(hiddenFacetForColl); - assertTrue(hiddenFacet == hiddenFacetForColl); + propertyScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + + // when + processHidden(facetFactory, processMethodContext); + + // then + final HiddenFacet hiddenFacet = facetedMethod.getFacet(HiddenFacet.class); + assertNotNull(hiddenFacet); + assertTrue(hiddenFacet instanceof HiddenFacetForCollectionAnnotation); + final HiddenFacetForCollectionAnnotation hiddenFacetImpl = (HiddenFacetForCollectionAnnotation) hiddenFacet; + assertThat(hiddenFacetImpl.where(), is(Where.REFERENCES_PARENT)); + + final Facet hiddenFacetForColl = facetedMethod.getFacet(HiddenFacet.class); + assertNotNull(hiddenFacetForColl); + assertTrue(hiddenFacet == hiddenFacetForColl); + + }); } } @@ -150,28 +143,20 @@ class Order { } class Customer { @Collection(typeOf = Order.class) - public List getOrders() { - return null; - } - - public void setOrders(final List orders) { - } + public List getOrders() { return null; } + public void setOrders(final List orders) {} } // given - final Class cls = Customer.class; - collectionMethod = findMethod(Customer.class, "getOrders"); - - // when - final FacetFactory.ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, collectionMethod, mockMethodRemover, facetedMethod); - processTypeOf(facetFactory, processMethodContext); - - // then - final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TypeOfFacetForCollectionAnnotation); - assertThat(facet.value().getElementType(), CausewayMatchers.classEqualTo(Order.class)); + propertyScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processTypeOf(facetFactory, processMethodContext); + // then + final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TypeOfFacetForCollectionAnnotation); + assertThat(facet.value().getElementType(), CausewayMatchers.classEqualTo(Order.class)); + }); } @Test @@ -180,29 +165,22 @@ void whenInferFromType() { class Order { } class Customer { - public Order[] getOrders() { - return null; - } - - public void setOrders(final Order[] orders) { - } + public Order[] getOrders() { return null; } + public void setOrders(final Order[] orders) {} } // given - final Class cls = Customer.class; - collectionMethod = findMethod(Customer.class, "getOrders"); - - // when - final FacetFactory.ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, collectionMethod, mockMethodRemover, facetedMethod); - processTypeOf(facetFactory, processMethodContext); - - // then - final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TypeOfFacet); - assertThat(facet.value().getElementType(), CausewayMatchers.classEqualTo(Order.class)); - assertThat(facet.value().getCollectionSemantics(), Matchers.is(Optional.of(CollectionSemantics.ARRAY))); + propertyScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processTypeOf(facetFactory, processMethodContext); + + // then + final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TypeOfFacet); + assertThat(facet.value().getElementType(), CausewayMatchers.classEqualTo(Order.class)); + assertThat(facet.value().getCollectionSemantics(), Matchers.is(Optional.of(CollectionSemantics.ARRAY))); + }); } @Test @@ -211,28 +189,21 @@ void whenInferFromGenerics() { class Order { } class Customer { - public java.util.Collection getOrders() { - return null; - } - - public void setOrders(final java.util.Collection orders) { - } + public java.util.Collection getOrders() { return null; } + public void setOrders(final java.util.Collection orders) {} } // given - final Class cls = Customer.class; - collectionMethod = findMethod(Customer.class, "getOrders"); - - // when - final FacetFactory.ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(cls, null, collectionMethod, mockMethodRemover, facetedMethod); - processTypeOf(facetFactory, processMethodContext); - - // then - final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TypeOfFacetFromFeature); - assertThat(facet.value().getElementType(), CausewayMatchers.classEqualTo(Order.class)); + propertyScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processTypeOf(facetFactory, processMethodContext); + + // then + final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TypeOfFacetFromFeature); + assertThat(facet.value().getElementType(), CausewayMatchers.classEqualTo(Order.class)); + }); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/cssclassfa/CssClassFaFacetOnTypeAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/cssclassfa/CssClassFaFacetOnTypeAnnotationFactoryTest.java index 65141e5105a..e53b110ef02 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/cssclassfa/CssClassFaFacetOnTypeAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/cssclassfa/CssClassFaFacetOnTypeAnnotationFactoryTest.java @@ -16,9 +16,9 @@ * under the License. */ package org.apache.causeway.core.metamodel.facets.object.cssclassfa; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; -public class CssClassFaFacetOnTypeAnnotationFactoryTest extends AbstractFacetFactoryJupiterTestCase { +public class CssClassFaFacetOnTypeAnnotationFactoryTest extends FacetFactoryTestAbstract { // @Test // public void testCssClassFaAnnotationPickedUpOnClass() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java index 1bf882baba1..8486db98e9a 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java @@ -41,8 +41,7 @@ import org.apache.causeway.core.config.CausewayConfiguration; import org.apache.causeway.core.config.metamodel.facets.DomainObjectConfigOptions; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.autocomplete.AutoCompleteFacet; import org.apache.causeway.core.metamodel.facets.object.domainobject.autocomplete.AutoCompleteFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.object.domainobject.choices.ChoicesFacetForDomainObjectAnnotation; @@ -62,7 +61,7 @@ import lombok.val; class DomainObjectAnnotationFacetFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { DomainObjectAnnotationFacetFactory facetFactory; @@ -72,7 +71,6 @@ void setUp() throws Exception { } @AfterEach - @Override protected void tearDown() throws Exception { facetFactory = null; } @@ -127,31 +125,31 @@ public static class WhenNotAnnotatedAndDefaultsFromConfiguration extends EntityC @Test void configured_value_set_to_all() { allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.ALL); + objectScenario(DomainObjectAnnotationFacetFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.processEntityChangePublishing( + processClassContext.synthesizeOnType(DomainObject.class), processClassContext); - val context = ProcessClassContext - .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder); - facetFactory.processEntityChangePublishing(context.synthesizeOnType(DomainObject.class), context); + final EntityChangePublishingFacet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); + assertThat(facet, is(notNullValue())); + assertTrue(facet instanceof EntityChangePublishingFacetFromConfiguration); + assertThat(facet.isEnabled(), is(true)); - final EntityChangePublishingFacet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); - assertThat(facet, is(notNullValue())); - assertTrue(facet instanceof EntityChangePublishingFacetFromConfiguration); - assertThat(facet.isEnabled(), is(true)); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test void configured_value_set_to_none() { allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.NONE); + objectScenario(DomainObjectAnnotationFacetFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder)); - - final EntityChangePublishingFacet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); - assertNotNull(facet); - assertThat(facet.isEnabled(), is(false)); + final EntityChangePublishingFacet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); + assertNotNull(facet); + assertThat(facet.isEnabled(), is(false)); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -161,30 +159,30 @@ public static class WithDomainObjectAnnotationWithAuditingSetToAsConfigured exte @Test public void configured_value_set_to_all() { allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.ALL); + objectScenario(CustomerWithDomainObjectAndAuditingSetToAsConfigured.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndAuditingSetToAsConfigured.class, mockMethodRemover, facetHolder)); + final EntityChangePublishingFacet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof EntityChangePublishingFacetForDomainObjectAnnotationAsConfigured); + assertThat(facet.isEnabled(), is(true)); - final EntityChangePublishingFacet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof EntityChangePublishingFacetForDomainObjectAnnotationAsConfigured); - assertThat(facet.isEnabled(), is(true)); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void configured_value_set_to_none() { allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.NONE); + objectScenario(CustomerWithDomainObjectAndAuditingSetToAsConfigured.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndAuditingSetToAsConfigured.class, mockMethodRemover, facetHolder)); + final EntityChangePublishingFacet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); + assertNotNull(facet); + assertThat(facet.isEnabled(), is(false)); - final EntityChangePublishingFacet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); - assertNotNull(facet); - assertThat(facet.isEnabled(), is(false)); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -194,15 +192,15 @@ public static class WithDomainObjectAnnotationWithAuditingSetToEnabled extends E @Test public void irrespective_of_configured_value() { allowingEntityChangePublishingToReturn(null); + objectScenario(CustomerWithDomainObjectAndAuditingSetToEnabled.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndAuditingSetToEnabled.class, mockMethodRemover, facetHolder)); + final Facet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof EntityChangePublishingFacetForDomainObjectAnnotation); - final Facet facet = facetHolder.getFacet(EntityChangePublishingFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof EntityChangePublishingFacetForDomainObjectAnnotation); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -212,13 +210,13 @@ public static class WithDomainObjectAnnotationWithAuditingSetToDisabled extends @Test public void irrespective_of_configured_value() { allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.ALL); + objectScenario(CustomerWithDomainObjectAndAuditingSetToDisabled.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndAuditingSetToDisabled.class, mockMethodRemover, facetHolder)); + assertFalse(EntityChangePublishingFacet.isPublishingEnabled(facetHolder)); - assertFalse(EntityChangePublishingFacet.isPublishingEnabled(facetHolder)); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -250,67 +248,68 @@ class CustomerWithDomainObjectButNoAutoCompleteRepository { @Test public void whenDomainObjectAndAutoCompleteRepositoryAndAction() { - facetFactory.process(ProcessClassContext - .forTesting( - CustomerWithDomainObjectAndAutoCompleteRepositoryAndAction.class, mockMethodRemover, facetHolder)); + objectScenario(CustomerWithDomainObjectAndAutoCompleteRepositoryAndAction.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); - assertNotNull(facet); + final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); + assertNotNull(facet); - assertTrue(facet instanceof AutoCompleteFacetForDomainObjectAnnotation); + assertTrue(facet instanceof AutoCompleteFacetForDomainObjectAnnotation); - final AutoCompleteFacetForDomainObjectAnnotation autoCompleteFacet = (AutoCompleteFacetForDomainObjectAnnotation) facet; + final AutoCompleteFacetForDomainObjectAnnotation autoCompleteFacet = (AutoCompleteFacetForDomainObjectAnnotation) facet; - assertThat(CustomerRepository.class.isAssignableFrom(autoCompleteFacet.getRepositoryClass()), is(true)); - assertThat(autoCompleteFacet.getActionName(), is("lookup")); + assertThat(CustomerRepository.class.isAssignableFrom(autoCompleteFacet.getRepositoryClass()), is(true)); + assertThat(autoCompleteFacet.getActionName(), is("lookup")); + + expectNoMethodsRemoved(); + }); - expectNoMethodsRemoved(); } @Test public void whenDomainObjectAndAutoCompleteRepository() { - facetFactory.process(ProcessClassContext - .forTesting( - CustomerWithDomainObjectAndAutoCompleteRepository.class, mockMethodRemover, facetHolder)); + objectScenario(CustomerWithDomainObjectAndAutoCompleteRepository.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); - assertNotNull(facet); + final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); + assertNotNull(facet); - assertTrue(facet instanceof AutoCompleteFacetForDomainObjectAnnotation); + assertTrue(facet instanceof AutoCompleteFacetForDomainObjectAnnotation); - final AutoCompleteFacetForDomainObjectAnnotation autoCompleteFacet = (AutoCompleteFacetForDomainObjectAnnotation) facet; + final AutoCompleteFacetForDomainObjectAnnotation autoCompleteFacet = (AutoCompleteFacetForDomainObjectAnnotation) facet; - assertThat(CustomerRepositoryWithDefaultMethodName.class.isAssignableFrom(autoCompleteFacet.getRepositoryClass()), is(true)); - assertThat(autoCompleteFacet.getActionName(), is("autoComplete")); + assertThat(CustomerRepositoryWithDefaultMethodName.class.isAssignableFrom(autoCompleteFacet.getRepositoryClass()), is(true)); + assertThat(autoCompleteFacet.getActionName(), is("autoComplete")); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void whenDomainObjectAnnotationButNoAutoComplete() { - facetFactory.process(ProcessClassContext - .forTesting( - CustomerWithDomainObjectButNoAutoCompleteRepository.class, mockMethodRemover, facetHolder)); + objectScenario(CustomerWithDomainObjectButNoAutoCompleteRepository.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void whenNoDomainObjectAnnotation() { - facetFactory.process(ProcessClassContext - .forTesting( - DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder)); + objectScenario(DomainObjectAnnotationFacetFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -339,39 +338,43 @@ public void setUp() throws Exception { @Test public void whenDomainObjectAndBoundedSetToTrue() { - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndBoundedSetToTrue.class, mockMethodRemover, facetHolder)); + objectScenario(CustomerWithDomainObjectAndBoundedSetToTrue.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ChoicesFacet.class); - assertNotNull(facet); + final Facet facet = facetHolder.getFacet(ChoicesFacet.class); + assertNotNull(facet); - assertTrue(facet instanceof ChoicesFacetForDomainObjectAnnotation); + assertTrue(facet instanceof ChoicesFacetForDomainObjectAnnotation); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + + }); } @Test public void whenDomainObjectAndAutoCompleteRepository() { - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndBoundedSetToFalse.class, mockMethodRemover, facetHolder)); + objectScenario(CustomerWithDomainObjectAndBoundedSetToFalse.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ChoicesFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(ChoicesFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void whenNoDomainObjectAnnotation() { - facetFactory.process(ProcessClassContext - .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder)); + objectScenario(DomainObjectAnnotationFacetFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ChoicesFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(ChoicesFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -400,42 +403,45 @@ public static class WhenNotAnnotatedAndDefaultsFromConfiguration extends Editing public void configured_value_set_to_true() { allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.TRUE); - facetFactory.process(ProcessClassContext - .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder)); + objectScenario(DomainObjectAnnotationFacetFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ImmutableFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(ImmutableFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + + }); } @Test public void configured_value_set_to_false() { allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.FALSE); - facetFactory.process(ProcessClassContext - .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder)); + objectScenario(DomainObjectAnnotationFacetFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ImmutableFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ImmutableFacetFromConfiguration); + final Facet facet = facetHolder.getFacet(ImmutableFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ImmutableFacetFromConfiguration); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void configured_value_set_to_defaults() { //allowingConfigurationToReturn("causeway.objects.editing", "foobar"); + objectScenario(DomainObjectAnnotationFacetFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder)); - - final Facet facet = facetHolder.getFacet(ImmutableFacet.class); - assertNotNull(facet); // default is now non-editable - assertTrue(facet instanceof ImmutableFacetFromConfiguration); + final Facet facet = facetHolder.getFacet(ImmutableFacet.class); + assertNotNull(facet); // default is now non-editable + assertTrue(facet instanceof ImmutableFacetFromConfiguration); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -445,42 +451,42 @@ public static class WithDomainObjectAnnotationWithEditingSetToAsConfigured exten @Test public void configured_value_set_to_true() { allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.TRUE); + objectScenario(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, mockMethodRemover, facetHolder)); - - final Facet facet = facetHolder.getFacet(ImmutableFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(ImmutableFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void configured_value_set_to_false() { allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.FALSE); + objectScenario(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, mockMethodRemover, facetHolder)); - - final Facet facet = facetHolder.getFacet(ImmutableFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotation); + final Facet facet = facetHolder.getFacet(ImmutableFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotation); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void configured_value_set_to_defaults() { //allowingConfigurationToReturn("causeway.objects.editing", "foobar"); + objectScenario(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, mockMethodRemover, facetHolder)); - - final Facet facet = facetHolder.getFacet(ImmutableFacet.class); - assertNotNull(facet); // default is now non-editable - assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotationAsConfigured); + final Facet facet = facetHolder.getFacet(ImmutableFacet.class); + assertNotNull(facet); // default is now non-editable + assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotationAsConfigured); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -489,17 +495,15 @@ public static class WithDomainObjectAnnotationWithEditingSetToEnabled extends Ed @Test public void irrespective_of_configured_value() { allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.FALSE); + objectScenario(CustomerWithDomainObjectAndEditingSetToEnabled.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting( - CustomerWithDomainObjectAndEditingSetToEnabled.class, mockMethodRemover, facetHolder)); - - final ImmutableFacet facet = facetHolder.getFacet(ImmutableFacet.class); - assertNull(facet); + final ImmutableFacet facet = facetHolder.getFacet(ImmutableFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } - } public static class WithDomainObjectAnnotationWithEditingSetToDisabled extends Editing { @@ -507,20 +511,17 @@ public static class WithDomainObjectAnnotationWithEditingSetToDisabled extends E @Test public void irrespective_of_configured_value() { allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.TRUE); + objectScenario(CustomerWithDomainObjectAndEditingSetToDisabled.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - facetFactory.process(ProcessClassContext - .forTesting( - CustomerWithDomainObjectAndEditingSetToDisabled.class, mockMethodRemover, facetHolder)); + final Facet facet = facetHolder.getFacet(ImmutableFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotation); - final Facet facet = facetHolder.getFacet(ImmutableFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotation); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } - } - } public static class LogicalTypeName extends DomainObjectAnnotationFacetFactoryTest { @@ -551,25 +552,27 @@ public void whenDomainObjectAndObjectTypeSetToTrue() { @Test public void whenDomainObjectAndObjectTypeNotSet() { - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectButNoObjectType.class, mockMethodRemover, facetHolder)); + objectScenario(CustomerWithDomainObjectButNoObjectType.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(AliasedFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(AliasedFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void whenNoDomainObjectAnnotation() { - facetFactory.process(ProcessClassContext - .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder)); + objectScenario(DomainObjectAnnotationFacetFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(AliasedFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(AliasedFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -602,51 +605,57 @@ public void setUp() throws Exception { @Test public void whenDomainObjectAndNatureSetToJdoEntity() { - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndNatureSetToJdoEntity.class, mockMethodRemover, facetHolder)); + objectScenario(CustomerWithDomainObjectAndNatureSetToJdoEntity.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ViewModelFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(ViewModelFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void whenDomainObjectAndNatureSetToNotSpecified() { - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndNatureSetToNotSpecified.class, mockMethodRemover, facetHolder)); + objectScenario(CustomerWithDomainObjectAndNatureSetToNotSpecified.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ViewModelFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(ViewModelFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void whenDomainObjectAndNatureSetToViewModel() { - facetFactory.process(ProcessClassContext - .forTesting(CustomerWithDomainObjectAndNatureSetToViewModel.class, mockMethodRemover, facetHolder)); + objectScenario(CustomerWithDomainObjectAndNatureSetToViewModel.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ViewModelFacet.class); - assertNotNull(facet); + final Facet facet = facetHolder.getFacet(ViewModelFacet.class); + assertNotNull(facet); - assertTrue(facet instanceof ViewModelFacetForDomainObjectAnnotation); + assertTrue(facet instanceof ViewModelFacetForDomainObjectAnnotation); + + expectNoMethodsRemoved(); + }); - expectNoMethodsRemoved(); } @Test public void whenNoDomainObjectAnnotation() { - facetFactory.process(ProcessClassContext - .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder)); + objectScenario(DomainObjectAnnotationFacetFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ViewModelFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(ViewModelFacet.class); + assertNull(facet); + + expectNoMethodsRemoved(); + }); - expectNoMethodsRemoved(); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/NamedAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/NamedAnnotationFacetFactoryTest.java index e201e555174..278c45d3db0 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/NamedAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/NamedAnnotationFacetFactoryTest.java @@ -27,10 +27,10 @@ import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.applib.id.LogicalType; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; class NamedAnnotationFacetFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { @Test void logicalTypeNameAnnotationPickedUpOnClass() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java index 6196e983d38..e61418c9fb1 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java @@ -37,8 +37,7 @@ import org.apache.causeway.applib.annotation.DomainObjectLayout; import org.apache.causeway.applib.layout.component.CssClassFaPosition; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.all.described.ObjectDescribedFacet; import org.apache.causeway.core.metamodel.facets.all.named.ObjectNamedFacet; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; @@ -51,7 +50,7 @@ @ExtendWith(MockitoExtension.class) class DomainObjectLayoutFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { DomainObjectLayoutFacetFactory facetFactory; @@ -62,11 +61,9 @@ public void setUp() throws Exception { facetFactory = new DomainObjectLayoutFacetFactory(metaModelContext); } - @Override @AfterEach public void tearDown() throws Exception { facetFactory = null; - super.tearDown(); } // -- DOMAIN OBJECTS FOR TESTING @@ -98,36 +95,33 @@ public void setUp2() throws Exception { @Test public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = DomainObjectLayoutFactoryTest.Customer.class; + final Facet facet = facetHolder.getFacet(BookmarkPolicyFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof BookmarkPolicyFacetForDomainObjectLayoutAnnotation); - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); + final BookmarkPolicyFacetForDomainObjectLayoutAnnotation facetImpl = + (BookmarkPolicyFacetForDomainObjectLayoutAnnotation) facet; - final Facet facet = facetHolder.getFacet(BookmarkPolicyFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof BookmarkPolicyFacetForDomainObjectLayoutAnnotation); + assertThat(facetImpl.value(), is(BookmarkPolicy.AS_ROOT)); - final BookmarkPolicyFacetForDomainObjectLayoutAnnotation facetImpl = - (BookmarkPolicyFacetForDomainObjectLayoutAnnotation) facet; + expectNoMethodsRemoved(); - assertThat(facetImpl.value(), is(BookmarkPolicy.AS_ROOT)); - - expectNoMethodsRemoved(); + }); } @Test public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = CustomerWithDefaults.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); + final BookmarkPolicyFacet facet = facetHolder.getFacet(BookmarkPolicyFacet.class); + assertThat(facet.value(), is(BookmarkPolicy.NOT_SPECIFIED)); - final BookmarkPolicyFacet facet = facetHolder.getFacet(BookmarkPolicyFacet.class); - assertThat(facet.value(), is(BookmarkPolicy.NOT_SPECIFIED)); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -148,35 +142,31 @@ public void setUp() throws Exception { @Test public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = DomainObjectLayoutFactoryTest.Customer.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); + final Facet facet = facetHolder.getFacet(CssClassFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CssClassFacetForDomainObjectLayoutAnnotation); - final Facet facet = facetHolder.getFacet(CssClassFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CssClassFacetForDomainObjectLayoutAnnotation); + final CssClassFacetForDomainObjectLayoutAnnotation facetImpl = + (CssClassFacetForDomainObjectLayoutAnnotation) facet; + assertThat(facetImpl.cssClass(mockAdapter), is("foobar")); - final CssClassFacetForDomainObjectLayoutAnnotation facetImpl = - (CssClassFacetForDomainObjectLayoutAnnotation) facet; - assertThat(facetImpl.cssClass(mockAdapter), is("foobar")); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = CustomerWithDefaults.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); - - final Facet facet = facetHolder.getFacet(CssClassFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(CssClassFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -192,38 +182,34 @@ public static class ForDomainObjectLayout extends CssClassFa { public void setUp2() throws Exception { } - @Test public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = DomainObjectLayoutFactoryTest.Customer.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); + final Facet facet = facetHolder.getFacet(CssClassFaFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CssClassFaFacetForDomainObjectLayoutAnnotation); - final Facet facet = facetHolder.getFacet(CssClassFaFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CssClassFaFacetForDomainObjectLayoutAnnotation); + final CssClassFaFacetForDomainObjectLayoutAnnotation facetImpl = (CssClassFaFacetForDomainObjectLayoutAnnotation) facet; + assertThat(facetImpl.asSpaceSeparated(), equalTo("fa fa-fw fa-foo")); + assertThat(facetImpl.getPosition(), is(CssClassFaPosition.RIGHT)); - final CssClassFaFacetForDomainObjectLayoutAnnotation facetImpl = (CssClassFaFacetForDomainObjectLayoutAnnotation) facet; - assertThat(facetImpl.asSpaceSeparated(), equalTo("fa fa-fw fa-foo")); - assertThat(facetImpl.getPosition(), is(CssClassFaPosition.RIGHT)); + expectNoMethodsRemoved(); - expectNoMethodsRemoved(); + }); } @Test public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = CustomerWithDefaults.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); + final Facet facet = facetHolder.getFacet(CssClassFaFacet.class); + assertNull(facet); - final Facet facet = facetHolder.getFacet(CssClassFaFacet.class); - assertNull(facet); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } @@ -242,38 +228,34 @@ public void setUp2() throws Exception { @Test public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = DomainObjectLayoutFactoryTest.Customer.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); + final Facet facet = facetHolder.getFacet(ObjectDescribedFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ObjectDescribedFacetForDomainObjectLayoutAnnotation); - final Facet facet = facetHolder.getFacet(ObjectDescribedFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ObjectDescribedFacetForDomainObjectLayoutAnnotation); + final ObjectDescribedFacetForDomainObjectLayoutAnnotation facetImpl = (ObjectDescribedFacetForDomainObjectLayoutAnnotation) facet; + assertThat(facetImpl.text(), is("This is a description")); - final ObjectDescribedFacetForDomainObjectLayoutAnnotation facetImpl = (ObjectDescribedFacetForDomainObjectLayoutAnnotation) facet; - assertThat(facetImpl.text(), is("This is a description")); + expectNoMethodsRemoved(); - expectNoMethodsRemoved(); + }); } @Test public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = CustomerWithDefaults.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); + final Facet facet = facetHolder.getFacet(ObjectDescribedFacet.class); + assertNull(facet); - final Facet facet = facetHolder.getFacet(ObjectDescribedFacet.class); - assertNull(facet); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } - } public static class Named extends DomainObjectLayoutFactoryTest { @@ -288,37 +270,32 @@ public void setUp2() throws Exception { @Test public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = DomainObjectLayoutFactoryTest.Customer.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); + val namedFacet = facetHolder.getFacet(ObjectNamedFacet.class); + assertNotNull(namedFacet); + assertTrue(namedFacet instanceof ObjectNamedFacetForDomainObjectLayoutAnnotation); - val namedFacet = facetHolder.getFacet(ObjectNamedFacet.class); - assertNotNull(namedFacet); - assertTrue(namedFacet instanceof ObjectNamedFacetForDomainObjectLayoutAnnotation); + assertEquals("Name override", namedFacet.singular()); - assertEquals("Name override", namedFacet.singular()); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } @Test public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = CustomerWithDefaults.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); - - val facet = facetHolder.getFacet(ObjectNamedFacet.class); - assertNull(facet); + val facet = facetHolder.getFacet(ObjectNamedFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } - } public static class Paged extends DomainObjectLayoutFactoryTest { @@ -333,37 +310,32 @@ public void setUp2() throws Exception { @Test public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = DomainObjectLayoutFactoryTest.Customer.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls, mockMethodRemover, facetHolder)); + final Facet facet = facetHolder.getFacet(PagedFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PagedFacetForDomainObjectLayoutAnnotation); - final Facet facet = facetHolder.getFacet(PagedFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PagedFacetForDomainObjectLayoutAnnotation); + final PagedFacetForDomainObjectLayoutAnnotation facetImpl = (PagedFacetForDomainObjectLayoutAnnotation) facet; + assertThat(facetImpl.value(), is(20)); - final PagedFacetForDomainObjectLayoutAnnotation facetImpl = (PagedFacetForDomainObjectLayoutAnnotation) facet; - assertThat(facetImpl.value(), is(20)); + expectNoMethodsRemoved(); - expectNoMethodsRemoved(); + }); } @Test public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Class cls = CustomerWithDefaults.class; - - facetFactory.process(ProcessClassContext - .forTesting(cls,mockMethodRemover, facetHolder)); + final Facet facet = facetHolder.getFacet(PagedFacet.class); + assertNull(facet); - final Facet facet = facetHolder.getFacet(PagedFacet.class); - assertNull(facet); - - expectNoMethodsRemoved(); + expectNoMethodsRemoved(); + }); } } - } - } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodTest.java index c892065dd64..158a7469532 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodTest.java @@ -30,8 +30,8 @@ import org.apache.causeway.applib.annotation.Introspection; import org.apache.causeway.applib.annotation.MemberSupport; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.causeway.core.metamodel.facets.object.cssclass.method.CssClassFacetViaCssClassMethod; import org.apache.causeway.core.metamodel.facets.object.support.ObjectSupportFacetFactory; @@ -39,7 +39,7 @@ import lombok.val; class CssClassFacetMethodTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { static final String CSS_CLASS = "someCssClass"; @@ -54,20 +54,12 @@ static class DomainObjectInCssClassMethod { @BeforeEach void setup() { - super.setUpMmc(); facetFactory = new ObjectSupportFacetFactory(getMetaModelContext()); } @AfterEach - @Override protected void tearDown() throws Exception { facetFactory = null; - super.tearDown(); - } - - @BeforeEach - void setUp() throws Exception { - super.setUpMmc(); } @Test diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java index f50e827d668..dcd4a446259 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java @@ -40,9 +40,8 @@ import org.apache.causeway.applib.services.iactnlayer.InteractionService; import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; import org.apache.causeway.core.metamodel.facets.Evaluators; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.title.TitleFacet; import org.apache.causeway.core.metamodel.facets.object.title.annotation.TitleAnnotationFacetFactory; import org.apache.causeway.core.metamodel.facets.object.title.annotation.TitleFacetViaTitleAnnotation; @@ -52,7 +51,7 @@ import lombok.val; class TitleAnnotationFacetFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { private TitleAnnotationFacetFactory facetFactory; @@ -72,10 +71,8 @@ public void setUp() throws Exception { } @AfterEach - @Override public void tearDown() throws Exception { facetFactory = null; - super.tearDown(); } // -- SCENARIO 1 @@ -90,25 +87,30 @@ public String someTitle() { @Test public void testTitleAnnotatedMethodPickedUpOnClassRemoved() throws Exception { - facetFactory.process(ProcessClassContext - .forTesting(Customer1.class, mockMethodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(TitleFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TitleFacetViaTitleAnnotation); - final TitleFacetViaTitleAnnotation titleFacetViaTitleAnnotation = - (TitleFacetViaTitleAnnotation) facet; - - final List titleMethods = Arrays.asList(Customer1.class.getMethod("someTitle")); - for (int i = 0; i < titleMethods.size(); i++) { - final Evaluators.MethodEvaluator titleEvaluator = - (Evaluators.MethodEvaluator) titleFacetViaTitleAnnotation.getComponents() - .getElseFail(i) - .getTitleEvaluator(); - - assertEquals(titleMethods.get(i), - titleEvaluator.getMethod()); - } + + val someTitleMethod = Customer1.class.getMethod("someTitle"); + + objectScenario(Customer1.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); + + final Facet facet = facetHolder.getFacet(TitleFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TitleFacetViaTitleAnnotation); + final TitleFacetViaTitleAnnotation titleFacetViaTitleAnnotation = + (TitleFacetViaTitleAnnotation) facet; + + final List titleMethods = Arrays.asList(someTitleMethod); + for (int i = 0; i < titleMethods.size(); i++) { + final Evaluators.MethodEvaluator titleEvaluator = + (Evaluators.MethodEvaluator) titleFacetViaTitleAnnotation.getComponents() + .getElseFail(i) + .getTitleEvaluator(); + + assertEquals(titleMethods.get(i), + titleEvaluator.getMethod()); + } + }); + } // -- SCENARIO 2 @@ -135,35 +137,38 @@ public String titleElement3() { @Test public void testTitleAnnotatedMethodsPickedUpOnClass() throws Exception { - facetFactory.process(ProcessClassContext - .forTesting(Customer2.class, mockMethodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(TitleFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TitleFacetViaTitleAnnotation); - final TitleFacetViaTitleAnnotation titleFacetViaTitleAnnotation = - (TitleFacetViaTitleAnnotation) facet; - final List titleMethods = Arrays.asList( Customer2.class.getMethod("titleElement1"), Customer2.class.getMethod("titleElement3"), Customer2.class.getMethod("titleElement2")); - for (int i = 0; i < titleMethods.size(); i++) { - final Evaluators.MethodEvaluator titleEvaluator = - (Evaluators.MethodEvaluator) titleFacetViaTitleAnnotation.getComponents() - .getElseFail(i) - .getTitleEvaluator(); + objectScenario(Customer2.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - assertEquals(titleMethods.get(i), - titleEvaluator.getMethod()); - } + final Facet facet = facetHolder.getFacet(TitleFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TitleFacetViaTitleAnnotation); + final TitleFacetViaTitleAnnotation titleFacetViaTitleAnnotation = + (TitleFacetViaTitleAnnotation) facet; + + for (int i = 0; i < titleMethods.size(); i++) { + final Evaluators.MethodEvaluator titleEvaluator = + (Evaluators.MethodEvaluator) titleFacetViaTitleAnnotation.getComponents() + .getElseFail(i) + .getTitleEvaluator(); + + assertEquals(titleMethods.get(i), + titleEvaluator.getMethod()); + } - final Customer2 customer = new Customer2(); - val objectAdapter = ManagedObject.adaptSingular(getSpecificationLoader(), customer); + final Customer2 customer = new Customer2(); + val objectAdapter = ManagedObject.adaptSingular(getSpecificationLoader(), customer); + + final String title = titleFacetViaTitleAnnotation.title(objectAdapter); + assertThat(title, is("titleElement1. titleElement3,titleElement2")); + + }); - final String title = titleFacetViaTitleAnnotation.title(objectAdapter); - assertThat(title, is("titleElement1. titleElement3,titleElement2")); } // -- SCENARIO 3 @@ -174,10 +179,10 @@ public static class Customer3 { @Test public void testNoExplicitTitleAnnotations() { - facetFactory.process(ProcessClassContext - .forTesting(Customer3.class, mockMethodRemover, facetedMethod)); - - assertNull(facetedMethod.getFacet(TitleFacet.class)); + objectScenario(Customer3.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); + assertNull(facetHolder.getFacet(TitleFacet.class)); + }); } // -- SCENARIO 4 @@ -237,13 +242,15 @@ public void titleAnnotatedMethodsSomeOfWhichReturnNulls() throws Exception { assertEquals("3", pThree.getTitle()); } - facetFactory.process(ProcessClassContext - .forTesting(Customer4.class, mockMethodRemover, facetedMethod)); + objectScenario(Customer4.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); + + val objectAdapter = getObjectManager().adapt(new Customer4()); - val objectAdapter = getObjectManager().adapt(new Customer4()); + assertThat(objectAdapter.getTitle(), + is("titleElement1 titleElement3 titleElement5 3 this needs to be trimmed")); + }); - assertThat(objectAdapter.getTitle(), - is("titleElement1 titleElement3 titleElement5 3 this needs to be trimmed")); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java index 0ea9e9c5a66..a83dd3c546a 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java @@ -30,12 +30,12 @@ import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting; import org.apache.causeway.core.metamodel.context.MetaModelContext; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.title.methods.TitleFacetViaTitleMethod; import org.apache.causeway.core.metamodel.object.ManagedObject; class TitleFacetViaMethodTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { private TitleFacetViaTitleMethod facet; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/LogicalTypeInferenceTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/LogicalTypeInferenceTest.java index 37282acd7c1..e54b09dca98 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/LogicalTypeInferenceTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/LogicalTypeInferenceTest.java @@ -27,10 +27,10 @@ import org.apache.causeway.applib.annotation.Value; import org.apache.causeway.applib.id.LogicalType; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; public class LogicalTypeInferenceTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { public static class Customer { } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java index 0da528835a8..88339de4819 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java @@ -34,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.commons.internal._Constants; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; import org.apache.causeway.core.metamodel.facets.object.navparent.NavigableParentFacet; import org.apache.causeway.core.metamodel.facets.object.navparent.annotation.NavigableParentTestSamples.DomainObjectInvalidParentAnnot; @@ -44,7 +44,7 @@ import lombok.val; class NavigableParentAnnotationFacetFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { private NavigableParentAnnotationFacetFactory facetFactory; @@ -55,13 +55,10 @@ void setUp() throws Exception { } @AfterEach - @Override protected void tearDown() throws Exception { facetFactory = null; - super.tearDown(); } - static Stream navigableTypeArgs() { return Stream.of( Arguments.of(new DomainObjectProperAnnot(), "root", null), diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java index d235d202978..ff503ef44cd 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java @@ -27,12 +27,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.annotation.ParameterLayout; import org.apache.causeway.commons.internal.reflection._Reflect; import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; -import org.apache.causeway.core.metamodel.facets.FacetFactory; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet; import org.apache.causeway.core.metamodel.progmodel.ProgrammingModel; @@ -42,7 +40,7 @@ * needs the javac -parameter flag set when compiling this test */ class ParameterNameFacetTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { ProgrammingModel programmingModel; Method actionMethod; @@ -58,10 +56,8 @@ public void setUp() throws Exception { programmingModel = metaModelContext.getProgrammingModel(); } - @Override @AfterEach public void tearDown() throws Exception { - super.tearDown(); programmingModel = null; } @@ -95,21 +91,14 @@ public void someAction(final String anAwesomeName) { } } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - val processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - - programmingModel.streamFactories() - .forEach(facetFactory->facetFactory.processParams(processParameterContext)); - - // then - val namedFacet = facetedMethodParameter.getFacet(ParamNamedFacet.class); - - assertEquals("An Awesome Name", namedFacet.text()); - + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + programmingModel.streamFactories() + .forEach(facetFactory->facetFactory.processParams(processParameterContext)); + // then + val namedFacet = facetedMethodParameter.getFacet(ParamNamedFacet.class); + assertEquals("An Awesome Name", namedFacet.text()); + }); } @Test @@ -118,27 +107,19 @@ public void explicitNameShouldTakePrecedenceOverReflective() { class Customer { @SuppressWarnings("unused") public void someAction( - @ParameterLayout( - named = "Even Better Name" - ) + @ParameterLayout(named = "Even Better Name") final String anAwesomeName) { } } - - // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - val processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - programmingModel.streamFactories().forEach(facetFactory->facetFactory.processParams(processParameterContext)); - - // then - val namedFacet = facetedMethodParameter.getFacet(ParamNamedFacet.class); - assertNotNull(namedFacet); - assertEquals("Even Better Name", namedFacet.text()); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + programmingModel.streamFactories().forEach(facetFactory->facetFactory.processParams(processParameterContext)); + // then + val namedFacet = facetedMethodParameter.getFacet(ParamNamedFacet.class); + assertNotNull(namedFacet); + assertEquals("Even Better Name", namedFacet.text()); + }); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java index 5367b1fb2e1..171eb37e463 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java @@ -34,12 +34,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.calls; -import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.annotation.Optionality; import org.apache.causeway.applib.annotation.Parameter; import org.apache.causeway.applib.spec.Specification; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; -import org.apache.causeway.core.metamodel.facets.FacetFactory; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.mustsatisfyspec.MustSatisfySpecificationFacet; @@ -54,9 +52,10 @@ @SuppressWarnings("unused") class ParameterAnnotationFacetFactoryTest -extends AbstractFacetFactoryJupiterTestCase { +extends FacetFactoryTestAbstract { ParameterAnnotationFacetFactory facetFactory; + @Deprecated Method actionMethod; @Mock ObjectSpecification mockTypeSpec; @@ -71,7 +70,6 @@ public void setUp() throws Exception { facetFactory = new ParameterAnnotationFacetFactory(metaModelContext); } - @Override @AfterEach public void tearDown() throws Exception { facetFactory = null; @@ -84,26 +82,20 @@ public void withAnnotation() { class Customer { public void someAction( - @Parameter( - maxLength = 30 - ) + @Parameter(maxLength = 30) final String name) { } } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - // then - final MaxLengthFacet maxLengthFacet = facetedMethodParameter.getFacet(MaxLengthFacet.class); - assertNotNull(maxLengthFacet); - assertTrue(maxLengthFacet instanceof MaxLengthFacetForParameterAnnotation); - assertThat(maxLengthFacet.value(), is(30)); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + // then + final MaxLengthFacet maxLengthFacet = facetedMethodParameter.getFacet(MaxLengthFacet.class); + assertNotNull(maxLengthFacet); + assertTrue(maxLengthFacet instanceof MaxLengthFacetForParameterAnnotation); + assertThat(maxLengthFacet.value(), is(30)); + }); } } @@ -123,41 +115,32 @@ public String satisfies(final Object obj) { } } - @Test public void withAnnotation() { class Customer { public void someAction( - @Parameter( - mustSatisfy = {NotTooHot.class, NotTooCold.class} - ) - final String name - ) { - } + @Parameter(mustSatisfy = {NotTooHot.class, NotTooCold.class}) + final String name) {} } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - // then - final MustSatisfySpecificationFacet mustSatisfySpecificationFacet = facetedMethodParameter.getFacet(MustSatisfySpecificationFacet.class); - assertNotNull(mustSatisfySpecificationFacet); - assertTrue(mustSatisfySpecificationFacet instanceof MustSatisfySpecificationFacetForParameterAnnotation); - MustSatisfySpecificationFacetForParameterAnnotation mustSatisfySpecificationFacetImpl = (MustSatisfySpecificationFacetForParameterAnnotation) mustSatisfySpecificationFacet; - val specifications = mustSatisfySpecificationFacetImpl.getSpecifications(); - assertThat(specifications.size(), is(2)); - - assertTrue(specifications.getElseFail(0) instanceof NotTooHot); - assertTrue(specifications.getElseFail(1) instanceof NotTooCold); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + + // then + final MustSatisfySpecificationFacet mustSatisfySpecificationFacet = facetedMethodParameter.getFacet(MustSatisfySpecificationFacet.class); + assertNotNull(mustSatisfySpecificationFacet); + assertTrue(mustSatisfySpecificationFacet instanceof MustSatisfySpecificationFacetForParameterAnnotation); + MustSatisfySpecificationFacetForParameterAnnotation mustSatisfySpecificationFacetImpl = (MustSatisfySpecificationFacetForParameterAnnotation) mustSatisfySpecificationFacet; + val specifications = mustSatisfySpecificationFacetImpl.getSpecifications(); + assertThat(specifications.size(), is(2)); + + assertTrue(specifications.getElseFail(0) instanceof NotTooHot); + assertTrue(specifications.getElseFail(1) instanceof NotTooCold); + }); } - } public static class Mandatory extends ParameterAnnotationFacetFactoryTest { @@ -167,27 +150,19 @@ public void whenOptionalityIsTrue() { class Customer { public void someAction( - @Parameter( - optionality = Optionality.OPTIONAL - ) - final String name - ) { - } + @Parameter(optionality = Optionality.OPTIONAL) + final String name) {} } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - // then - final MandatoryFacet mandatoryFacet = facetedMethodParameter.getFacet(MandatoryFacet.class); - assertNotNull(mandatoryFacet); - assertTrue(mandatoryFacet instanceof MandatoryFacetForParameterAnnotation.Optional); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + // then + final MandatoryFacet mandatoryFacet = facetedMethodParameter.getFacet(MandatoryFacet.class); + assertNotNull(mandatoryFacet); + assertTrue(mandatoryFacet instanceof MandatoryFacetForParameterAnnotation.Optional); + }); } @Test @@ -195,27 +170,19 @@ public void whenOptionalityIsFalse() { class Customer { public void someAction( - @Parameter( - optionality = Optionality.MANDATORY - ) - final String name - ) { - } + @Parameter(optionality = Optionality.MANDATORY) + final String name) {} } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - // then - final MandatoryFacet mandatoryFacet = facetedMethodParameter.getFacet(MandatoryFacet.class); - assertNotNull(mandatoryFacet); - assertTrue(mandatoryFacet instanceof MandatoryFacetForParameterAnnotation.Required); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + // then + final MandatoryFacet mandatoryFacet = facetedMethodParameter.getFacet(MandatoryFacet.class); + assertNotNull(mandatoryFacet); + assertTrue(mandatoryFacet instanceof MandatoryFacetForParameterAnnotation.Required); + }); } @Test @@ -223,26 +190,18 @@ public void whenOptionalityIsDefault() { class Customer { public void someAction( - @Parameter( - optionality = Optionality.DEFAULT - ) - final String name - ) { - } + @Parameter(optionality = Optionality.DEFAULT) + final String name) {} } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - // then - final MandatoryFacet mandatoryFacet = facetedMethodParameter.getFacet(MandatoryFacet.class); - assertNull(mandatoryFacet); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + // then + final MandatoryFacet mandatoryFacet = facetedMethodParameter.getFacet(MandatoryFacet.class); + assertNull(mandatoryFacet); + }); } @Test @@ -250,24 +209,17 @@ public void whenNone() { class Customer { public void someAction( - final String name - ) { - } + final String name) {} } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - - // then - final MandatoryFacet mandatoryFacet = facetedMethodParameter.getFacet(MandatoryFacet.class); - assertNull(mandatoryFacet); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + // then + final MandatoryFacet mandatoryFacet = facetedMethodParameter.getFacet(MandatoryFacet.class); + assertNull(mandatoryFacet); + }); } } @@ -281,29 +233,22 @@ class Customer { public void someAction( @Parameter( regexPattern = "[123].*", - regexPatternFlags = Pattern.CASE_INSENSITIVE | Pattern.MULTILINE - ) - final String name - ) { - } + regexPatternFlags = Pattern.CASE_INSENSITIVE | Pattern.MULTILINE) + final String name) {} } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - - // then - final RegExFacet regExFacet = facetedMethodParameter.getFacet(RegExFacet.class); - assertNotNull(regExFacet); - assertTrue(regExFacet instanceof RegExFacetForParameterAnnotation); - assertThat(regExFacet.patternFlags(), is(10)); - assertThat(regExFacet.regexp(), is("[123].*")); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + // then + final RegExFacet regExFacet = facetedMethodParameter.getFacet(RegExFacet.class); + assertNotNull(regExFacet); + assertTrue(regExFacet instanceof RegExFacetForParameterAnnotation); + assertThat(regExFacet.patternFlags(), is(10)); + assertThat(regExFacet.regexp(), is("[123].*")); + + }); } @Test @@ -311,25 +256,19 @@ public void whenNone() { class Customer { public void someAction( - @Parameter( - ) - final String name - ) { - } + @Parameter() + final String name) {} } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - // then - final RegExFacet regExFacet = facetedMethodParameter.getFacet(RegExFacet.class); - assertNull(regExFacet); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + // then + final RegExFacet regExFacet = facetedMethodParameter.getFacet(RegExFacet.class); + assertNull(regExFacet); + + }); } @Test @@ -337,27 +276,18 @@ public void whenEmptyString() { class Customer { public void someAction( - @Parameter( - regexPattern = "" - ) - final String name - ) { - } + @Parameter(regexPattern = "") + final String name) {} } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{String.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - - // then - final RegExFacet regExFacet = facetedMethodParameter.getFacet(RegExFacet.class); - assertNull(regExFacet); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + // then + final RegExFacet regExFacet = facetedMethodParameter.getFacet(RegExFacet.class); + assertNull(regExFacet); + }); } @Test @@ -365,30 +295,19 @@ public void whenNotAnnotatedOnStringParameter() { class Customer { public void someAction( - @Parameter( - regexPattern = "[123].*" - ) - final int name - ) { - } + @Parameter(regexPattern = "[123].*") + final int name) {} } // given - actionMethod = findMethod(Customer.class, "someAction", new Class[]{int.class} ); - - // when - final FacetFactory.ProcessParameterContext processParameterContext = - FacetFactory.ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, actionMethod, null, facetedMethodParameter); - facetFactory.processParams(processParameterContext); - - - // then - final RegExFacet regExFacet = facetedMethodParameter.getFacet(RegExFacet.class); - assertNotNull(regExFacet); - + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.processParams(processParameterContext); + // then + final RegExFacet regExFacet = facetedMethodParameter.getFacet(RegExFacet.class); + assertNotNull(regExFacet); + + }); } - } - } \ No newline at end of file diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java index a74d9e17d00..02c91c5a2d2 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java @@ -50,10 +50,9 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.FacetUtil; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryJupiterTestCase; import org.apache.causeway.core.metamodel.facets.DomainEventFacetAbstract.EventTypeOrigin; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; @@ -85,7 +84,7 @@ import lombok.Setter; import lombok.val; -class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJupiterTestCase { +class PropertyAnnotationFacetFactoryTest extends FacetFactoryTestAbstract { PropertyAnnotationFacetFactory facetFactory; Method propertyMethod; @@ -157,7 +156,6 @@ public void setUp() throws Exception { facetFactory = new PropertyAnnotationFacetFactory(metaModelContext); } - @Override @AfterEach public void tearDown() throws Exception { facetFactory = null; @@ -212,42 +210,39 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {} } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - addGetterFacet(facetedMethod); - addSetterFacet(facetedMethod); - addClearFacet(facetedMethod); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processModify(facetFactory, processMethodContext); - - // then - final PropertyDomainEventFacet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); - assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); - final PropertyDomainEventFacet domainEventFacetImpl = domainEventFacet; - assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); - assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); - - // then - final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); - assertNotNull(setterFacet); - assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); - final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; - assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); - assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); - - // then - final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); - assertNotNull(clearFacet); - assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); - final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; - assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); - assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + + addGetterFacet(facetedMethod); + addSetterFacet(facetedMethod); + addClearFacet(facetedMethod); + + // when + processModify(facetFactory, processMethodContext); + + // then + final PropertyDomainEventFacet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); + assertNotNull(domainEventFacet); + assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); + final PropertyDomainEventFacet domainEventFacetImpl = domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); + assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + + // then + final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); + assertNotNull(setterFacet); + assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); + final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); + assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + + // then + final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); + assertNotNull(clearFacet); + assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); + final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); + assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + }); } @@ -261,42 +256,38 @@ class NamedChangedDomainEvent extends PropertyDomainEvent {} } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - addGetterFacet(facetedMethod); - addSetterFacet(facetedMethod); - addClearFacet(facetedMethod); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processModify(facetFactory, processMethodContext); - - // then - final Facet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); - assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); - final PropertyDomainEventFacet domainEventFacetImpl = (PropertyDomainEventFacet) domainEventFacet; - assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); - assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); - - // then - final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); - assertNotNull(setterFacet); - assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); - final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; - assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); - assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); - - // then - final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); - assertNotNull(clearFacet); - assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); - final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; - assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, clearFacetImpl.getEventTypeOrigin()); - assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + addGetterFacet(facetedMethod); + addSetterFacet(facetedMethod); + addClearFacet(facetedMethod); + + // when + processModify(facetFactory, processMethodContext); + + // then + final Facet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); + assertNotNull(domainEventFacet); + assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); + final PropertyDomainEventFacet domainEventFacetImpl = (PropertyDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); + assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + + // then + final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); + assertNotNull(setterFacet); + assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); + final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); + assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + + // then + final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); + assertNotNull(clearFacet); + assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); + final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, clearFacetImpl.getEventTypeOrigin()); + assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + }); } @Test @@ -310,42 +301,38 @@ class NamedChangedDomainEvent extends PropertyDomainEvent { } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - addGetterFacet(facetedMethod); - addSetterFacet(facetedMethod); - addClearFacet(facetedMethod); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processModify(facetFactory, processMethodContext); - - // then - final Facet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); - assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); - final PropertyDomainEventFacet domainEventFacetImpl = (PropertyDomainEventFacet) domainEventFacet; - assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); - MatcherAssert.assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); - - // then - final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); - assertNotNull(setterFacet); - assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); - final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; - assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); - assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); - - // then - final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); - assertNotNull(clearFacet); - assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); - final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; - assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, clearFacetImpl.getEventTypeOrigin()); - assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + addGetterFacet(facetedMethod); + addSetterFacet(facetedMethod); + addClearFacet(facetedMethod); + + // when + processModify(facetFactory, processMethodContext); + + // then + final Facet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); + assertNotNull(domainEventFacet); + assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); + final PropertyDomainEventFacet domainEventFacetImpl = (PropertyDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isAnnotatedMember()); + MatcherAssert.assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + + // then + final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); + assertNotNull(setterFacet); + assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, "unexpected facet: " + setterFacet); + final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, setterFacetImpl.getEventTypeOrigin()); + assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + + // then + final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); + assertNotNull(clearFacet); + assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); + final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; + assertEquals(EventTypeOrigin.ANNOTATED_MEMBER, clearFacetImpl.getEventTypeOrigin()); + assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(Customer.NamedChangedDomainEvent.class)); + }); } @Test @@ -359,41 +346,37 @@ class Customer { assertTrue(metaModelContext.getConfiguration() .getApplib().getAnnotation().getDomainObject().getCreatedLifecycleEvent().isPostForDefault()); - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - addGetterFacet(facetedMethod); - addSetterFacet(facetedMethod); - addClearFacet(facetedMethod); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processModify(facetFactory, processMethodContext); - - // then - final Facet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); - assertNotNull(domainEventFacet); - assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); - final PropertyDomainEventFacet domainEventFacetImpl = (PropertyDomainEventFacet) domainEventFacet; - assertTrue(domainEventFacetImpl.getEventTypeOrigin().isDefault()); - assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); - - // then - final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); - assertNotNull(setterFacet); - assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, - "unexpected facet: " + setterFacet); - final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; - assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); - - // then - final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); - assertNotNull(clearFacet); - assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); - final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; - assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + addGetterFacet(facetedMethod); + addSetterFacet(facetedMethod); + addClearFacet(facetedMethod); + + // when + processModify(facetFactory, processMethodContext); + + // then + final Facet domainEventFacet = facetedMethod.getFacet(PropertyDomainEventFacet.class); + assertNotNull(domainEventFacet); + assertTrue(domainEventFacet instanceof PropertyDomainEventFacet); + final PropertyDomainEventFacet domainEventFacetImpl = (PropertyDomainEventFacet) domainEventFacet; + assertTrue(domainEventFacetImpl.getEventTypeOrigin().isDefault()); + assertThat(domainEventFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); + + // then + final Facet setterFacet = facetedMethod.getFacet(PropertySetterFacet.class); + assertNotNull(setterFacet); + assertTrue(setterFacet instanceof PropertySetterFacetForDomainEvent, + "unexpected facet: " + setterFacet); + final PropertySetterFacetForDomainEvent setterFacetImpl = (PropertySetterFacetForDomainEvent) setterFacet; + assertThat(setterFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); + + // then + final Facet clearFacet = facetedMethod.getFacet(PropertyClearFacet.class); + assertNotNull(clearFacet); + assertTrue(clearFacet instanceof PropertyClearFacetForDomainEvent); + final PropertyClearFacetForDomainEvent clearFacetImpl = (PropertyClearFacetForDomainEvent) clearFacet; + assertThat(clearFacetImpl.getEventType(), CausewayMatchers.classEqualTo(PropertyDomainEvent.Default.class)); + }); } } @@ -410,25 +393,21 @@ class Customer { } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processHidden(facetFactory, processMethodContext); - - // then - final HiddenFacet hiddenFacet = facetedMethod.getFacet(HiddenFacet.class); - assertNotNull(hiddenFacet); - assertTrue(hiddenFacet instanceof HiddenFacetForPropertyAnnotation); - final HiddenFacetForPropertyAnnotation hiddenFacetImpl = (HiddenFacetForPropertyAnnotation) hiddenFacet; - assertThat(hiddenFacetImpl.where(), is(Where.REFERENCES_PARENT)); - - final Facet hiddenFacetForProp = facetedMethod.getFacet(HiddenFacet.class); - assertNotNull(hiddenFacetForProp); - assertTrue(hiddenFacet == hiddenFacetForProp); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processHidden(facetFactory, processMethodContext); + + // then + final HiddenFacet hiddenFacet = facetedMethod.getFacet(HiddenFacet.class); + assertNotNull(hiddenFacet); + assertTrue(hiddenFacet instanceof HiddenFacetForPropertyAnnotation); + final HiddenFacetForPropertyAnnotation hiddenFacetImpl = (HiddenFacetForPropertyAnnotation) hiddenFacet; + assertThat(hiddenFacetImpl.where(), is(Where.REFERENCES_PARENT)); + + final Facet hiddenFacetForProp = facetedMethod.getFacet(HiddenFacet.class); + assertNotNull(hiddenFacetForProp); + assertTrue(hiddenFacet == hiddenFacetForProp); + }); } } @@ -442,13 +421,12 @@ public void withAnnotationOnGetter() { class Customer { @Property( editing = org.apache.causeway.applib.annotation.Editing.DISABLED, - editingDisabledReason = "you cannot edit the name property" - ) + editingDisabledReason = "you cannot edit the name property") public String getName() { return null; } public void setName(final String name) {} } - assertDisabledFacetOn(findMethod(Customer.class, "getName"), + assertDisabledFacetOn(Customer.class, "name", "you cannot edit the name property"); } @@ -458,13 +436,12 @@ public void withAnnotationOnField() { class Customer { @Property( editing = org.apache.causeway.applib.annotation.Editing.DISABLED, - editingDisabledReason = "you cannot edit the name property" - ) + editingDisabledReason = "you cannot edit the name property") @Getter @Setter private String name; } - assertDisabledFacetOn(findMethod(Customer.class, "getName"), + assertDisabledFacetOn(Customer.class, "name", "you cannot edit the name property"); } @@ -481,7 +458,7 @@ class Customer { public void setSubscribed(final boolean b) {} } - assertDisabledFacetOn(findMethod(Customer.class, "isSubscribed"), + assertDisabledFacetOn(Customer.class, "subscribed", "you cannot edit the subscribed property"); } @@ -497,7 +474,7 @@ class Customer { private boolean subscribed; } - assertDisabledFacetOn(findMethod(Customer.class, "isSubscribed"), + assertDisabledFacetOn(Customer.class, "subscribed", "you cannot edit the subscribed property"); } @@ -521,31 +498,25 @@ static class PrimitiveBooleanEntity implements PrimitiveBooleanHolder { @Test //FIXME[CAUSEWAY-2963] test fails - no facet is generated public void causeway2963() { - assertDisabledFacetOn(findMethod(PrimitiveBooleanEntity.class, "isReadWriteProperty"), - "b"); + assertDisabledFacetOn(PrimitiveBooleanEntity.class, "readWriteProperty", "b"); } // -- HELPER - private void assertDisabledFacetOn(final Method getter, final String expectedDisabledReason) { + private void assertDisabledFacetOn(final Class declaringClass, final String propertyName, final String expectedDisabledReason) { // given - final Class cls = getter.getDeclaringClass(); - propertyMethod = getter; - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processEditing(facetFactory, processMethodContext); - - // then - val disabledFacet = facetedMethod.getFacet(DisabledFacet.class); - assertNotNull(disabledFacet); - assertTrue(disabledFacet instanceof DisabledFacetForPropertyAnnotation); - val disabledFacet2 = (DisabledFacetForPropertyAnnotation) disabledFacet; - assertThat(disabledFacet.where(), is(Where.EVERYWHERE)); - assertThat(disabledFacet2.disabledReason(null).map(VetoReason::string).orElse(null), is(expectedDisabledReason)); + propertyScenario(declaringClass, propertyName, (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processEditing(facetFactory, processMethodContext); + // then + val disabledFacet = facetedMethod.getFacet(DisabledFacet.class); + assertNotNull(disabledFacet); + assertTrue(disabledFacet instanceof DisabledFacetForPropertyAnnotation); + val disabledFacet2 = (DisabledFacetForPropertyAnnotation) disabledFacet; + assertThat(disabledFacet.where(), is(Where.EVERYWHERE)); + assertThat(disabledFacet2.disabledReason(null).map(VetoReason::string).orElse(null), is(expectedDisabledReason)); + }); } } @@ -556,27 +527,21 @@ public static class MaxLength extends PropertyAnnotationFacetFactoryTest { public void withAnnotation() { class Customer { - @Property( - maxLength = 30 - ) + @Property(maxLength = 30) @Getter @Setter private String name; } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processMaxLength(facetFactory, processMethodContext); - - // then - final MaxLengthFacet maxLengthFacet = facetedMethod.getFacet(MaxLengthFacet.class); - assertNotNull(maxLengthFacet); - assertTrue(maxLengthFacet instanceof MaxLengthFacetForPropertyAnnotation); - assertThat(maxLengthFacet.value(), is(30)); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processMaxLength(facetFactory, processMethodContext); + + // then + final MaxLengthFacet maxLengthFacet = facetedMethod.getFacet(MaxLengthFacet.class); + assertNotNull(maxLengthFacet); + assertTrue(maxLengthFacet instanceof MaxLengthFacetForPropertyAnnotation); + assertThat(maxLengthFacet.value(), is(30)); + }); } } @@ -608,25 +573,21 @@ class Customer { } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processMustSatisfy(facetFactory, processMethodContext); - - // then - final MustSatisfySpecificationFacet mustSatisfySpecificationFacet = facetedMethod.getFacet(MustSatisfySpecificationFacet.class); - assertNotNull(mustSatisfySpecificationFacet); - assertTrue(mustSatisfySpecificationFacet instanceof MustSatisfySpecificationFacetForPropertyAnnotation); - final MustSatisfySpecificationFacetForPropertyAnnotation mustSatisfySpecificationFacetImpl = (MustSatisfySpecificationFacetForPropertyAnnotation) mustSatisfySpecificationFacet; - val specifications = mustSatisfySpecificationFacetImpl.getSpecifications(); - assertThat(specifications.size(), is(2)); - - assertTrue(specifications.getElseFail(0) instanceof NotTooHot); - assertTrue(specifications.getElseFail(1) instanceof NotTooCold); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processMustSatisfy(facetFactory, processMethodContext); + + // then + final MustSatisfySpecificationFacet mustSatisfySpecificationFacet = facetedMethod.getFacet(MustSatisfySpecificationFacet.class); + assertNotNull(mustSatisfySpecificationFacet); + assertTrue(mustSatisfySpecificationFacet instanceof MustSatisfySpecificationFacetForPropertyAnnotation); + final MustSatisfySpecificationFacetForPropertyAnnotation mustSatisfySpecificationFacetImpl = (MustSatisfySpecificationFacetForPropertyAnnotation) mustSatisfySpecificationFacet; + val specifications = mustSatisfySpecificationFacetImpl.getSpecifications(); + assertThat(specifications.size(), is(2)); + + assertTrue(specifications.getElseFail(0) instanceof NotTooHot); + assertTrue(specifications.getElseFail(1) instanceof NotTooCold); + }); } } @@ -642,20 +603,15 @@ class Customer { } // given - val cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processEntityPropertyChangePublishing(facetFactory, processMethodContext); - - // then - val changePolicyFacet = facetedMethod.getFacet(EntityPropertyChangePublishingPolicyFacet.class); - assertNotNull(changePolicyFacet); - assertTrue(changePolicyFacet.isPublishingVetoed()); - assertFalse(changePolicyFacet.isPublishingAllowed()); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processEntityPropertyChangePublishing(facetFactory, processMethodContext); + // then + val changePolicyFacet = facetedMethod.getFacet(EntityPropertyChangePublishingPolicyFacet.class); + assertNotNull(changePolicyFacet); + assertTrue(changePolicyFacet.isPublishingVetoed()); + assertFalse(changePolicyFacet.isPublishingAllowed()); + }); } @Test @@ -667,18 +623,13 @@ class Customer { } // given - val cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processEntityPropertyChangePublishing(facetFactory, processMethodContext); - - // then - val changePolicyFacet = facetedMethod.getFacet(EntityPropertyChangePublishingPolicyFacet.class); - assertNull(changePolicyFacet); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processEntityPropertyChangePublishing(facetFactory, processMethodContext); + // then + val changePolicyFacet = facetedMethod.getFacet(EntityPropertyChangePublishingPolicyFacet.class); + assertNull(changePolicyFacet); + }); } } @@ -694,21 +645,15 @@ class Customer { } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processSnapshot(facetFactory, processMethodContext); - - // then - final SnapshotExcludeFacet snapshotExcludeFacet = facetedMethod.getFacet(SnapshotExcludeFacet.class); - assertNotNull(snapshotExcludeFacet); - assertTrue(snapshotExcludeFacet instanceof SnapshotExcludeFacetForPropertyAnnotation); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processSnapshot(facetFactory, processMethodContext); + // then + final SnapshotExcludeFacet snapshotExcludeFacet = facetedMethod.getFacet(SnapshotExcludeFacet.class); + assertNotNull(snapshotExcludeFacet); + assertTrue(snapshotExcludeFacet instanceof SnapshotExcludeFacetForPropertyAnnotation); + }); } - } public static class Mandatory extends PropertyAnnotationFacetFactoryTest { @@ -717,101 +662,74 @@ public static class Mandatory extends PropertyAnnotationFacetFactoryTest { public void whenOptionalityIsTrue() { class Customer { - @Property( - optionality = Optionality.OPTIONAL - ) + @Property(optionality = Optionality.OPTIONAL) @Getter @Setter private String name; } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processOptional(facetFactory, processMethodContext); - - // then - final MandatoryFacet mandatoryFacet = facetedMethod.getFacet(MandatoryFacet.class); - assertNotNull(mandatoryFacet); - assertTrue(mandatoryFacet instanceof MandatoryFacetForPropertyAnnotation.Optional); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processOptional(facetFactory, processMethodContext); + // then + final MandatoryFacet mandatoryFacet = facetedMethod.getFacet(MandatoryFacet.class); + assertNotNull(mandatoryFacet); + assertTrue(mandatoryFacet instanceof MandatoryFacetForPropertyAnnotation.Optional); + }); } @Test public void whenOptionalityIsFalse() { class Customer { - @Property( - optionality = Optionality.MANDATORY - ) + @Property(optionality = Optionality.MANDATORY) @Getter @Setter private String name; } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processOptional(facetFactory, processMethodContext); - - // then - final MandatoryFacet mandatoryFacet = facetedMethod.getFacet(MandatoryFacet.class); - assertNotNull(mandatoryFacet); - assertTrue(mandatoryFacet instanceof MandatoryFacetForPropertyAnnotation.Required); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processOptional(facetFactory, processMethodContext); + // then + final MandatoryFacet mandatoryFacet = facetedMethod.getFacet(MandatoryFacet.class); + assertNotNull(mandatoryFacet); + assertTrue(mandatoryFacet instanceof MandatoryFacetForPropertyAnnotation.Required); + }); } @Test public void whenOptionalityIsDefault() { class Customer { - @Property( - optionality = Optionality.DEFAULT - ) + @Property(optionality = Optionality.DEFAULT) @Getter @Setter private String name; } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processOptional(facetFactory, processMethodContext); - - // then - final MandatoryFacet mandatoryFacet = facetedMethod.getFacet(MandatoryFacet.class); - assertNull(mandatoryFacet); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processOptional(facetFactory, processMethodContext); + // then + final MandatoryFacet mandatoryFacet = facetedMethod.getFacet(MandatoryFacet.class); + assertNull(mandatoryFacet); + }); } @Test public void whenNone() { class Customer { - @Property( - ) + @Property() @Getter @Setter private String name; } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processOptional(facetFactory, processMethodContext); - - // then - final MandatoryFacet mandatoryFacet = facetedMethod.getFacet(MandatoryFacet.class); - assertNull(mandatoryFacet); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processOptional(facetFactory, processMethodContext); + // then + final MandatoryFacet mandatoryFacet = facetedMethod.getFacet(MandatoryFacet.class); + assertNull(mandatoryFacet); + }); } } @@ -823,102 +741,78 @@ public void whenHasAnnotation() { class Customer { @Property( regexPattern = "[123].*", - regexPatternFlags = Pattern.CASE_INSENSITIVE | Pattern.MULTILINE - ) + regexPatternFlags = Pattern.CASE_INSENSITIVE | Pattern.MULTILINE) @Getter @Setter private String name; } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processRegEx(facetFactory, processMethodContext); - - // then - final RegExFacet regExFacet = facetedMethod.getFacet(RegExFacet.class); - assertNotNull(regExFacet); - assertTrue(regExFacet instanceof RegExFacetForPropertyAnnotation); - assertThat(regExFacet.patternFlags(), is(10)); - assertThat(regExFacet.regexp(), is("[123].*")); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processRegEx(facetFactory, processMethodContext); + // then + final RegExFacet regExFacet = facetedMethod.getFacet(RegExFacet.class); + assertNotNull(regExFacet); + assertTrue(regExFacet instanceof RegExFacetForPropertyAnnotation); + assertThat(regExFacet.patternFlags(), is(10)); + assertThat(regExFacet.regexp(), is("[123].*")); + }); } @Test public void whenNone() { class Customer { - @Property( - ) + @Property() @Getter @Setter private String name; } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processRegEx(facetFactory, processMethodContext); - - // then - final RegExFacet regExFacet = facetedMethod.getFacet(RegExFacet.class); - assertNull(regExFacet); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processRegEx(facetFactory, processMethodContext); + // then + final RegExFacet regExFacet = facetedMethod.getFacet(RegExFacet.class); + assertNull(regExFacet); + }); } @Test public void whenEmptyString() { class Customer { - @Property( - regexPattern = "" - ) + @Property(regexPattern = "") @Getter @Setter private String name; } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processRegEx(facetFactory, processMethodContext); - - // then - final RegExFacet regExFacet = facetedMethod.getFacet(RegExFacet.class); - assertNull(regExFacet); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processRegEx(facetFactory, processMethodContext); + + // then + final RegExFacet regExFacet = facetedMethod.getFacet(RegExFacet.class); + assertNull(regExFacet); + }); } @Test public void whenNotAnnotatedOnStringProperty() { class Customer { - @Property( - regexPattern = "[abc].*" - ) + @Property(regexPattern = "[abc].*") public int getName() {return 0; } @SuppressWarnings("unused") public void setName(final int name) { } } // given - final Class cls = Customer.class; - propertyMethod = findMethod(Customer.class, "getName"); - - // when - val processMethodContext = ProcessMethodContext - .forTesting(cls, null, - propertyMethod, mockMethodRemover, facetedMethod); - processRegEx(facetFactory, processMethodContext); - - // then - final RegExFacet regExFacet = facetedMethod.getFacet(RegExFacet.class); - assertNull(regExFacet); + propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processRegEx(facetFactory, processMethodContext); + + // then + final RegExFacet regExFacet = facetedMethod.getFacet(RegExFacet.class); + assertNull(regExFacet); + }); } } From cb5e5c68ca200316b8458a73fe2a32a9bd37b5a8 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 11:28:00 +0200 Subject: [PATCH 12/37] CAUSEWAY-3409: cleanup some FacetFactory tests --- .../facets/AbstractFacetFactoryTest.java | 12 +- ...tHelperTest_newActionInteractionEvent.java | 6 +- ...rTest_newCollectionDomainEvent_forAdd.java | 6 +- ...st_newCollectionDomainEvent_forRemove.java | 6 +- ...rTest_newPropertyDomainEvent_forClear.java | 4 +- ...Test_newPropertyDomainEvent_forModify.java | 4 +- .../facets/FacetFactoryTestAbstract.java | 20 +-- .../facets/{Utils.java => _Utils.java} | 37 ++++-- ...acetFromDomainServiceFacetFactoryTest.java | 117 +++++++----------- 9 files changed, 99 insertions(+), 113 deletions(-) rename core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/{Utils.java => _Utils.java} (59%) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryTest.java index 5caadfa6314..3f5a440e8a9 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryTest.java @@ -104,19 +104,19 @@ protected void tearDown() throws Exception { } protected static boolean contains(final Class[] types, final Class type) { - return Utils.contains(types, type); + return _Utils.contains(types, type); } protected static boolean contains(final ImmutableEnumSet featureTypes, final FeatureType featureType) { - return Utils.contains(featureTypes, featureType); + return _Utils.contains(featureTypes, featureType); } - protected static Method findMethod(final Class type, final String methodName, final Class[] signature) { - return Utils.findMethod(type, methodName, signature); + protected final Method findMethod(final Class type, final String methodName, final Class[] signature) { + return _Utils.findMethodExactOrFail(type, methodName, signature); } - protected Method findMethod(final Class type, final String methodName) { - return Utils.findMethod(type, methodName); + protected final Method findMethod(final Class type, final String methodName) { + return _Utils.findMethodExactOrFail(type, methodName); } protected void processMethod( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newActionInteractionEvent.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newActionInteractionEvent.java index b8e14db1e17..727e10932f0 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newActionInteractionEvent.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newActionInteractionEvent.java @@ -44,7 +44,7 @@ public void defaultEventType() throws Exception { final SomeDomainObject sdo = new SomeDomainObject(); final Identifier identifier = Identifier.actionIdentifier(LogicalType.fqcn(SomeDomainObject.class), "foo", new Class[]{int.class, String.class}); - Utils.domainEventHelper(); + _Utils.domainEventHelper(); final ActionDomainEvent ev = DomainEventHelper.newActionDomainEvent( ActionDomainEvent.Default.class, identifier, sdo, new Object[]{1, "bar"}); assertSame(ev.getSource(), sdo); @@ -59,7 +59,7 @@ public void actionInvokedEventDefaultEventType() throws Exception { final SomeDomainObject sdo = new SomeDomainObject(); final Identifier identifier = Identifier.actionIdentifier(LogicalType.fqcn(SomeDomainObject.class), "foo", new Class[]{int.class, String.class}); - Utils.domainEventHelper(); + _Utils.domainEventHelper(); final ActionDomainEvent ev = DomainEventHelper.newActionDomainEvent( ActionDomainEvent.Default.class, identifier, sdo, new Object[]{1, "bar"}); assertSame(ev.getSource(), sdo); @@ -74,7 +74,7 @@ public void customEventType() throws Exception { final SomeDomainObject sdo = new SomeDomainObject(); final Identifier identifier = Identifier.actionIdentifier(LogicalType.fqcn(SomeDomainObject.class), "foo", new Class[]{int.class, String.class}); - Utils.domainEventHelper(); + _Utils.domainEventHelper(); final ActionDomainEvent ev = DomainEventHelper.newActionDomainEvent( SomeDomainObjectFooInvokedDomainEvent.class, identifier, sdo, new Object[]{1, "bar"}); assertSame(ev.getSource(), sdo); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forAdd.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forAdd.java index b84ae842f55..bba85e45632 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forAdd.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forAdd.java @@ -47,7 +47,7 @@ public void defaultEventType() throws Exception { final Identifier identifier = Identifier.collectionIdentifier( LogicalType.fqcn(SomeDomainObject.class), "references"); - final CollectionDomainEvent ev = Utils.domainEventHelper().newCollectionDomainEvent( + final CollectionDomainEvent ev = _Utils.domainEventHelper().newCollectionDomainEvent( CollectionDomainEvent.Default.class, null, identifier, sdo); assertSame(ev.getSource(), sdo); assertThat(ev.getIdentifier(), is(identifier)); @@ -60,7 +60,7 @@ public void collectionAddedToDefaultEventType() throws Exception { final Identifier identifier = Identifier.collectionIdentifier( LogicalType.fqcn(SomeDomainObject.class), "references"); - final CollectionDomainEvent ev = Utils.domainEventHelper().newCollectionDomainEvent( + final CollectionDomainEvent ev = _Utils.domainEventHelper().newCollectionDomainEvent( CollectionDomainEvent.Default.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo); assertSame(ev.getSource(), sdo); assertThat(ev.getIdentifier(), is(identifier)); @@ -73,7 +73,7 @@ public void customEventType() throws Exception { final Identifier identifier = Identifier.collectionIdentifier( LogicalType.fqcn(SomeDomainObject.class), "references"); - final CollectionDomainEvent ev = Utils.domainEventHelper().newCollectionDomainEvent( + final CollectionDomainEvent ev = _Utils.domainEventHelper().newCollectionDomainEvent( SomeDomainObjectCollectionDomainEvent.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo); assertThat(ev.getSource(), is(sdo)); assertThat(ev.getIdentifier(), is(identifier)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forRemove.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forRemove.java index 15ce1b1a0f4..018c24fa681 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forRemove.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newCollectionDomainEvent_forRemove.java @@ -47,7 +47,7 @@ public void defaultEventType() throws Exception { Identifier identifier = Identifier.collectionIdentifier( LogicalType.fqcn(SomeDomainObject.class), "references"); - final CollectionDomainEvent ev = Utils.domainEventHelper().newCollectionDomainEvent( + final CollectionDomainEvent ev = _Utils.domainEventHelper().newCollectionDomainEvent( CollectionDomainEvent.Default.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo); assertSame(ev.getSource(), sdo); assertThat(ev.getIdentifier(), is(identifier)); @@ -60,7 +60,7 @@ public void collectionRemovedFromDefaultEventType() throws Exception { Identifier identifier = Identifier.collectionIdentifier( LogicalType.fqcn(SomeDomainObject.class), "references"); - final CollectionDomainEvent ev = Utils.domainEventHelper().newCollectionDomainEvent( + final CollectionDomainEvent ev = _Utils.domainEventHelper().newCollectionDomainEvent( CollectionDomainEvent.Default.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo); assertSame(ev.getSource(), sdo); assertThat(ev.getIdentifier(), is(identifier)); @@ -73,7 +73,7 @@ public void customEventType() throws Exception { Identifier identifier = Identifier.collectionIdentifier( LogicalType.fqcn(SomeDomainObject.class), "references"); - final CollectionDomainEvent ev = Utils.domainEventHelper().newCollectionDomainEvent( + final CollectionDomainEvent ev = _Utils.domainEventHelper().newCollectionDomainEvent( SomeDomainObjectCollectionRemovedFromDomainEvent.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo); assertThat(ev.getSource(), is(sdo)); assertThat(ev.getIdentifier(), is(identifier)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java index 7b7d1f74fd8..4922496b0e8 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java @@ -48,7 +48,7 @@ public void defaultEventType() throws Exception { LocalDate oldValue = LocalDate.of(2013,4,1); LocalDate newValue = null; - Utils.domainEventHelper(); + _Utils.domainEventHelper(); final PropertyDomainEvent ev = DomainEventHelper.newPropertyDomainEvent(PropertyDomainEvent.Default.class, identifier, sdo, oldValue, newValue); assertSame(ev.getSource(), sdo); @@ -67,7 +67,7 @@ public void customEventType() throws Exception { LocalDate oldValue = LocalDate.of(2013,4,1); LocalDate newValue = null; - Utils.domainEventHelper(); + _Utils.domainEventHelper(); final PropertyDomainEvent ev = DomainEventHelper.newPropertyDomainEvent(SomeDatePropertyChangedDomainEvent.class, identifier, sdo, oldValue, newValue); assertSame(ev.getSource(), sdo); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java index 98ba96faed7..4f6bcff2be8 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java @@ -45,7 +45,7 @@ public void defaultEventType() throws Exception { LocalDate oldValue = LocalDate.of(2013,4,1); LocalDate newValue = LocalDate.of(2013,5,2); - Utils.domainEventHelper(); + _Utils.domainEventHelper(); final PropertyDomainEvent ev = DomainEventHelper.newPropertyDomainEvent(PropertyDomainEvent.Default.class, identifier, sdo, oldValue, newValue); assertThat(ev.getSource(), is((Object)sdo)); @@ -64,7 +64,7 @@ public void customEventType() throws Exception { LocalDate oldValue = LocalDate.of(2013,4,1); LocalDate newValue = LocalDate.of(2013,5,2); - Utils.domainEventHelper(); + _Utils.domainEventHelper(); final PropertyDomainEvent ev = DomainEventHelper.newPropertyDomainEvent(SomeDatePropertyChangedDomainEvent.class, identifier, sdo, oldValue, newValue); assertThat(ev.getSource(), is(sdo)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index 95df6bd067e..92c5212bc18 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -19,7 +19,6 @@ package org.apache.causeway.core.metamodel.facets; import java.lang.reflect.Method; -import java.util.Optional; import java.util.function.BiConsumer; import org.junit.jupiter.api.BeforeEach; @@ -30,7 +29,6 @@ import org.apache.causeway.applib.id.LogicalType; import org.apache.causeway.commons.collections.ImmutableEnumSet; import org.apache.causeway.commons.internal.assertions._Assert; -import org.apache.causeway.commons.internal.base._Strings; import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting; import org.apache.causeway.core.metamodel._testing.MethodRemover_forTesting; import org.apache.causeway.core.metamodel.context.HasMetaModelContext; @@ -66,10 +64,6 @@ public abstract class FacetFactoryTestAbstract protected OneToManyAssociation mockOneToManyAssociation; protected OneToOneActionParameter mockOneToOneActionParameter; - @Deprecated protected FacetHolder facetHolder; - @Deprecated protected FacetedMethod facetedMethod; - @Deprecated protected FacetedMethodParameter facetedMethodParameter; - @lombok.Value @Getter @Accessors(fluent=true) public static class Scenario { @@ -85,7 +79,7 @@ public static Scenario act( final Class declaringClass, final String memberId) { val facetHolder = facetHolder(mmc, declaringClass, memberId); - val actionMethod = Utils.findMethodByNameOrFail(declaringClass, memberId); + val actionMethod = _Utils.findMethodByNameOrFail(declaringClass, memberId); val facetedMethod = FacetedMethod.createForAction(mmc, declaringClass, memberId, actionMethod.getParameterTypes()); val facetedMethodParameter = actionMethod.getParameterCount()==0 @@ -102,9 +96,7 @@ public static Scenario prop( final Class declaringClass, final String memberId) { val facetHolder = facetHolder(mmc, declaringClass, memberId); - val getter = Optional.ofNullable( - Utils.findMethod(declaringClass, "get" + _Strings.capitalize(memberId))) - .orElseGet(()->Utils.findMethod(declaringClass, "is" + _Strings.capitalize(memberId))); + val getter = _Utils.findGetterOrFail(declaringClass, memberId); val facetedMethod = FacetedMethod.createForProperty(mmc, declaringClass, getter); val facetedMethodParameter = (FacetedMethodParameter)null; return new Scenario(declaringClass, memberId, getter, facetHolder, facetedMethod, facetedMethodParameter); @@ -222,19 +214,19 @@ protected FacetedMethod facetedAction(final Class declaringClass, final Strin } protected boolean contains(final Class[] types, final Class type) { - return Utils.contains(types, type); + return _Utils.contains(types, type); } protected static boolean contains(final ImmutableEnumSet featureTypes, final FeatureType featureType) { - return Utils.contains(featureTypes, featureType); + return _Utils.contains(featureTypes, featureType); } protected Method findMethod(final Class type, final String methodName, final Class[] methodTypes) { - return Utils.findMethod(type, methodName, methodTypes); + return _Utils.findMethodExactOrFail(type, methodName, methodTypes); } protected Method findMethod(final Class type, final String methodName) { - return Utils.findMethod(type, methodName); + return _Utils.findMethodExactOrFail(type, methodName); } protected void expectNoMethodsRemoved() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/Utils.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/_Utils.java similarity index 59% rename from core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/Utils.java rename to core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/_Utils.java index 36bdeb25d29..93ecefb123c 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/Utils.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/_Utils.java @@ -19,14 +19,19 @@ package org.apache.causeway.core.metamodel.facets; import java.lang.reflect.Method; +import java.util.Optional; import org.apache.causeway.commons.collections.Can; import org.apache.causeway.commons.collections.ImmutableEnumSet; import org.apache.causeway.commons.internal._Constants; +import org.apache.causeway.commons.internal.base._Strings; +import org.apache.causeway.commons.internal.exceptions._Exceptions; import org.apache.causeway.commons.internal.reflection._ClassCache; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -class Utils { +import lombok.val; + +class _Utils { static DomainEventHelper domainEventHelper() { return DomainEventHelper.ofEventService(null); @@ -48,18 +53,28 @@ protected static boolean contains(final ImmutableEnumSet featureTyp return featureTypes.contains(featureType); } - protected static Method findMethod(final Class type, final String methodName, final Class[] methodTypes) { + protected static Optional findMethodExact(final Class type, final String methodName, final Class[] methodTypes) { try { - return type.getMethod(methodName, methodTypes); + return Optional.ofNullable(type.getMethod(methodName, methodTypes)); } catch (final SecurityException e) { - return null; + return Optional.empty(); } catch (final NoSuchMethodException e) { - return null; + return Optional.empty(); } } - protected static Method findMethod(final Class type, final String methodName) { - return findMethod(type, methodName, _Constants.emptyClasses); + protected static Optional findMethodExact(final Class type, final String methodName) { + return findMethodExact(type, methodName, _Constants.emptyClasses); + } + + protected static Method findMethodExactOrFail(final Class type, final String methodName, final Class[] methodTypes) { + return findMethodExact(type, methodName, methodTypes) + .orElseThrow(()-> + _Exceptions.noSuchElement("method '%s' not found in %s", methodName, type)); + } + + protected static Method findMethodExactOrFail(final Class type, final String methodName) { + return findMethodExactOrFail(type, methodName, _Constants.emptyClasses); } protected static Can findMethodsByName(final Class type, final String methodName) { @@ -72,4 +87,12 @@ protected static Method findMethodByNameOrFail(final Class type, final String return findMethodsByName(type, methodName).getSingletonOrFail(); } + protected static Method findGetterOrFail(final Class declaringClass, final String propertyName) { + val getter = _Utils.findMethodExact(declaringClass, "get" + _Strings.capitalize(propertyName)) + .or(()->_Utils.findMethodExact(declaringClass, "is" + _Strings.capitalize(propertyName))) + .orElseThrow(()-> + _Exceptions.noSuchElement("getter '%s' not found in %s", propertyName, declaringClass)); + return getter; + } + } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java index 3f9f6111f7c..16d470e7724 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java @@ -18,9 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.derived; - - - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -34,12 +31,9 @@ import org.apache.causeway.applib.annotation.NatureOfService; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.notinservicemenu.NotInServiceMenuFacet; -@SuppressWarnings("unused") -public class NotInServiceMenuFacetFromDomainServiceFacetFactoryTest +class NotInServiceMenuFacetFromDomainServiceFacetFactoryTest extends FacetFactoryTestAbstract { private NotInServiceMenuFacetFromDomainServiceFacetFactory facetFactory; @@ -55,27 +49,22 @@ public void whenRest() throws Exception { // given @DomainService(nature = NatureOfService.REST) class CustomerService { - - public String name() { - return "Joe"; - } + @SuppressWarnings("unused") + public String name() { return "Joe"; } } - expectNoMethodsRemoved(); - - facetedMethod = FacetedMethod - .createForAction(metaModelContext, CustomerService.class, "name"); + actionScenario(CustomerService.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); + assertNotNull(facet); + assertThat(facet instanceof NotInServiceMenuFacetFromDomainServiceFacet, is(true)); + final NotInServiceMenuFacetFromDomainServiceFacet facetDerivedFromDomainServiceFacet = (NotInServiceMenuFacetFromDomainServiceFacet) facet; + assertEquals(NatureOfService.REST, facetDerivedFromDomainServiceFacet.getNatureOfService()); + expectNoMethodsRemoved(); + }); - // when - facetFactory.process(ProcessMethodContext - .forTesting(CustomerService.class, null, facetedMethod.getMethod().asMethod().orElseThrow(), mockMethodRemover, facetedMethod)); - - // then - final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); - assertNotNull(facet); - assertThat(facet instanceof NotInServiceMenuFacetFromDomainServiceFacet, is(true)); - final NotInServiceMenuFacetFromDomainServiceFacet facetDerivedFromDomainServiceFacet = (NotInServiceMenuFacetFromDomainServiceFacet) facet; - assertEquals(NatureOfService.REST, facetDerivedFromDomainServiceFacet.getNatureOfService()); } @Test @@ -84,24 +73,18 @@ public void whenView() throws Exception { // given @DomainService() class CustomerService { - - public String name() { - return "Joe"; - } + @SuppressWarnings("unused") + public String name() { return "Joe"; } } - expectNoMethodsRemoved(); - - facetedMethod = FacetedMethod - .createForAction(metaModelContext, CustomerService.class, "name"); - - // when - facetFactory.process(ProcessMethodContext - .forTesting(CustomerService.class, null, facetedMethod.getMethod().asMethod().orElseThrow(), mockMethodRemover, facetedMethod)); - - // then - final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); - assertThat(facet, is(nullValue())); + actionScenario(CustomerService.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); + assertThat(facet, is(nullValue())); + expectNoMethodsRemoved(); + }); } @Test @@ -110,24 +93,18 @@ public void whenMenu() throws Exception { // given @DomainService() class CustomerService { - - public String name() { - return "Joe"; - } + @SuppressWarnings("unused") + public String name() { return "Joe"; } } - expectNoMethodsRemoved(); - - facetedMethod = FacetedMethod - .createForAction(metaModelContext, CustomerService.class, "name"); - - // when - facetFactory.process(ProcessMethodContext - .forTesting(CustomerService.class, null, facetedMethod.getMethod().asMethod().orElseThrow(), mockMethodRemover, facetedMethod)); - - // then - final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); - assertThat(facet, is(nullValue())); + actionScenario(CustomerService.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); + assertThat(facet, is(nullValue())); + expectNoMethodsRemoved(); + }); } @Test @@ -135,24 +112,18 @@ public void whenNone() throws Exception { // given class CustomerService { - - public String name() { - return "Joe"; - } + @SuppressWarnings("unused") + public String name() { return "Joe"; } } - expectNoMethodsRemoved(); - - facetedMethod = FacetedMethod - .createForAction(metaModelContext, CustomerService.class, "name"); - - // when - facetFactory.process(ProcessMethodContext - .forTesting(CustomerService.class, null, facetedMethod.getMethod().asMethod().orElseThrow(), mockMethodRemover, facetedMethod)); - - // then - final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); - assertThat(facet, is(nullValue())); + actionScenario(CustomerService.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); + assertThat(facet, is(nullValue())); + expectNoMethodsRemoved(); + }); } } \ No newline at end of file From 500c934cc592c9ca6b2925f265c8f9690a164a64 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 11:51:49 +0200 Subject: [PATCH 13/37] CAUSEWAY-3409: cleanup some FacetFactory tests (2) --- .../facets/FacetFactoryTestAbstract.java | 22 ++++++++++++++----- .../ActionAnnotationFacetFactoryTest.java | 7 ------ ...AnnotationFacetFactoryTest_Invocation.java | 8 +++---- .../CollectionAnnotationFacetFactoryTest.java | 19 ---------------- .../ident/title/TitleFacetViaMethodTest.java | 4 +++- ...gableParentAnnotationFacetFactoryTest.java | 19 ++-------------- .../param/name/ParameterNameFacetTest.java | 13 ++--------- .../ParameterAnnotationFacetFactoryTest.java | 14 ------------ .../PropertyAnnotationFacetFactoryTest.java | 13 ----------- 9 files changed, 27 insertions(+), 92 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index 92c5212bc18..7f74bd3be2d 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -24,6 +24,8 @@ import org.junit.jupiter.api.BeforeEach; import org.mockito.Mockito; +import static org.mockito.Mockito.calls; + import org.apache.causeway.applib.Identifier; import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.id.LogicalType; @@ -56,8 +58,8 @@ public abstract class FacetFactoryTestAbstract @Getter(onMethod_ = {@Override}) protected MetaModelContext metaModelContext; - protected MethodRemover mockMethodRemover; - protected FacetHolder mockFacetHolder; + private MethodRemover mockMethodRemover; + protected ObjectSpecification mockOnType; protected ObjectSpecification mockObjSpec; protected OneToOneAssociation mockOneToOneAssociation; @@ -118,19 +120,16 @@ protected void setUpMmc() { } @BeforeEach - protected void setUpFacetedMethodAndParameter() throws Exception { + protected void setUpAll() throws Exception { setUpMmc(); mockMethodRemover = Mockito.mock(MethodRemover.class); - mockFacetHolder = Mockito.mock(FacetHolder.class); mockOnType = Mockito.mock(ObjectSpecification.class); mockObjSpec = Mockito.mock(ObjectSpecification.class); mockOneToOneAssociation = Mockito.mock(OneToOneAssociation.class); mockOneToManyAssociation = Mockito.mock(OneToManyAssociation.class); mockOneToOneActionParameter = Mockito.mock(OneToOneActionParameter.class); - - //scenario = Scenario.prop(getMetaModelContext(), AbstractFacetFactoryTest.Customer.class, "firstName"); } @@ -229,8 +228,19 @@ protected Method findMethod(final Class type, final String methodName) { return _Utils.findMethodExactOrFail(type, methodName); } + // -- EXPECTATIONS + protected void expectNoMethodsRemoved() { Mockito.verifyNoInteractions(mockMethodRemover); } + protected void expectRemoveMethodAtLeastOnce(final Method actionMethod) { + Mockito.verify(mockMethodRemover, Mockito.atLeastOnce()).removeMethod(actionMethod); + } + + protected void expectRemoveMethodOnce(final Method actionMethod) { + Mockito.verify(mockMethodRemover, calls(1)).removeMethod(actionMethod); + } + + } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java index e8828c86a6c..22b3aaffffb 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java @@ -18,7 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action; -import java.lang.reflect.Method; import java.util.UUID; import org.junit.jupiter.api.AfterEach; @@ -41,10 +40,6 @@ class ActionAnnotationFacetFactoryTest ObjectSpecification mockTypeSpec; ObjectSpecification mockReturnTypeSpec; - void expectRemoveMethod(final Method actionMethod) { - Mockito.verify(mockMethodRemover, Mockito.atLeastOnce()).removeMethod(actionMethod); - } - @BeforeEach public void setUp() throws Exception { @@ -76,8 +71,6 @@ public void someAction() { public UUID getInteractionId() { return null; } - - } void allowingPublishingConfigurationToReturn(final ActionConfigOptions.PublishingPolicy value) { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java index cbc955e5089..5c259d5cb6c 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java @@ -65,7 +65,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - expectRemoveMethod(findMethod(Customer.class, "someAction")); + expectRemoveMethodAtLeastOnce(findMethod(Customer.class, "someAction")); // then final ActionDomainEventFacet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); @@ -98,7 +98,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - expectRemoveMethod(findMethod(Customer.class, "someAction")); + expectRemoveMethodAtLeastOnce(findMethod(Customer.class, "someAction")); // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); @@ -133,7 +133,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - expectRemoveMethod(findMethod(Customer.class, "someAction")); + expectRemoveMethodAtLeastOnce(findMethod(Customer.class, "someAction")); // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); @@ -169,7 +169,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - expectRemoveMethod(findMethod(Customer.class, "someAction")); + expectRemoveMethodAtLeastOnce(findMethod(Customer.class, "someAction")); // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java index e7e3fb59618..7e8e89ec4a4 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java @@ -16,7 +16,6 @@ * under the License. */ package org.apache.causeway.core.metamodel.facets.collections.collection; -import java.lang.reflect.Method; import java.util.List; import java.util.Optional; @@ -24,13 +23,11 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.calls; import org.apache.causeway.applib.annotation.Collection; import org.apache.causeway.applib.annotation.Where; @@ -44,7 +41,6 @@ import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; import org.apache.causeway.core.metamodel.facets.collections.collection.hidden.HiddenFacetForCollectionAnnotation; import org.apache.causeway.core.metamodel.facets.collections.collection.typeof.TypeOfFacetForCollectionAnnotation; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import lombok.val; @@ -53,18 +49,6 @@ class CollectionAnnotationFacetFactoryTest extends FacetFactoryTestAbstract { CollectionAnnotationFacetFactory facetFactory; - Method collectionMethod; - - ObjectSpecification mockTypeSpec; - ObjectSpecification mockReturnTypeSpec; - - void expectRemoveMethod(final Method actionMethod) { - - mockTypeSpec = Mockito.mock(ObjectSpecification.class); - mockReturnTypeSpec = Mockito.mock(ObjectSpecification.class); - - Mockito.verify(mockMethodRemover, calls(1)).removeMethod(actionMethod); - } private static void processModify( final CollectionAnnotationFacetFactory facetFactory, final FacetFactory.ProcessMethodContext processMethodContext) { @@ -78,14 +62,12 @@ private static void processHidden( facetFactory.processHidden(processMethodContext, collectionIfAny); } - private static void processTypeOf( final CollectionAnnotationFacetFactory facetFactory, final FacetFactory.ProcessMethodContext processMethodContext) { val collectionIfAny = processMethodContext.synthesizeOnMethod(Collection.class); facetFactory.processTypeOf(processMethodContext, collectionIfAny); } - @BeforeEach public void setUp() throws Exception { facetFactory = new CollectionAnnotationFacetFactory(metaModelContext); @@ -96,7 +78,6 @@ public void tearDown() throws Exception { facetFactory = null; } - @Deprecated(forRemoval = true, since = "2.0.0-RC2") static class Hidden extends CollectionAnnotationFacetFactoryTest { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java index a83dd3c546a..6b2c50846f7 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodTest.java @@ -34,6 +34,8 @@ import org.apache.causeway.core.metamodel.facets.object.title.methods.TitleFacetViaTitleMethod; import org.apache.causeway.core.metamodel.object.ManagedObject; +import lombok.val; + class TitleFacetViaMethodTest extends FacetFactoryTestAbstract { @@ -55,7 +57,7 @@ public void setUp() throws Exception { metaModelContext = MetaModelContext_forTesting.builder() .build(); - mockFacetHolder = Mockito.mock(FacetHolder.class); + val mockFacetHolder = Mockito.mock(FacetHolder.class); Mockito.when(mockFacetHolder.getMetaModelContext()).thenReturn(metaModelContext); pojo = new DomainObjectWithProblemInItsTitleMethod(); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java index 88339de4819..a5c54b4b798 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactoryTest.java @@ -21,8 +21,6 @@ import java.lang.reflect.Method; import java.util.stream.Stream; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -34,8 +32,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.commons.internal._Constants; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.navparent.NavigableParentFacet; import org.apache.causeway.core.metamodel.facets.object.navparent.annotation.NavigableParentTestSamples.DomainObjectInvalidParentAnnot; import org.apache.causeway.core.metamodel.facets.object.navparent.annotation.NavigableParentTestSamples.DomainObjectProperAnnot; @@ -46,19 +44,6 @@ class NavigableParentAnnotationFacetFactoryTest extends FacetFactoryTestAbstract { - private NavigableParentAnnotationFacetFactory facetFactory; - - @BeforeEach - void setUp() throws Exception { - super.setUpMmc(); - super.setUpFacetedMethodAndParameter(); - } - - @AfterEach - protected void tearDown() throws Exception { - facetFactory = null; - } - static Stream navigableTypeArgs() { return Stream.of( Arguments.of(new DomainObjectProperAnnot(), "root", null), @@ -76,7 +61,7 @@ protected void navigableType( val domainClass = domainObject.getClass(); val facetedMethod = facetedAction(domainClass, parentMethodName); - facetFactory = new NavigableParentAnnotationFacetFactory(getMetaModelContext()); + val facetFactory = new NavigableParentAnnotationFacetFactory(getMetaModelContext()); facetFactory.process(ProcessClassContext .forTesting(domainClass, defaultMethodRemover(), facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java index ff503ef44cd..8a755a0667d 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/name/ParameterNameFacetTest.java @@ -18,8 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.param.name; -import java.lang.reflect.Method; - import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -42,18 +40,11 @@ class ParameterNameFacetTest extends FacetFactoryTestAbstract { - ProgrammingModel programmingModel; - Method actionMethod; + protected ProgrammingModel programmingModel; @BeforeEach public void setUp() throws Exception { - - val metaModelContext = MetaModelContext_forTesting.builder() - .build(); - - super.setUpFacetedMethodAndParameter(); - - programmingModel = metaModelContext.getProgrammingModel(); + programmingModel = ((MetaModelContext_forTesting)getMetaModelContext()).getProgrammingModel(); } @AfterEach diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java index 171eb37e463..875ee89c531 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java @@ -18,21 +18,17 @@ */ package org.apache.causeway.core.metamodel.facets.param.parameter; -import java.lang.reflect.Method; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.Mockito; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.calls; import org.apache.causeway.applib.annotation.Optionality; import org.apache.causeway.applib.annotation.Parameter; @@ -46,7 +42,6 @@ import org.apache.causeway.core.metamodel.facets.param.parameter.maxlen.MaxLengthFacetForParameterAnnotation; import org.apache.causeway.core.metamodel.facets.param.parameter.mustsatisfy.MustSatisfySpecificationFacetForParameterAnnotation; import org.apache.causeway.core.metamodel.facets.param.parameter.regex.RegExFacetForParameterAnnotation; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import lombok.val; @@ -55,15 +50,6 @@ class ParameterAnnotationFacetFactoryTest extends FacetFactoryTestAbstract { ParameterAnnotationFacetFactory facetFactory; - @Deprecated - Method actionMethod; - - @Mock ObjectSpecification mockTypeSpec; - @Mock ObjectSpecification mockReturnTypeSpec; - - void expectRemoveMethod(final Method actionMethod) { - Mockito.verify(mockMethodRemover, calls(1)).removeMethod(actionMethod); - } @BeforeEach public void setUp() throws Exception { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java index 02c91c5a2d2..6f303b426a2 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java @@ -18,15 +18,12 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property; -import java.lang.reflect.Method; import java.util.regex.Pattern; import org.hamcrest.MatcherAssert; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.Mockito; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -35,7 +32,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.calls; import org.apache.causeway.applib.annotation.Optionality; import org.apache.causeway.applib.annotation.Property; @@ -77,7 +73,6 @@ import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet; import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacetAbstract; import org.apache.causeway.core.metamodel.object.ManagedObject; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; import lombok.Getter; @@ -87,14 +82,6 @@ class PropertyAnnotationFacetFactoryTest extends FacetFactoryTestAbstract { PropertyAnnotationFacetFactory facetFactory; - Method propertyMethod; - - @Mock ObjectSpecification mockTypeSpec; - @Mock ObjectSpecification mockReturnTypeSpec; - - void expectRemoveMethod(final Method actionMethod) { - Mockito.verify(mockMethodRemover, calls(1)).removeMethod(actionMethod); - } private static void processModify( final PropertyAnnotationFacetFactory facetFactory, final FacetFactory.ProcessMethodContext processMethodContext) { From e41217e7cecaf449d4fa6a3149068bba8a7af4e8 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 12:10:24 +0200 Subject: [PATCH 14/37] CAUSEWAY-3409: cleanup some FacetFactory tests (3) --- .../facets/FacetFactoryTestAbstract.java | 41 +++++++------------ .../ActionAnnotationFacetFactoryTest.java | 18 +++----- ...AnnotationFacetFactoryTest_Invocation.java | 4 +- ...ctionLayoutAnnotationFacetFactoryTest.java | 2 +- ...acetFromDomainServiceFacetFactoryTest.java | 2 +- .../CollectionAnnotationFacetFactoryTest.java | 2 +- ...omainObjectAnnotationFacetFactoryTest.java | 13 +++--- .../DomainObjectLayoutFactoryTest.java | 2 +- .../TitleAnnotationFacetFactoryTest.java | 16 ++++---- .../ParameterAnnotationFacetFactoryTest.java | 2 +- .../PropertyAnnotationFacetFactoryTest.java | 7 +++- 11 files changed, 44 insertions(+), 65 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index 7f74bd3be2d..cd40468da1b 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -41,10 +41,6 @@ import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; -import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; -import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter; -import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.causeway.core.metamodel.valuesemantics.IntValueSemantics; import lombok.Getter; @@ -55,16 +51,7 @@ public abstract class FacetFactoryTestAbstract implements HasMetaModelContext { - @Getter(onMethod_ = {@Override}) - protected MetaModelContext metaModelContext; - - private MethodRemover mockMethodRemover; - - protected ObjectSpecification mockOnType; - protected ObjectSpecification mockObjSpec; - protected OneToOneAssociation mockOneToOneAssociation; - protected OneToManyAssociation mockOneToManyAssociation; - protected OneToOneActionParameter mockOneToOneActionParameter; + // -- SCENARIO HELPER @lombok.Value @Getter @Accessors(fluent=true) @@ -113,23 +100,25 @@ private static FacetHolder facetHolder( } - protected void setUpMmc() { - metaModelContext = MetaModelContext_forTesting.builder() - .valueSemantic(new IntValueSemantics()) - .build(); + // -- + + @Getter(onMethod_ = {@Override}) + private MetaModelContext metaModelContext; + private MethodRemover mockMethodRemover; + + /** + * Override, if a custom {@link MetaModelContext_forTesting} is required for certain tests. + */ + protected MetaModelContext_forTesting setUpMmc( + final MetaModelContext_forTesting.MetaModelContext_forTestingBuilder builder) { + return builder.build(); } @BeforeEach protected void setUpAll() throws Exception { - - setUpMmc(); - + metaModelContext = setUpMmc(MetaModelContext_forTesting.builder() + .valueSemantic(new IntValueSemantics())); mockMethodRemover = Mockito.mock(MethodRemover.class); - mockOnType = Mockito.mock(ObjectSpecification.class); - mockObjSpec = Mockito.mock(ObjectSpecification.class); - mockOneToOneAssociation = Mockito.mock(OneToOneAssociation.class); - mockOneToManyAssociation = Mockito.mock(OneToManyAssociation.class); - mockOneToOneActionParameter = Mockito.mock(OneToOneActionParameter.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java index 22b3aaffffb..41a47446191 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java @@ -30,23 +30,19 @@ import org.apache.causeway.core.metamodel.facets.object.domainobject.domainevents.ActionDomainEventDefaultFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; -import lombok.val; - class ActionAnnotationFacetFactoryTest extends FacetFactoryTestAbstract { ActionAnnotationFacetFactory facetFactory; - ObjectSpecification mockTypeSpec; - ObjectSpecification mockReturnTypeSpec; + private ObjectSpecification mockTypeSpec; @BeforeEach public void setUp() throws Exception { mockTypeSpec = Mockito.mock(ObjectSpecification.class); - mockReturnTypeSpec = Mockito.mock(ObjectSpecification.class); - facetFactory = new ActionAnnotationFacetFactory(metaModelContext); + facetFactory = new ActionAnnotationFacetFactory(getMetaModelContext()); Mockito.when(mockTypeSpec.getFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class)) .thenReturn(null); @@ -59,14 +55,11 @@ public void tearDown() throws Exception { } class Customer { - public void someAction() { - } + public void someAction() {} } class SomeHasInteractionId implements HasInteractionId { - public void someAction() { - } - + public void someAction() {} @Override public UUID getInteractionId() { return null; @@ -74,8 +67,7 @@ public UUID getInteractionId() { } void allowingPublishingConfigurationToReturn(final ActionConfigOptions.PublishingPolicy value) { - val config = metaModelContext.getConfiguration(); - config.getApplib().getAnnotation().getAction().setExecutionPublishing(value); + getConfiguration().getApplib().getAnnotation().getAction().setExecutionPublishing(value); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java index 5c259d5cb6c..062af84b241 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java @@ -57,7 +57,7 @@ public void someAction() {} } // given - super.metaModelContext.getConfiguration() + getConfiguration() .getApplib().getAnnotation().getAction().getDomainEvent().setPostForDefault(true); actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ @@ -161,7 +161,7 @@ public void someAction() {} } // given - super.metaModelContext.getConfiguration() + getConfiguration() .getApplib().getAnnotation().getAction().getDomainEvent().setPostForDefault(true); actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java index 8781ea3c3ad..2f2e2ed6ceb 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryTest.java @@ -47,7 +47,7 @@ class ActionLayoutAnnotationFacetFactoryTest @BeforeEach void setUp() throws Exception { - facetFactory = new ActionLayoutFacetFactory(metaModelContext); + facetFactory = new ActionLayoutFacetFactory(getMetaModelContext()); } @Test diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java index 16d470e7724..ff7878a389f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java @@ -40,7 +40,7 @@ class NotInServiceMenuFacetFromDomainServiceFacetFactoryTest @BeforeEach public void setUp() throws Exception { - facetFactory = new NotInServiceMenuFacetFromDomainServiceFacetFactory(metaModelContext); + facetFactory = new NotInServiceMenuFacetFromDomainServiceFacetFactory(getMetaModelContext()); } @Test diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java index 7e8e89ec4a4..a6a7b2988ee 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java @@ -70,7 +70,7 @@ private static void processTypeOf( @BeforeEach public void setUp() throws Exception { - facetFactory = new CollectionAnnotationFacetFactory(metaModelContext); + facetFactory = new CollectionAnnotationFacetFactory(getMetaModelContext()); } @AfterEach diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java index 8486db98e9a..c390b0649c5 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java @@ -38,7 +38,6 @@ import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.applib.id.LogicalType; import org.apache.causeway.applib.mixins.system.HasInteractionId; -import org.apache.causeway.core.config.CausewayConfiguration; import org.apache.causeway.core.config.metamodel.facets.DomainObjectConfigOptions; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; @@ -58,8 +57,6 @@ import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetForDomainObjectAnnotation; import org.apache.causeway.core.metamodel.facets.objectvalue.choices.ChoicesFacet; -import lombok.val; - class DomainObjectAnnotationFacetFactoryTest extends FacetFactoryTestAbstract { @@ -67,7 +64,7 @@ class DomainObjectAnnotationFacetFactoryTest @BeforeEach void setUp() throws Exception { - facetFactory = new DomainObjectAnnotationFacetFactory(metaModelContext); + facetFactory = new DomainObjectAnnotationFacetFactory(getMetaModelContext()); } @AfterEach @@ -89,15 +86,15 @@ public UUID getInteractionId() { void allowingEntityChangePublishingToReturn(final DomainObjectConfigOptions.EntityChangePublishingPolicy value) { if(value!=null) { - val config = super.metaModelContext.getConfiguration(); - config.getApplib().getAnnotation().getDomainObject().setEntityChangePublishing(value); + getConfiguration() + .getApplib().getAnnotation().getDomainObject().setEntityChangePublishing(value); } } void allowingObjectsEditingToReturn(final DomainObjectConfigOptions.EditingObjectsConfiguration value) { if(value!=null) { - final CausewayConfiguration config = super.metaModelContext.getConfiguration(); - config.getApplib().getAnnotation().getDomainObject().setEditing(value); + getConfiguration() + .getApplib().getAnnotation().getDomainObject().setEditing(value); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java index e61418c9fb1..936c6ef9377 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java @@ -58,7 +58,7 @@ class DomainObjectLayoutFactoryTest @BeforeEach public void setUp() throws Exception { - facetFactory = new DomainObjectLayoutFacetFactory(metaModelContext); + facetFactory = new DomainObjectLayoutFacetFactory(getMetaModelContext()); } @AfterEach diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java index dcd4a446259..e46253e6c4e 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java @@ -46,7 +46,6 @@ import org.apache.causeway.core.metamodel.facets.object.title.annotation.TitleAnnotationFacetFactory; import org.apache.causeway.core.metamodel.facets.object.title.annotation.TitleFacetViaTitleAnnotation; import org.apache.causeway.core.metamodel.object.ManagedObject; -import org.apache.causeway.core.metamodel.valuesemantics.IntValueSemantics; import lombok.val; @@ -55,19 +54,18 @@ class TitleAnnotationFacetFactoryTest private TitleAnnotationFacetFactory facetFactory; - @BeforeEach - public void setUp() throws Exception { - + @Override + protected MetaModelContext_forTesting setUpMmc(final MetaModelContext_forTesting.MetaModelContext_forTestingBuilder builder) { val mockInteractionService = Mockito.mock(InteractionService.class); - - metaModelContext = MetaModelContext_forTesting.builder() + return builder .interactionService(mockInteractionService) - .valueSemantic(new IntValueSemantics()) .build(); + } - + @BeforeEach + public void setUp() throws Exception { assertNotNull(getInteractionService()); - facetFactory = new TitleAnnotationFacetFactory(metaModelContext); + facetFactory = new TitleAnnotationFacetFactory(getMetaModelContext()); } @AfterEach diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java index 875ee89c531..8c669ae0ce3 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java @@ -53,7 +53,7 @@ class ParameterAnnotationFacetFactoryTest @BeforeEach public void setUp() throws Exception { - facetFactory = new ParameterAnnotationFacetFactory(metaModelContext); + facetFactory = new ParameterAnnotationFacetFactory(getMetaModelContext()); } @AfterEach diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java index 6f303b426a2..75aa35e1ce3 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java @@ -24,6 +24,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -73,6 +74,7 @@ import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet; import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacetAbstract; import org.apache.causeway.core.metamodel.object.ManagedObject; +import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; import lombok.Getter; @@ -140,7 +142,7 @@ private static void processEntityPropertyChangePublishing( @BeforeEach public void setUp() throws Exception { - facetFactory = new PropertyAnnotationFacetFactory(metaModelContext); + facetFactory = new PropertyAnnotationFacetFactory(getMetaModelContext()); } @AfterEach @@ -151,6 +153,7 @@ public void tearDown() throws Exception { public static class Modify extends PropertyAnnotationFacetFactoryTest { private void addGetterFacet(final FacetHolder holder) { + val mockOnType = Mockito.mock(ObjectSpecification.class); FacetUtil.addFacet(new PropertyOrCollectionAccessorFacetAbstract(mockOnType, holder) { @Override public Object getProperty( @@ -330,7 +333,7 @@ class Customer { } // given - assertTrue(metaModelContext.getConfiguration() + assertTrue(getConfiguration() .getApplib().getAnnotation().getDomainObject().getCreatedLifecycleEvent().isPostForDefault()); propertyScenario(Customer.class, "name", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ From 33fef0e06ff8fdc5958b4f05979347c2d955ed95 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 12:41:31 +0200 Subject: [PATCH 15/37] CAUSEWAY-3409: cleanup some FacetFactory tests (4) --- .../facets/FacetFactoryTestAbstract.java | 54 ++- ...AnnotationFacetFactoryTest_Invocation.java | 8 +- ...nFacetFactoryTest_executionPublishing.java | 12 +- ...acetFromDomainServiceFacetFactoryTest.java | 8 +- ...omainObjectAnnotationFacetFactoryTest.java | 56 +-- .../DomainObjectLayoutFactoryTest.java | 322 +++++++----------- .../TitleAnnotationFacetFactoryTest.java | 12 - 7 files changed, 213 insertions(+), 259 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index cd40468da1b..d07d073faf4 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -19,16 +19,21 @@ package org.apache.causeway.core.metamodel.facets; import java.lang.reflect.Method; +import java.util.Optional; import java.util.function.BiConsumer; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.mockito.Mockito; -import static org.mockito.Mockito.calls; +import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.Identifier; import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.id.LogicalType; +import org.apache.causeway.applib.services.i18n.TranslationService; +import org.apache.causeway.applib.services.iactnlayer.InteractionContext; +import org.apache.causeway.applib.services.iactnlayer.InteractionService; import org.apache.causeway.commons.collections.ImmutableEnumSet; import org.apache.causeway.commons.internal.assertions._Assert; import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting; @@ -42,6 +47,7 @@ import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; import org.apache.causeway.core.metamodel.valuesemantics.IntValueSemantics; +import org.apache.causeway.core.security.authentication.InteractionContextFactory; import lombok.Getter; import lombok.NonNull; @@ -104,7 +110,11 @@ private static FacetHolder facetHolder( @Getter(onMethod_ = {@Override}) private MetaModelContext metaModelContext; - private MethodRemover mockMethodRemover; + + private TranslationService mockTranslationService; + private InteractionService mockInteractionService; + private final InteractionContext iaContext = InteractionContextFactory.testing(); + private MethodRemover_forTesting methodRemover; /** * Override, if a custom {@link MetaModelContext_forTesting} is required for certain tests. @@ -115,12 +125,25 @@ protected MetaModelContext_forTesting setUpMmc( } @BeforeEach - protected void setUpAll() throws Exception { + protected void setUpAll() { + + mockTranslationService = Mockito.mock(TranslationService.class); + mockInteractionService = Mockito.mock(InteractionService.class); + + methodRemover = new MethodRemover_forTesting(); + metaModelContext = setUpMmc(MetaModelContext_forTesting.builder() + .translationService(mockTranslationService) + .interactionService(mockInteractionService) .valueSemantic(new IntValueSemantics())); - mockMethodRemover = Mockito.mock(MethodRemover.class); + + Mockito.when(mockInteractionService.currentInteractionContext()).thenReturn(Optional.of(iaContext)); } + @AfterEach + protected void tearDownAll() { + methodRemover = null; + } @FunctionalInterface public static interface MemberScenarioConsumer { @@ -147,7 +170,7 @@ protected void actionScenario( final Class declaringClass, final String actionName, final MemberScenarioConsumer consumer) { val scenario = Scenario.act(getMetaModelContext(), declaringClass, actionName); val processMethodContext = ProcessMethodContext - .forTesting(declaringClass, null, scenario.annotatedMethod(), mockMethodRemover, scenario.facetedMethod()); + .forTesting(declaringClass, null, scenario.annotatedMethod(), methodRemover, scenario.facetedMethod()); consumer.accept(processMethodContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); } @@ -172,7 +195,7 @@ protected void propertyScenario( final Class declaringClass, final String propertyName, final MemberScenarioConsumer consumer) { val scenario = Scenario.prop(getMetaModelContext(), declaringClass, propertyName); val processMethodContext = ProcessMethodContext - .forTesting(declaringClass, null, scenario.annotatedMethod(), mockMethodRemover, scenario.facetedMethod()); + .forTesting(declaringClass, null, scenario.annotatedMethod(), methodRemover, scenario.facetedMethod()); consumer.accept(processMethodContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); } @@ -183,7 +206,7 @@ protected void objectScenario(final Class declaringClass, final BiConsumer type, final String methodName) { // -- EXPECTATIONS - protected void expectNoMethodsRemoved() { - Mockito.verifyNoInteractions(mockMethodRemover); + protected void assertNoMethodsRemoved() { + //Mockito.verifyNoInteractions(methodRemover); + assertTrue(methodRemover.getRemovedMethodMethodCalls().isEmpty()); + assertTrue(methodRemover.getRemoveMethodArgsCalls().isEmpty()); } - protected void expectRemoveMethodAtLeastOnce(final Method actionMethod) { - Mockito.verify(mockMethodRemover, Mockito.atLeastOnce()).removeMethod(actionMethod); + protected void assertMethodWasRemoved(final Method method) { + //Mockito.verify(methodRemover, Mockito.atLeastOnce()).removeMethod(actionMethod); + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(method)); + //assertTrue(methodRemover.getRemoveMethodArgsCalls().isEmpty()); } + /* protected void expectRemoveMethodOnce(final Method actionMethod) { - Mockito.verify(mockMethodRemover, calls(1)).removeMethod(actionMethod); - } + Mockito.verify(methodRemover, calls(1)).removeMethod(actionMethod); + }*/ } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java index 062af84b241..0c3f295d96e 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java @@ -65,7 +65,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - expectRemoveMethodAtLeastOnce(findMethod(Customer.class, "someAction")); + assertMethodWasRemoved(findMethod(Customer.class, "someAction")); // then final ActionDomainEventFacet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); @@ -98,7 +98,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - expectRemoveMethodAtLeastOnce(findMethod(Customer.class, "someAction")); + assertMethodWasRemoved(findMethod(Customer.class, "someAction")); // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); @@ -133,7 +133,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - expectRemoveMethodAtLeastOnce(findMethod(Customer.class, "someAction")); + assertMethodWasRemoved(findMethod(Customer.class, "someAction")); // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); @@ -169,7 +169,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - expectRemoveMethodAtLeastOnce(findMethod(Customer.class, "someAction")); + assertMethodWasRemoved(findMethod(Customer.class, "someAction")); // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java index a6c79764133..da5b1760cf1 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java @@ -52,7 +52,7 @@ void given_HasInteractionId_thenIgnored() { actionScenario(SomeHasInteractionId.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ processExecutionPublishing(facetFactory, processMethodContext); assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -108,7 +108,7 @@ void given_noAnnotation_and_configurationSetToNone_thenNone() { processExecutionPublishing(facetFactory, processMethodContext); // then assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -142,7 +142,7 @@ public void someAction() {} processExecutionPublishing(facetFactory, processMethodContext); // then assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -165,7 +165,7 @@ public void someAction() {} assertNotNull(facet); final ExecutionPublishingActionFacetForActionAnnotation facetImpl = (ExecutionPublishingActionFacetForActionAnnotation) facet; _Blackhole.consume(facetImpl); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -199,7 +199,7 @@ public void someAction() {} processExecutionPublishing(facetFactory, processMethodContext); // then assertFalse(ExecutionPublishingFacet.isPublishingEnabled(facetedMethod)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -219,7 +219,7 @@ public void someAction() {} final Facet facet = facetedMethod.getFacet(ExecutionPublishingFacet.class); assertNotNull(facet); assertTrue(facet instanceof ExecutionPublishingActionFacetForActionAnnotation); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java index ff7878a389f..6007ef7ce83 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetFromDomainServiceFacetFactoryTest.java @@ -62,7 +62,7 @@ class CustomerService { assertThat(facet instanceof NotInServiceMenuFacetFromDomainServiceFacet, is(true)); final NotInServiceMenuFacetFromDomainServiceFacet facetDerivedFromDomainServiceFacet = (NotInServiceMenuFacetFromDomainServiceFacet) facet; assertEquals(NatureOfService.REST, facetDerivedFromDomainServiceFacet.getNatureOfService()); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -83,7 +83,7 @@ class CustomerService { // then final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); assertThat(facet, is(nullValue())); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -103,7 +103,7 @@ class CustomerService { // then final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); assertThat(facet, is(nullValue())); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -122,7 +122,7 @@ class CustomerService { // then final Facet facet = facetedMethod.lookupNonFallbackFacet(NotInServiceMenuFacet.class).orElse(null); assertThat(facet, is(nullValue())); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java index c390b0649c5..e12a068b13f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java @@ -131,7 +131,7 @@ void configured_value_set_to_all() { assertTrue(facet instanceof EntityChangePublishingFacetFromConfiguration); assertThat(facet.isEnabled(), is(true)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -145,7 +145,7 @@ void configured_value_set_to_none() { assertNotNull(facet); assertThat(facet.isEnabled(), is(false)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -164,7 +164,7 @@ public void configured_value_set_to_all() { assertTrue(facet instanceof EntityChangePublishingFacetForDomainObjectAnnotationAsConfigured); assertThat(facet.isEnabled(), is(true)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -178,7 +178,7 @@ public void configured_value_set_to_none() { assertNotNull(facet); assertThat(facet.isEnabled(), is(false)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -196,7 +196,7 @@ public void irrespective_of_configured_value() { assertNotNull(facet); assertTrue(facet instanceof EntityChangePublishingFacetForDomainObjectAnnotation); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -212,7 +212,7 @@ public void irrespective_of_configured_value() { assertFalse(EntityChangePublishingFacet.isPublishingEnabled(facetHolder)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -258,7 +258,7 @@ public void whenDomainObjectAndAutoCompleteRepositoryAndAction() { assertThat(CustomerRepository.class.isAssignableFrom(autoCompleteFacet.getRepositoryClass()), is(true)); assertThat(autoCompleteFacet.getActionName(), is("lookup")); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -279,7 +279,7 @@ public void whenDomainObjectAndAutoCompleteRepository() { assertThat(CustomerRepositoryWithDefaultMethodName.class.isAssignableFrom(autoCompleteFacet.getRepositoryClass()), is(true)); assertThat(autoCompleteFacet.getActionName(), is("autoComplete")); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -292,7 +292,7 @@ public void whenDomainObjectAnnotationButNoAutoComplete() { final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -305,7 +305,7 @@ public void whenNoDomainObjectAnnotation() { final Facet facet = facetHolder.getFacet(AutoCompleteFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -343,7 +343,7 @@ public void whenDomainObjectAndBoundedSetToTrue() { assertTrue(facet instanceof ChoicesFacetForDomainObjectAnnotation); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -357,7 +357,7 @@ public void whenDomainObjectAndAutoCompleteRepository() { final Facet facet = facetHolder.getFacet(ChoicesFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -370,7 +370,7 @@ public void whenNoDomainObjectAnnotation() { final Facet facet = facetHolder.getFacet(ChoicesFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -406,7 +406,7 @@ public void configured_value_set_to_true() { final Facet facet = facetHolder.getFacet(ImmutableFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -422,7 +422,7 @@ public void configured_value_set_to_false() { assertNotNull(facet); assertTrue(facet instanceof ImmutableFacetFromConfiguration); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -437,7 +437,7 @@ public void configured_value_set_to_defaults() { assertTrue(facet instanceof ImmutableFacetFromConfiguration); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } } @@ -454,7 +454,7 @@ public void configured_value_set_to_true() { final Facet facet = facetHolder.getFacet(ImmutableFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -468,7 +468,7 @@ public void configured_value_set_to_false() { assertNotNull(facet); assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotation); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -482,7 +482,7 @@ public void configured_value_set_to_defaults() { assertNotNull(facet); // default is now non-editable assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotationAsConfigured); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } } @@ -498,7 +498,7 @@ public void irrespective_of_configured_value() { final ImmutableFacet facet = facetHolder.getFacet(ImmutableFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } } @@ -515,7 +515,7 @@ public void irrespective_of_configured_value() { assertNotNull(facet); assertTrue(facet instanceof ImmutableFacetForDomainObjectAnnotation); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } } @@ -543,7 +543,7 @@ public void setUp() throws Exception { public void whenDomainObjectAndObjectTypeSetToTrue() { assertThat(LogicalType.infer(CustomerWithDomainObjectAndObjectTypeSet.class).getLogicalTypeName(), is("CUS")); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); } @Test @@ -555,7 +555,7 @@ public void whenDomainObjectAndObjectTypeNotSet() { final Facet facet = facetHolder.getFacet(AliasedFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -568,7 +568,7 @@ public void whenNoDomainObjectAnnotation() { final Facet facet = facetHolder.getFacet(AliasedFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -608,7 +608,7 @@ public void whenDomainObjectAndNatureSetToJdoEntity() { final Facet facet = facetHolder.getFacet(ViewModelFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -621,7 +621,7 @@ public void whenDomainObjectAndNatureSetToNotSpecified() { final Facet facet = facetHolder.getFacet(ViewModelFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -636,7 +636,7 @@ public void whenDomainObjectAndNatureSetToViewModel() { assertTrue(facet instanceof ViewModelFacetForDomainObjectAnnotation); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } @@ -650,7 +650,7 @@ public void whenNoDomainObjectAnnotation() { final Facet facet = facetHolder.getFacet(ViewModelFacet.class); assertNull(facet); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); }); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java index 936c6ef9377..d2d93016fdb 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java @@ -21,9 +21,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; +import org.mockito.Mockito; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; @@ -48,7 +46,6 @@ import lombok.val; -@ExtendWith(MockitoExtension.class) class DomainObjectLayoutFactoryTest extends FacetFactoryTestAbstract { @@ -84,258 +81,199 @@ class CustomerWithDefaults { } // -- LAYOUT TESTS - public static class Bookmarking extends DomainObjectLayoutFactoryTest { + public static class DomainObjectLayout_bookmarking extends DomainObjectLayoutFactoryTest { - public static class ForDomainObjectLayout extends Bookmarking { + @Test + public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - @BeforeEach - public void setUp2() throws Exception { + final Facet facet = facetHolder.getFacet(BookmarkPolicyFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof BookmarkPolicyFacetForDomainObjectLayoutAnnotation); - } + final BookmarkPolicyFacetForDomainObjectLayoutAnnotation facetImpl = + (BookmarkPolicyFacetForDomainObjectLayoutAnnotation) facet; - @Test - public void whenSpecified() { - objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + assertThat(facetImpl.value(), is(BookmarkPolicy.AS_ROOT)); - final Facet facet = facetHolder.getFacet(BookmarkPolicyFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof BookmarkPolicyFacetForDomainObjectLayoutAnnotation); + assertNoMethodsRemoved(); - final BookmarkPolicyFacetForDomainObjectLayoutAnnotation facetImpl = - (BookmarkPolicyFacetForDomainObjectLayoutAnnotation) facet; - - assertThat(facetImpl.value(), is(BookmarkPolicy.AS_ROOT)); - - expectNoMethodsRemoved(); - - }); - } + }); + } - @Test - public void whenDefaults() { - objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + @Test + public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final BookmarkPolicyFacet facet = facetHolder.getFacet(BookmarkPolicyFacet.class); - assertThat(facet.value(), is(BookmarkPolicy.NOT_SPECIFIED)); + final BookmarkPolicyFacet facet = facetHolder.getFacet(BookmarkPolicyFacet.class); + assertThat(facet.value(), is(BookmarkPolicy.NOT_SPECIFIED)); - expectNoMethodsRemoved(); - }); - } + assertNoMethodsRemoved(); + }); } } // -- - public static class CssClass extends DomainObjectLayoutFactoryTest { + public static class DomainObjectLayout_cssClass extends DomainObjectLayoutFactoryTest { - @Mock ManagedObject mockAdapter; + @Test + public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - public static class ForDomainObjectLayout extends CssClass { + final Facet facet = facetHolder.getFacet(CssClassFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CssClassFacetForDomainObjectLayoutAnnotation); - @Override - @BeforeEach - public void setUp() throws Exception { - super.setUp(); - } + val facetImpl = + (CssClassFacetForDomainObjectLayoutAnnotation) facet; + val mockAdapter = Mockito.mock(ManagedObject.class); + assertThat(facetImpl.cssClass(mockAdapter), is("foobar")); - @Test - public void whenSpecified() { - objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); - - final Facet facet = facetHolder.getFacet(CssClassFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CssClassFacetForDomainObjectLayoutAnnotation); - - final CssClassFacetForDomainObjectLayoutAnnotation facetImpl = - (CssClassFacetForDomainObjectLayoutAnnotation) facet; - assertThat(facetImpl.cssClass(mockAdapter), is("foobar")); - - expectNoMethodsRemoved(); - }); - } + assertNoMethodsRemoved(); + }); + } - @Test - public void whenDefaults() { - objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + @Test + public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(CssClassFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(CssClassFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); - }); - } + assertNoMethodsRemoved(); + }); } - } - public static class CssClassFa extends DomainObjectLayoutFactoryTest { - - @Mock ManagedObject mockAdapter; - - public static class ForDomainObjectLayout extends CssClassFa { - - @BeforeEach - public void setUp2() throws Exception { - } + public static class DomainObjectLayout_cssClassFa extends DomainObjectLayoutFactoryTest { - @Test - public void whenSpecified() { - objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + @Test + public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(CssClassFaFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CssClassFaFacetForDomainObjectLayoutAnnotation); + final Facet facet = facetHolder.getFacet(CssClassFaFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CssClassFaFacetForDomainObjectLayoutAnnotation); - final CssClassFaFacetForDomainObjectLayoutAnnotation facetImpl = (CssClassFaFacetForDomainObjectLayoutAnnotation) facet; - assertThat(facetImpl.asSpaceSeparated(), equalTo("fa fa-fw fa-foo")); - assertThat(facetImpl.getPosition(), is(CssClassFaPosition.RIGHT)); + final CssClassFaFacetForDomainObjectLayoutAnnotation facetImpl = (CssClassFaFacetForDomainObjectLayoutAnnotation) facet; + assertThat(facetImpl.asSpaceSeparated(), equalTo("fa fa-fw fa-foo")); + assertThat(facetImpl.getPosition(), is(CssClassFaPosition.RIGHT)); - expectNoMethodsRemoved(); + assertNoMethodsRemoved(); - }); - } + }); + } - @Test - public void whenDefaults() { - objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + @Test + public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(CssClassFaFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(CssClassFaFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); - }); - } + assertNoMethodsRemoved(); + }); } - - } - public static class DescribedAs extends DomainObjectLayoutFactoryTest { + public static class DomainObjectLayout_describedAs extends DomainObjectLayoutFactoryTest { - @Mock ManagedObject mockAdapter; + @Test + public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - public static class ForDomainObjectLayout extends DescribedAs { + final Facet facet = facetHolder.getFacet(ObjectDescribedFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ObjectDescribedFacetForDomainObjectLayoutAnnotation); - @BeforeEach - public void setUp2() throws Exception { - } + final ObjectDescribedFacetForDomainObjectLayoutAnnotation facetImpl = (ObjectDescribedFacetForDomainObjectLayoutAnnotation) facet; + assertThat(facetImpl.text(), is("This is a description")); - @Test - public void whenSpecified() { - objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + assertNoMethodsRemoved(); - final Facet facet = facetHolder.getFacet(ObjectDescribedFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ObjectDescribedFacetForDomainObjectLayoutAnnotation); - - final ObjectDescribedFacetForDomainObjectLayoutAnnotation facetImpl = (ObjectDescribedFacetForDomainObjectLayoutAnnotation) facet; - assertThat(facetImpl.text(), is("This is a description")); - - expectNoMethodsRemoved(); - - }); - } + }); + } - @Test - public void whenDefaults() { - objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + @Test + public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(ObjectDescribedFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(ObjectDescribedFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); - }); - } + assertNoMethodsRemoved(); + }); } - } - public static class Named extends DomainObjectLayoutFactoryTest { - - @Mock ManagedObject mockAdapter; - - public static class ForDomainObjectLayout extends Named { + public static class DomainObjectLayout_named extends DomainObjectLayoutFactoryTest { - @BeforeEach - public void setUp2() throws Exception { - } + @Test + public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - @Test - public void whenSpecified() { - objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + val namedFacet = facetHolder.getFacet(ObjectNamedFacet.class); + assertNotNull(namedFacet); + assertTrue(namedFacet instanceof ObjectNamedFacetForDomainObjectLayoutAnnotation); - val namedFacet = facetHolder.getFacet(ObjectNamedFacet.class); - assertNotNull(namedFacet); - assertTrue(namedFacet instanceof ObjectNamedFacetForDomainObjectLayoutAnnotation); + assertEquals("Name override", namedFacet.singular()); - assertEquals("Name override", namedFacet.singular()); - - expectNoMethodsRemoved(); - }); - } + assertNoMethodsRemoved(); + }); + } - @Test - public void whenDefaults() { - objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + @Test + public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - val facet = facetHolder.getFacet(ObjectNamedFacet.class); - assertNull(facet); + val facet = facetHolder.getFacet(ObjectNamedFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); - }); - } + assertNoMethodsRemoved(); + }); } - } - public static class Paged extends DomainObjectLayoutFactoryTest { - - @Mock ManagedObject mockAdapter; + public static class DomainObjectLayout_paged extends DomainObjectLayoutFactoryTest { - public static class ForDomainObjectLayout extends Paged { + @Test + public void whenSpecified() { + objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - @BeforeEach - public void setUp2() throws Exception { - } + final Facet facet = facetHolder.getFacet(PagedFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PagedFacetForDomainObjectLayoutAnnotation); - @Test - public void whenSpecified() { - objectScenario(DomainObjectLayoutFactoryTest.Customer.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + final PagedFacetForDomainObjectLayoutAnnotation facetImpl = (PagedFacetForDomainObjectLayoutAnnotation) facet; + assertThat(facetImpl.value(), is(20)); - final Facet facet = facetHolder.getFacet(PagedFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PagedFacetForDomainObjectLayoutAnnotation); + assertNoMethodsRemoved(); - final PagedFacetForDomainObjectLayoutAnnotation facetImpl = (PagedFacetForDomainObjectLayoutAnnotation) facet; - assertThat(facetImpl.value(), is(20)); - - expectNoMethodsRemoved(); - - }); - } + }); + } - @Test - public void whenDefaults() { - objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ - facetFactory.process(processClassContext); + @Test + public void whenDefaults() { + objectScenario(CustomerWithDefaults.class, (processClassContext, facetHolder)->{ + facetFactory.process(processClassContext); - final Facet facet = facetHolder.getFacet(PagedFacet.class); - assertNull(facet); + final Facet facet = facetHolder.getFacet(PagedFacet.class); + assertNull(facet); - expectNoMethodsRemoved(); - }); - } + assertNoMethodsRemoved(); + }); } } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java index e46253e6c4e..fdf088551ee 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleAnnotationFacetFactoryTest.java @@ -25,7 +25,6 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -37,8 +36,6 @@ import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.applib.annotation.Nature; import org.apache.causeway.applib.annotation.Title; -import org.apache.causeway.applib.services.iactnlayer.InteractionService; -import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.Evaluators; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; @@ -54,14 +51,6 @@ class TitleAnnotationFacetFactoryTest private TitleAnnotationFacetFactory facetFactory; - @Override - protected MetaModelContext_forTesting setUpMmc(final MetaModelContext_forTesting.MetaModelContext_forTestingBuilder builder) { - val mockInteractionService = Mockito.mock(InteractionService.class); - return builder - .interactionService(mockInteractionService) - .build(); - } - @BeforeEach public void setUp() throws Exception { assertNotNull(getInteractionService()); @@ -76,7 +65,6 @@ public void tearDown() throws Exception { // -- SCENARIO 1 public static class Customer1 { - @Title public String someTitle() { return "Some Title"; From fe372bc26d1994ea2dee2029fb3bd4ec53253101 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 13:09:56 +0200 Subject: [PATCH 16/37] CAUSEWAY-3409: unify all FacetFactory test s under FacetFactoryTestAbstract --- .../facets/AbstractFacetFactoryTest.java | 166 ------------------ .../facets/FacetFactoryTestAbstract.java | 15 +- .../facets/FacetFactoryTestAbstract2.java | 94 ++++++++++ .../ActionMethodsFacetFactoryTest.java | 33 ++-- .../IteratorFilteringFacetFactoryTest.java | 20 +-- ...tionFacetFactoryTest_ActionInvocation.java | 26 +-- ...cetFallbackToNonIdempotentFactoryTest.java | 20 +-- .../PrototypeFacetAnnotationFactoryTest.java | 20 +-- ...ableAnnotationFacetFactoryTest_action.java | 20 +-- ...ollectionFieldMethodsFacetFactoryTest.java | 21 +-- ...tionAnnotationFacetFactoryTest_typeOf.java | 19 +- ...CollectionLayoutAnnotationFactoryTest.java | 8 +- ...kableAnnotationFacetFactoryTest_class.java | 20 +-- .../CallbackFacetFactoryTestAbstract.java | 19 +- ...FacetFromBoundedAnnotationFactoryTest.java | 20 +-- ...mainServiceFacetAnnotationFactoryTest.java | 20 +-- .../DomainServiceLayoutFacetFactoryTest.java | 20 +-- .../RecreatableObjectFacetFactoryTest.java | 20 +-- ...ObjectSupportFacetFactoryTestAbstract.java | 19 +- .../ordering/memberorder/LayoutOrderTest.java | 25 ++- ...rParameterLayoutAnnotationFactoryTest.java | 6 +- ...rParameterLayoutAnnotationFactoryTest.java | 6 +- ...AnnotationOnParameterFacetFactoryTest.java | 12 +- ...AnnotationOnParameterFacetFactoryTest.java | 10 +- .../PropertyMethodsFacetFactoryTest.java | 46 ++--- ...dAnnotationOnPropertyFacetFactoryTest.java | 20 +-- .../MandatoryAnnotationFacetFactoryTest.java | 10 +- ...ithSnapshotOnPropertyFacetFactoryTest.java | 13 +- ...eAnnotationOnPropertyFacetFactoryTest.java | 12 +- ...xAnnotationOnPropertyFacetFactoryTest.java | 10 +- .../PropertyLayoutAnnotationFactoryTest.java | 15 +- ...ueSemanticsAnnotationFacetFactoryTest.java | 6 +- 32 files changed, 346 insertions(+), 445 deletions(-) delete mode 100644 core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryTest.java create mode 100644 core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryTest.java deleted file mode 100644 index 3f5a440e8a9..00000000000 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/AbstractFacetFactoryTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets; - -import java.lang.reflect.Method; -import java.util.Optional; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.mockito.Mockito; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -import org.apache.causeway.applib.Identifier; -import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; -import org.apache.causeway.applib.id.LogicalType; -import org.apache.causeway.applib.services.i18n.TranslationService; -import org.apache.causeway.applib.services.iactnlayer.InteractionContext; -import org.apache.causeway.applib.services.iactnlayer.InteractionService; -import org.apache.causeway.commons.collections.ImmutableEnumSet; -import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting; -import org.apache.causeway.core.metamodel._testing.MethodRemover_forTesting; -import org.apache.causeway.core.metamodel.context.MetaModelContext; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.actions.layout.ActionLayoutFacetFactory; -import org.apache.causeway.core.metamodel.facets.collections.layout.CollectionLayoutFacetFactory; -import org.apache.causeway.core.metamodel.facets.properties.propertylayout.PropertyLayoutFacetFactory; -import org.apache.causeway.core.security.authentication.InteractionContextFactory; - -public abstract class AbstractFacetFactoryTest { - - public static class Customer { - - private String firstName; - - public String getFirstName() { - return firstName; - } - - public void setFirstName(final String firstName) { - this.firstName = firstName; - } - } - - protected TranslationService mockTranslationService; - protected InteractionService mockInteractionService; - protected final InteractionContext iaContext = InteractionContextFactory.testing(); - protected MethodRemover_forTesting methodRemover; - - protected FacetHolder facetHolder; - protected FacetedMethod facetedMethod; - protected FacetedMethodParameter facetedMethodParameter; - protected MetaModelContext_forTesting metaModelContext; - - @BeforeEach - protected void setUp() throws Exception { - - mockTranslationService = Mockito.mock(TranslationService.class); - mockInteractionService = Mockito.mock(InteractionService.class); - - methodRemover = new MethodRemover_forTesting(); - - metaModelContext = MetaModelContext_forTesting.builder() - .translationService(mockTranslationService) - .interactionService(mockInteractionService) - .build(); - - Mockito.when(mockInteractionService.currentInteractionContext()).thenReturn(Optional.of(iaContext)); - - facetHolder = FacetHolder.simple( - metaModelContext, - Identifier.propertyIdentifier(LogicalType.fqcn(Customer.class), "firstName")); - - facetedMethod = FacetedMethod.createSetterForProperty(metaModelContext, Customer.class, "firstName"); - facetedMethodParameter = new FacetedMethodParameter( - metaModelContext, - FeatureType.ACTION_PARAMETER_SINGULAR, - facetedMethod.getOwningType(), - facetedMethod.getMethod(), 0); - } - - @AfterEach - protected void tearDown() throws Exception { - methodRemover = null; - facetedMethod = null; - } - - protected static boolean contains(final Class[] types, final Class type) { - return _Utils.contains(types, type); - } - - protected static boolean contains(final ImmutableEnumSet featureTypes, final FeatureType featureType) { - return _Utils.contains(featureTypes, featureType); - } - - protected final Method findMethod(final Class type, final String methodName, final Class[] signature) { - return _Utils.findMethodExactOrFail(type, methodName, signature); - } - - protected final Method findMethod(final Class type, final String methodName) { - return _Utils.findMethodExactOrFail(type, methodName); - } - - protected void processMethod( - final FacetFactory facetFactory, - final Class type, - final String methodName, - final Class[] signature) { - - facetFactory.process(ProcessMethodContext - .forTesting(type, null, - findMethod(type, methodName, signature), - methodRemover, facetedMethod)); - } - - protected void processParams( - final FacetFactory facetFactory, - final Class type, - final String methodName, - final Class[] signature) { - - facetFactory.processParams(FacetFactory.ProcessParameterContext - .forTesting(type, IntrospectionPolicy.ANNOTATION_OPTIONAL, - findMethod(type, methodName, signature), - null, facetedMethodParameter)); - } - - protected void assertNoMethodsRemoved() { - assertTrue(methodRemover.getRemovedMethodMethodCalls().isEmpty()); - assertTrue(methodRemover.getRemoveMethodArgsCalls().isEmpty()); - } - - // -- FACTORIES - - protected static PropertyLayoutFacetFactory createPropertyLayoutFacetFactory(final MetaModelContext mmc) { - return new PropertyLayoutFacetFactory(mmc); - } - - protected static CollectionLayoutFacetFactory createCollectionLayoutFacetFactory(final MetaModelContext mmc) { - return new CollectionLayoutFacetFactory(mmc); - } - - protected static ActionLayoutFacetFactory createActionLayoutFacetFactory(final MetaModelContext mmc) { - return new ActionLayoutFacetFactory(mmc); - } - - -} diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index d07d073faf4..2811ad29d9f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -114,7 +114,7 @@ private static FacetHolder facetHolder( private TranslationService mockTranslationService; private InteractionService mockInteractionService; private final InteractionContext iaContext = InteractionContextFactory.testing(); - private MethodRemover_forTesting methodRemover; + protected MethodRemover_forTesting methodRemover; /** * Override, if a custom {@link MetaModelContext_forTesting} is required for certain tests. @@ -242,22 +242,13 @@ protected Method findMethod(final Class type, final String methodName) { // -- EXPECTATIONS - protected void assertNoMethodsRemoved() { - //Mockito.verifyNoInteractions(methodRemover); + protected final void assertNoMethodsRemoved() { assertTrue(methodRemover.getRemovedMethodMethodCalls().isEmpty()); assertTrue(methodRemover.getRemoveMethodArgsCalls().isEmpty()); } - protected void assertMethodWasRemoved(final Method method) { - //Mockito.verify(methodRemover, Mockito.atLeastOnce()).removeMethod(actionMethod); + protected final void assertMethodWasRemoved(final Method method) { assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(method)); - //assertTrue(methodRemover.getRemoveMethodArgsCalls().isEmpty()); } - /* - protected void expectRemoveMethodOnce(final Method actionMethod) { - Mockito.verify(methodRemover, calls(1)).removeMethod(actionMethod); - }*/ - - } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java new file mode 100644 index 00000000000..a95a5ea7f90 --- /dev/null +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java @@ -0,0 +1,94 @@ +/* + * 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.causeway.core.metamodel.facets; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + +import org.apache.causeway.applib.Identifier; +import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; +import org.apache.causeway.applib.id.LogicalType; +import org.apache.causeway.core.metamodel.facetapi.FacetHolder; +import org.apache.causeway.core.metamodel.facetapi.FeatureType; +import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; + +@Deprecated //TODO[CAUSEWAY-3409] use FacetFactoryTestAbstract scenarios instead +public abstract class FacetFactoryTestAbstract2 +extends FacetFactoryTestAbstract { + + public static class Customer { + + private String firstName; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(final String firstName) { + this.firstName = firstName; + } + } + + protected FacetHolder facetHolder; + protected FacetedMethod facetedMethod; + protected FacetedMethodParameter facetedMethodParameter; + + @BeforeEach + protected void setUpAll2() { + facetHolder = FacetHolder.simple( + getMetaModelContext(), + Identifier.propertyIdentifier(LogicalType.fqcn(Customer.class), "firstName")); + + facetedMethod = FacetedMethod.createSetterForProperty(getMetaModelContext(), Customer.class, "firstName"); + facetedMethodParameter = new FacetedMethodParameter( + getMetaModelContext(), + FeatureType.ACTION_PARAMETER_SINGULAR, + facetedMethod.getOwningType(), + facetedMethod.getMethod(), 0); + } + + @AfterEach + protected void tearDownAll2() { + facetedMethod = null; + } + + protected void processMethod( + final FacetFactory facetFactory, + final Class type, + final String methodName, + final Class[] signature) { + + facetFactory.process(ProcessMethodContext + .forTesting(type, null, + findMethod(type, methodName, signature), + methodRemover, facetedMethod)); + } + + protected void processParams( + final FacetFactory facetFactory, + final Class type, + final String methodName, + final Class[] signature) { + + facetFactory.processParams(FacetFactory.ProcessParameterContext + .forTesting(type, IntrospectionPolicy.ANNOTATION_OPTIONAL, + findMethod(type, methodName, signature), + null, facetedMethodParameter)); + } +} diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java index b1b9e06729b..30f4be10618 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java @@ -22,10 +22,9 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Optional; import java.util.Set; -import org.mockito.Mockito; +import org.junit.jupiter.api.BeforeEach; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -34,8 +33,8 @@ import org.apache.causeway.commons.internal.reflection._MethodFacades; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.validate.ActionValidationFacet; import org.apache.causeway.core.metamodel.facets.actions.validate.method.ActionValidationFacetViaMethod; @@ -53,20 +52,16 @@ import lombok.val; -class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest { +class ActionMethodsFacetFactoryTest extends FacetFactoryTestAbstract2 { - @Override - public void setUp() throws Exception { - super.setUp(); - - val specLoader = metaModelContext.getSpecificationLoader(); + @BeforeEach + public void setUp() { + val specLoader = getMetaModelContext().getSpecificationLoader(); ObjectSpecification voidSpec = specLoader.loadSpecification(void.class); - - Mockito.when(mockInteractionService.currentInteractionContext()).thenReturn(Optional.of(iaContext)); } public void testInstallsValidateMethodNoArgsFacetAndRemovesMethod() { - val facetFactory = new ActionValidationFacetViaMethodFactory(metaModelContext); + val facetFactory = new ActionValidationFacetViaMethodFactory(getMetaModelContext()); @SuppressWarnings("unused") class Customer { @@ -94,7 +89,7 @@ public String validateSomeAction() { } public void testInstallsValidateMethodSomeArgsFacetAndRemovesMethod() { - val facetFactory = new ActionValidationFacetViaMethodFactory(metaModelContext); + val facetFactory = new ActionValidationFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -122,7 +117,7 @@ public String validateSomeAction(final int x, final int y) { } public void testInstallsParameterDefaultsMethodAndRemovesMethod() { - val facetFactory = new ActionParameterDefaultsFacetViaMethodFactory(metaModelContext); + val facetFactory = new ActionParameterDefaultsFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -145,7 +140,7 @@ public long default1SomeAction() { final Method default1Method = findMethod(Customer.class, "default1SomeAction", new Class[]{}); final FacetedMethod facetHolderWithParms = FacetedMethod - .createForAction(metaModelContext, Customer.class, _MethodFacades.regular(actionMethod)); + .createForAction(getMetaModelContext(), Customer.class, _MethodFacades.regular(actionMethod)); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.ACTION, actionMethod, methodRemover, facetHolderWithParms)); @@ -169,7 +164,7 @@ public long default1SomeAction() { } public void testInstallsParameterChoicesMethodAndRemovesMethod() { - val facetFactory = new ActionParameterChoicesFacetViaMethodFactory(metaModelContext); + val facetFactory = new ActionParameterChoicesFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -198,7 +193,7 @@ public Set choices2SomeAction() { final Method choices2Method = findMethod(Customer.class, "choices2SomeAction", new Class[] {}); final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction( - metaModelContext, Customer.class, _MethodFacades.regular(actionMethod)); + getMetaModelContext(), Customer.class, _MethodFacades.regular(actionMethod)); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.ACTION, actionMethod, methodRemover, facetHolderWithParms)); @@ -231,7 +226,7 @@ public Set choices2SomeAction() { } public void testInstallsParameterAutoCompleteMethodAndRemovesMethod() { - val facetFactory = new ActionParameterAutoCompleteFacetViaMethodFactory(metaModelContext); + val facetFactory = new ActionParameterAutoCompleteFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -248,7 +243,7 @@ public List autoComplete0SomeAction(final String searchArg) { final Method autoComplete0Method = findMethod(Customer.class, "autoComplete0SomeAction", new Class[] {String.class}); final FacetedMethod facetHolderWithParms = FacetedMethod - .createForAction(metaModelContext, Customer.class, _MethodFacades.regular(actionMethod)); + .createForAction(getMetaModelContext(), Customer.class, _MethodFacades.regular(actionMethod)); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.ACTION, actionMethod, methodRemover, facetHolderWithParms)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java index 696aea12c75..d6511e52d4c 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java @@ -21,29 +21,29 @@ import java.lang.reflect.Method; import java.util.Iterator; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.object.ignore.javalang.IteratorFilteringFacetFactory; -class IteratorFilteringFacetFactoryTest extends AbstractFacetFactoryTest { +class IteratorFilteringFacetFactoryTest extends FacetFactoryTestAbstract2 { private IteratorFilteringFacetFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new IteratorFilteringFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new IteratorFilteringFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } public void testRequestsRemoverToRemoveIteratorMethods() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java index f22a09459af..9d40bb75a45 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java @@ -20,6 +20,8 @@ import java.lang.reflect.Method; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -28,8 +30,8 @@ import org.apache.causeway.commons.internal.reflection._MethodFacades; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEvent; @@ -45,7 +47,7 @@ @SuppressWarnings("unused") class ActionAnnotationFacetFactoryTest_ActionInvocation -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private ObjectSpecification voidSpec; private ObjectSpecification stringSpec; @@ -59,12 +61,12 @@ private void processInvocation( facetFactory.processInvocation(processMethodContext, actionIfAny); } - @Override - public void setUp() throws Exception { - super.setUp(); - this.facetFactory = new ActionAnnotationFacetFactory(metaModelContext); + @BeforeEach + public void setUp() { + + this.facetFactory = new ActionAnnotationFacetFactory(getMetaModelContext()); - val specLoader = metaModelContext.getSpecificationLoader(); + val specLoader = getSpecificationLoader(); voidSpec = specLoader.loadSpecification(void.class); stringSpec = specLoader.loadSpecification(java.lang.String.class); customerSpec = specLoader.loadSpecification(Customer.class); @@ -131,7 +133,7 @@ public String someAction() { } } - val customerSpec = metaModelContext.getSpecificationLoader().loadSpecification(LocalCustomer.class); + val customerSpec = getSpecificationLoader().loadSpecification(LocalCustomer.class); final Method actionMethod = findMethod(LocalCustomer.class, "someAction"); @@ -159,7 +161,7 @@ class CustomerEx extends Customer { final Method actionMethod = findMethod(CustomerEx.class, "someAction", new Class[] { int.class, long.class }); final FacetedMethod facetHolderWithParms = FacetedMethod - .createForAction(metaModelContext, CustomerEx.class, _MethodFacades.regular(actionMethod)); + .createForAction(getMetaModelContext(), CustomerEx.class, _MethodFacades.regular(actionMethod)); processInvocation(facetFactory, ProcessMethodContext .forTesting(CustomerEx.class, null, actionMethod, methodRemover, facetHolderWithParms)); @@ -170,8 +172,8 @@ class CustomerEx extends Customer { public void testActionsPickedUpFromSuperclassButHelpersFromSubClass() { - val facetFactoryForChoices = new ActionParameterChoicesFacetViaMethodFactory(metaModelContext); - val facetFactoryForDisable = new DisableForContextFacetViaMethodFactory(metaModelContext); + val facetFactoryForChoices = new ActionParameterChoicesFacetViaMethodFactory(getMetaModelContext()); + val facetFactoryForDisable = new DisableForContextFacetViaMethodFactory(getMetaModelContext()); class Customer { @@ -206,7 +208,7 @@ public String disableSomeAction() { final Method choices1Method = findMethod(CustomerEx.class, "choices1SomeAction", new Class[] {}); final Method disableMethod = findMethod(CustomerEx.class, "disableSomeAction", new Class[] {}); - final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(metaModelContext, CustomerEx.class, + final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(getMetaModelContext(), CustomerEx.class, _MethodFacades.regular(actionMethod)); final ProcessMethodContext processMethodContext = ProcessMethodContext diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java index de33004aca5..51f5f6a26cf 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java @@ -20,20 +20,23 @@ import java.lang.reflect.Method; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetFallbackToNonIdempotent; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; import lombok.val; class ActionSemanticsFacetFallbackToNonIdempotentFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private ActionAnnotationFacetFactory facetFactory; @@ -43,17 +46,14 @@ private void processSemantics( facetFactory.processSemantics(processMethodContext, actionIfAny); } - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new ActionAnnotationFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new ActionAnnotationFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } public void testNoAnnotationPickedUp() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java index e30eeae7e8c..f4341622ca1 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java @@ -20,21 +20,24 @@ import java.lang.reflect.Method; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.applib.annotation.RestrictTo; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet; import org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacetAbstract; import lombok.val; class PrototypeFacetAnnotationFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private ActionAnnotationFacetFactory facetFactory; @@ -44,17 +47,14 @@ private void processRestrictTo( facetFactory.processRestrictTo(processMethodContext, actionIfAny); } - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new ActionAnnotationFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new ActionAnnotationFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } public void testAnnotationPickedUp() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/bookmarkable/BookmarkableAnnotationFacetFactoryTest_action.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/bookmarkable/BookmarkableAnnotationFacetFactoryTest_action.java index 8aede2957ac..d3021d62c83 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/bookmarkable/BookmarkableAnnotationFacetFactoryTest_action.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/bookmarkable/BookmarkableAnnotationFacetFactoryTest_action.java @@ -20,32 +20,32 @@ import java.lang.reflect.Method; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetAbstract; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetFallbackFactory; class BookmarkableAnnotationFacetFactoryTest_action -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private BookmarkPolicyFacetFallbackFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new BookmarkPolicyFacetFallbackFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new BookmarkPolicyFacetFallbackFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } public void testBookmarkableAnnotationPickedUpOnClass() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java index 81a9082fba4..ed3414d6866 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java @@ -28,8 +28,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessor; import org.apache.causeway.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessorFactory; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; @@ -37,15 +37,10 @@ import lombok.val; class CollectionFieldMethodsFacetFactoryTest -extends AbstractFacetFactoryTest { - - @Override - public void setUp() throws Exception { - super.setUp(); - } +extends FacetFactoryTestAbstract2 { public void testPropertyAccessorFacetIsInstalledForJavaUtilCollectionAndMethodRemoved() { - val facetFactory = new CollectionAccessorFacetViaAccessorFactory(metaModelContext); + val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); class Customer { @SuppressWarnings({ "rawtypes", "unused" }) @@ -69,7 +64,7 @@ public Collection getOrders() { public void testPropertyAccessorFacetIsInstalledForJavaUtilListAndMethodRemoved() { - val facetFactory = new CollectionAccessorFacetViaAccessorFactory(metaModelContext); + val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); class Customer { @SuppressWarnings({ "rawtypes", "unused" }) @@ -93,7 +88,7 @@ public List getOrders() { } public void testPropertyAccessorFacetIsInstalledForJavaUtilSetAndMethodRemoved() { - val facetFactory = new CollectionAccessorFacetViaAccessorFactory(metaModelContext); + val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); class Customer { @SuppressWarnings({ "rawtypes", "unused" }) @@ -116,7 +111,7 @@ public Set getOrders() { } public void testPropertyAccessorFacetIsInstalledForObjectArrayAndMethodRemoved() { - val facetFactory = new CollectionAccessorFacetViaAccessorFactory(metaModelContext); + val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -139,7 +134,7 @@ public Object[] getOrders() { } public void testPropertyAccessorFacetIsInstalledForOrderArrayAndMethodRemoved() { - val facetFactory = new CollectionAccessorFacetViaAccessorFactory(metaModelContext); + val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); @SuppressWarnings("hiding") class Order { @@ -165,7 +160,7 @@ public Order[] getOrders() { } public void testMethodFoundInSuperclass() { - val facetFactory = new CollectionAccessorFacetViaAccessorFactory(metaModelContext); + val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); @SuppressWarnings("hiding") class Order { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java index 4cbab12ab9f..0fa56f7ac8c 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java @@ -23,6 +23,8 @@ import java.util.Optional; import org.hamcrest.Matchers; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -31,29 +33,26 @@ import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CollectionSemantics; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacetFromFeature; class CollectionAnnotationFacetFactoryTest_typeOf -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private CollectionAnnotationFacetFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - facetFactory = new CollectionAnnotationFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new CollectionAnnotationFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } - public void testTypeOfFacetInferredForActionWithGenericCollectionReturnType() { class Order { } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java index 6a520605a8f..1570a0417d5 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java @@ -36,8 +36,8 @@ import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.commons.internal.collections._Sets; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; import org.apache.causeway.core.metamodel.facets.all.i8n.staatic.HasStaticText; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; @@ -47,11 +47,11 @@ import lombok.val; -class CollectionLayoutAnnotationFactoryTest extends AbstractFacetFactoryTest { +class CollectionLayoutAnnotationFactoryTest extends FacetFactoryTestAbstract2 { @Test public void testCollectionLayoutAnnotation_named() { - val facetFactory = new CollectionLayoutFacetFactory(metaModelContext); + val facetFactory = new CollectionLayoutFacetFactory(getMetaModelContext()); class Customer { @CollectionLayout(named = "1st names") @@ -72,7 +72,7 @@ public SortedSet getFirstNames() { @Test void testCollectionLayoutAnnotation_hidden() { - val facetFactory = new CollectionLayoutFacetFactory(metaModelContext); + val facetFactory = new CollectionLayoutFacetFactory(getMetaModelContext()); class Customer { @CollectionLayout(hidden = Where.OBJECT_FORMS) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/BookmarkableAnnotationFacetFactoryTest_class.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/BookmarkableAnnotationFacetFactoryTest_class.java index 9ab1b8d46a5..fc163eb17c9 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/BookmarkableAnnotationFacetFactoryTest_class.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/BookmarkableAnnotationFacetFactoryTest_class.java @@ -18,6 +18,9 @@ */ package org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -25,26 +28,23 @@ import org.apache.causeway.applib.annotation.BookmarkPolicy; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetFallbackFactory; class BookmarkableAnnotationFacetFactoryTest_class -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private BookmarkPolicyFacetFallbackFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new BookmarkPolicyFacetFallbackFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new BookmarkPolicyFacetFallbackFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } public void testBookmarkablePolicyInferredPickedUpOnClassAndDefaultsToAlways() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CallbackFacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CallbackFacetFactoryTestAbstract.java index a740b6298d8..f202a167934 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CallbackFacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CallbackFacetFactoryTestAbstract.java @@ -18,37 +18,36 @@ */ package org.apache.causeway.core.metamodel.facets.object.callback; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.commons.internal.reflection._MethodFacades; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.ImperativeFacet; import org.apache.causeway.core.metamodel.facets.object.callbacks.CallbackFacetFactory; import lombok.val; abstract class CallbackFacetFactoryTestAbstract -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { protected CallbackFacetFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new CallbackFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new CallbackFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } protected void assertPicksUp( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java index c7275bbc0e8..5c6e4fca333 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java @@ -18,35 +18,35 @@ */ package org.apache.causeway.core.metamodel.facets.object.domainobject; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.annotation.Bounding; import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.choices.ChoicesFacet; import lombok.val; class ChoicesFacetFromBoundedAnnotationFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private DomainObjectAnnotationFacetFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new DomainObjectAnnotationFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new DomainObjectAnnotationFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } public void testBoundedAnnotationPickedUpOnClass() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java index 572d009e7a9..38a04d5e1f6 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java @@ -18,31 +18,31 @@ */ package org.apache.causeway.core.metamodel.facets.object.domainservice.annotation; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.annotation.DomainService; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacet; class DomainServiceFacetAnnotationFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private DomainServiceFacetAnnotationFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new DomainServiceFacetAnnotationFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new DomainServiceFacetAnnotationFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } public void testAggregatedAnnotationPickedUpOnClass() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java index b96a8743abd..70205b7d57d 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java @@ -18,6 +18,9 @@ */ package org.apache.causeway.core.metamodel.facets.object.domainservicelayout.annotation; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -26,27 +29,24 @@ import org.apache.causeway.applib.annotation.DomainService; import org.apache.causeway.applib.annotation.DomainServiceLayout; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet; import org.apache.causeway.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacetFactory; class DomainServiceLayoutFacetFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private DomainServiceLayoutFacetFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new DomainServiceLayoutFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new DomainServiceLayoutFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } public void testAnnotationPickedUpOnClass() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java index c1662be3a51..85520799b90 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java @@ -18,33 +18,33 @@ */ package org.apache.causeway.core.metamodel.facets.object.recreatable; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.ViewModel; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacet; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetFactory; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetForViewModelInterface; class RecreatableObjectFacetFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private ViewModelFacetFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new ViewModelFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new ViewModelFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } static class Customer implements ViewModel { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java index 3c608e67acf..15069d3fff8 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java @@ -18,6 +18,9 @@ */ package org.apache.causeway.core.metamodel.facets.object.support; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -25,28 +28,26 @@ import org.apache.causeway.commons.internal.reflection._MethodFacades; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.ImperativeFacet; import lombok.val; public abstract class ObjectSupportFacetFactoryTestAbstract -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { protected ObjectSupportFacetFactory facetFactory; - @Override - public void setUp() throws Exception { - super.setUp(); - facetFactory = new ObjectSupportFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new ObjectSupportFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } protected void assertPicksUp( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java index 74d0e479a17..9dfa87c62d1 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java @@ -21,6 +21,8 @@ import java.lang.reflect.Method; import java.util.Collection; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -28,21 +30,23 @@ import org.apache.causeway.applib.annotation.ActionLayout; import org.apache.causeway.applib.annotation.CollectionLayout; import org.apache.causeway.applib.annotation.PropertyLayout; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.actions.layout.ActionLayoutFacetFactory; +import org.apache.causeway.core.metamodel.facets.collections.layout.CollectionLayoutFacetFactory; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromActionLayoutAnnotation; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromCollectionLayoutAnnotation; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromPropertyLayoutAnnotation; +import org.apache.causeway.core.metamodel.facets.properties.propertylayout.PropertyLayoutFacetFactory; import lombok.val; class LayoutOrderTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { - @Override - protected void setUp() throws Exception { - super.setUp(); + @BeforeEach + protected void setUp() { //FIXME // context.checking(new Expectations() {{ @@ -61,11 +65,6 @@ protected void setUp() throws Exception { // }}); } - @Override - protected void tearDown() throws Exception { - super.tearDown(); - } - public void testMemberOrderAnnotationPickedUpOnProperty() { class Customer { @PropertyLayout(sequence = "1") @@ -75,7 +74,7 @@ public String getFirstName() { } final Method method = findMethod(Customer.class, "getFirstName"); - val facetFactory = super.createPropertyLayoutFacetFactory(metaModelContext); + val facetFactory = new PropertyLayoutFacetFactory(getMetaModelContext()); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); @@ -102,7 +101,7 @@ public void addToOrders(final Order o) { } final Method method = findMethod(Customer.class, "getOrders"); - val facetFactory = super.createCollectionLayoutFacetFactory(metaModelContext); + val facetFactory = new CollectionLayoutFacetFactory(getMetaModelContext()); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); @@ -122,7 +121,7 @@ public void someAction() { } final Method method = findMethod(Customer.class, "someAction"); - val facetFactory = super.createActionLayoutFacetFactory(metaModelContext); + val facetFactory = new ActionLayoutFacetFactory(getMetaModelContext()); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java index 9de99b0f569..de17233c52e 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java @@ -29,16 +29,16 @@ import org.apache.causeway.applib.annotation.LabelPosition; import org.apache.causeway.applib.annotation.ParameterLayout; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet; import org.apache.causeway.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation; import org.apache.causeway.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory; -public class LabelAtFacetForParameterLayoutAnnotationFactoryTest extends AbstractFacetFactoryTest { +public class LabelAtFacetForParameterLayoutAnnotationFactoryTest extends FacetFactoryTestAbstract2 { public void testParameterLayoutAnnotationPickedUp() { - final ParameterLayoutFacetFactory facetFactory = new ParameterLayoutFacetFactory(metaModelContext); + final ParameterLayoutFacetFactory facetFactory = new ParameterLayoutFacetFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java index 0d3b7deadb6..abc7ad4f321 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java @@ -28,8 +28,8 @@ import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.annotation.ParameterLayout; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet; import org.apache.causeway.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation; import org.apache.causeway.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory; @@ -37,12 +37,12 @@ import lombok.val; class NamedFacetForParameterLayoutAnnotationFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private static final String NAME = "an action"; public void testParameterLayoutAnnotationNamed() { - final ParameterLayoutFacetFactory facetFactory = new ParameterLayoutFacetFactory(metaModelContext); + final ParameterLayoutFacetFactory facetFactory = new ParameterLayoutFacetFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java index 39e9f71f05d..bf6490f123e 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java @@ -20,6 +20,7 @@ import java.lang.reflect.Method; +import org.junit.jupiter.api.BeforeEach; import org.springframework.lang.Nullable; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -30,20 +31,19 @@ import org.apache.causeway.applib.annotation.Optionality; import org.apache.causeway.applib.annotation.Parameter; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetForParameterAnnotation; import org.apache.causeway.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByNullableAnnotationOnParameter; -class ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest extends AbstractFacetFactoryTest { +class ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest extends FacetFactoryTestAbstract2 { private ParameterAnnotationFacetFactory facetFactory; - @Override - public void setUp() throws Exception { - super.setUp(); - facetFactory = new ParameterAnnotationFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new ParameterAnnotationFacetFactory(getMetaModelContext()); } public void testParameterAnnotationWithOptionalityPickedUpOnActionParameter() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java index 803f5456d42..76fc4869d14 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java @@ -31,20 +31,18 @@ import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.regex.RegExFacet; import org.apache.causeway.core.metamodel.facets.param.parameter.regex.RegExFacetForPatternAnnotationOnParameter; -class RegExAnnotationOnParameterFacetFactoryTest extends AbstractFacetFactoryTest { +class RegExAnnotationOnParameterFacetFactoryTest extends FacetFactoryTestAbstract2 { private ParameterAnnotationFacetFactory facetFactory; - @Override @BeforeEach - public void setUp() throws Exception { - super.setUp(); - facetFactory = new ParameterAnnotationFacetFactory(metaModelContext); + protected void setUp() { + facetFactory = new ParameterAnnotationFacetFactory(getMetaModelContext()); } public void testRegExAnnotationPickedUpOnActionParameter() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java index 8e231d851f4..0b8e1e5cccd 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java @@ -27,8 +27,8 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethod; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethodFactory; @@ -62,15 +62,10 @@ import lombok.val; class PropertyMethodsFacetFactoryTest -extends AbstractFacetFactoryTest { - - @Override - public void setUp() throws Exception { - super.setUp(); - } +extends FacetFactoryTestAbstract2 { public void testPropertyAccessorFacetIsInstalledAndMethodRemoved() { - val facetFactory = new PropertyAccessorFacetViaAccessorFactory(metaModelContext); + val facetFactory = new PropertyAccessorFacetViaAccessorFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -93,7 +88,7 @@ public String getFirstName() { } public void testSetterFacetIsInstalledForSetterMethodAndMethodRemoved() { - val facetFactory = new PropertySetterFacetFactory(metaModelContext); + val facetFactory = new PropertySetterFacetFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -121,7 +116,7 @@ public void setFirstName(final String firstName) { } public void testInitializationFacetIsInstalledForSetterMethodAndMethodRemoved() { - val facetFactory = new PropertySetterFacetFactory(metaModelContext); + val facetFactory = new PropertySetterFacetFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -149,7 +144,7 @@ public void setFirstName(final String firstName) { } public void testSetterFacetIsInstalledMeansNoDisabledOrDerivedFacetsInstalled() { - val facetFactory = new PropertySetterFacetFactory(metaModelContext); + val facetFactory = new PropertySetterFacetFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -171,7 +166,7 @@ public void setFirstName(final String firstName) { } public void testClearFacetViaSetterIfNoExplicitClearMethod() { - val facetFactory = new PropertySetterFacetFactory(metaModelContext); + val facetFactory = new PropertySetterFacetFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -197,7 +192,7 @@ public void setFirstName(final String firstName) { } public void testChoicesFacetFoundAndMethodRemoved() { - val facetFactory = new PropertyChoicesFacetViaMethodFactory(metaModelContext); + val facetFactory = new PropertyChoicesFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -227,7 +222,7 @@ public String[] choicesFirstName() { public void testAutoCompleteFacetFoundAndMethodRemoved() { - val facetFactory = new PropertyAutoCompleteFacetMethodFactory(metaModelContext); + val facetFactory = new PropertyAutoCompleteFacetMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -256,7 +251,7 @@ public String[] autoCompleteFirstName(final String searchArg) { } public void testDefaultFacetFoundAndMethodRemoved() { - val facetFactory = new PropertyDefaultFacetViaMethodFactory(metaModelContext); + val facetFactory = new PropertyDefaultFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -285,7 +280,7 @@ public String defaultFirstName() { } public void testValidateFacetFoundAndMethodRemoved() { - val facetFactory = new PropertyValidateFacetViaMethodFactory(metaModelContext); + val facetFactory = new PropertyValidateFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -314,7 +309,7 @@ public String validateFirstName(final String firstName) { } public void testDisableFacetFoundAndMethodRemoved() { - val facetFactory = new DisableForContextFacetViaMethodFactory(metaModelContext); + val facetFactory = new DisableForContextFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -344,7 +339,7 @@ public String disableFirstName() { public void testDisableFacetNoArgsFoundAndMethodRemoved() { - val facetFactory = new DisableForContextFacetViaMethodFactory(metaModelContext); + val facetFactory = new DisableForContextFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -373,7 +368,7 @@ public String disableFirstName() { } public void testHiddenFacetFoundAndMethodRemoved() { - val facetFactory = new HideForContextFacetViaMethodFactory(metaModelContext); + val facetFactory = new HideForContextFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -402,7 +397,7 @@ public boolean hideFirstName() { } public void testHiddenFacetWithNoArgFoundAndMethodRemoved() { - val facetFactory = new HideForContextFacetViaMethodFactory(metaModelContext); + val facetFactory = new HideForContextFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -431,7 +426,7 @@ public boolean hideFirstName() { } public void testPropertyFoundOnSuperclass() { - val facetFactory = new PropertyAccessorFacetViaAccessorFactory(metaModelContext); + val facetFactory = new PropertyAccessorFacetViaAccessorFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -456,9 +451,9 @@ class CustomerEx extends Customer { } public void testPropertyFoundOnSuperclassButHelperMethodFoundOnSubclass() { - val facetFactory = new PropertyAccessorFacetViaAccessorFactory(metaModelContext); - val facetFactoryForHide = new HideForContextFacetViaMethodFactory(metaModelContext); - val facetFactoryForDisable = new DisableForContextFacetViaMethodFactory(metaModelContext); + val facetFactory = new PropertyAccessorFacetViaAccessorFactory(getMetaModelContext()); + val facetFactoryForHide = new HideForContextFacetViaMethodFactory(getMetaModelContext()); + val facetFactoryForDisable = new DisableForContextFacetViaMethodFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") @@ -503,7 +498,4 @@ public String disableFirstName() { assertEquals(propertyDisableMethod, disableForContextFacet.getMethods().getFirstElseFail()); } - - - } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java index ac7acd42d11..c27382027fc 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java @@ -20,6 +20,9 @@ import java.lang.reflect.Method; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -28,30 +31,27 @@ import org.apache.causeway.applib.annotation.Editing; import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacetAbstract; import lombok.val; class DisabledAnnotationOnPropertyFacetFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; - @Override - protected void setUp() throws Exception { - super.setUp(); - - facetFactory = new PropertyAnnotationFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new PropertyAnnotationFacetFactory(getMetaModelContext()); } - @Override - protected void tearDown() throws Exception { + @AfterEach + protected void tearDown() { facetFactory = null; - super.tearDown(); } private void processEditing( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java index beaf8470480..b31058b9f2b 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java @@ -28,24 +28,22 @@ import org.apache.causeway.applib.annotation.Optionality; import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import lombok.val; class MandatoryAnnotationFacetFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; - @Override @BeforeEach - public void setUp() throws Exception { - super.setUp(); - facetFactory = new PropertyAnnotationFacetFactory(metaModelContext); + protected void setUp() { + facetFactory = new PropertyAnnotationFacetFactory(getMetaModelContext()); } private void processOptional( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java index fc242a99584..210540cb007 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java @@ -20,29 +20,30 @@ import java.lang.reflect.Method; +import org.junit.jupiter.api.BeforeEach; + import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.applib.annotation.Snapshot; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet; import org.apache.causeway.core.metamodel.facets.properties.property.snapshot.SnapshotExcludeFacetForPropertyAnnotation; import lombok.val; class PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; - @Override - public void setUp() throws Exception { - super.setUp(); - facetFactory = new PropertyAnnotationFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new PropertyAnnotationFacetFactory(getMetaModelContext()); } private void processNotPersisted( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java index 8a3efc39568..84c1a967c90 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java @@ -20,6 +20,7 @@ import java.lang.reflect.Method; +import org.junit.jupiter.api.BeforeEach; import org.springframework.lang.Nullable; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -29,9 +30,9 @@ import org.apache.causeway.applib.annotation.Optionality; import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByNullableAnnotationOnProperty; @@ -39,14 +40,13 @@ import lombok.val; class PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; - @Override - public void setUp() throws Exception { - super.setUp(); - facetFactory = new PropertyAnnotationFacetFactory(metaModelContext); + @BeforeEach + protected void setUp() { + facetFactory = new PropertyAnnotationFacetFactory(getMetaModelContext()); } private void processOptional( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java index 4f2f6dde57b..4590cac224f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java @@ -31,24 +31,22 @@ import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.regex.RegExFacet; import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPatternAnnotationOnProperty; import lombok.val; class RegExAnnotationOnPropertyFacetFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; - @Override @BeforeEach - public void setUp() throws Exception { - super.setUp(); - facetFactory = new PropertyAnnotationFacetFactory(metaModelContext); + protected void setUp() { + facetFactory = new PropertyAnnotationFacetFactory(getMetaModelContext()); } private void processRegEx( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java index 4b539ce504b..2c1c1debfc8 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java @@ -20,6 +20,7 @@ import java.lang.reflect.Method; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; @@ -35,9 +36,9 @@ import org.apache.causeway.applib.annotation.PropertyLayout; import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; import org.apache.causeway.core.metamodel.facets.all.i8n.staatic.HasStaticText; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; @@ -46,11 +47,17 @@ import lombok.val; class PropertyLayoutAnnotationFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { + + private PropertyLayoutFacetFactory facetFactory; + + @BeforeEach + protected void setUp() { + facetFactory = new PropertyLayoutFacetFactory(getMetaModelContext()); + } @Test void testPropertyLayoutAnnotation_named() { - val facetFactory = createPropertyLayoutFacetFactory(metaModelContext); class Customer { @PropertyLayout(named = "1st name") @@ -76,7 +83,6 @@ public String getFirstName() { @Test void testPropertyLayoutAnnotation_hidden() { - final PropertyLayoutFacetFactory facetFactory = createPropertyLayoutFacetFactory(metaModelContext); class Customer { @PropertyLayout(hidden = Where.OBJECT_FORMS) @@ -103,7 +109,6 @@ public String getFirstName() { @Test void testPropertyLayoutAnnotation_labelPosition() { - final PropertyLayoutFacetFactory facetFactory = createPropertyLayoutFacetFactory(metaModelContext); class Customer { @PropertyLayout(labelPosition = LabelPosition.LEFT) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java index e11315b2971..324a9750292 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java @@ -31,7 +31,7 @@ import org.apache.causeway.applib.annotation.ValueSemantics; import org.apache.causeway.commons.internal._Constants; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.AbstractFacetFactoryTest; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet; @@ -44,7 +44,7 @@ @SuppressWarnings("unused") class ValueSemanticsAnnotationFacetFactoryTest -extends AbstractFacetFactoryTest { +extends FacetFactoryTestAbstract2 { // -- MAX TOTAL DIGITS @@ -312,7 +312,7 @@ class Order { // -- HELPER ValueSemanticsAnnotationFacetFactory newFacetFactory() { - return new ValueSemanticsAnnotationFacetFactory(metaModelContext); + return new ValueSemanticsAnnotationFacetFactory(getMetaModelContext()); } private void assertDefaultMaxTotalDigits(final FacetHolder facetedMethod) { From fd9b7d0b68a4bf5b672967567579706f2754bbba Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 14:16:04 +0200 Subject: [PATCH 17/37] CAUSEWAY-3409: simplify FacetFactory test hierarchy (1) --- .../facets/FacetFactoryTestAbstract2.java | 25 -- .../ActionMethodsFacetFactoryTest.java | 3 +- .../IteratorFilteringFacetFactoryTest.java | 5 +- ...tionFacetFactoryTest_ActionInvocation.java | 2 +- ...CollectionLayoutAnnotationFactoryTest.java | 3 +- ...mainServiceFacetAnnotationFactoryTest.java | 4 +- .../DomainServiceLayoutFacetFactoryTest.java | 4 +- .../RecreatableObjectFacetFactoryTest.java | 4 +- ...rParameterLayoutAnnotationFactoryTest.java | 5 +- ...rParameterLayoutAnnotationFactoryTest.java | 4 +- ...AnnotationOnParameterFacetFactoryTest.java | 5 +- ...AnnotationOnParameterFacetFactoryTest.java | 5 +- .../PropertyMethodsFacetFactoryTest.java | 4 +- ...dAnnotationOnPropertyFacetFactoryTest.java | 4 +- .../MandatoryAnnotationFacetFactoryTest.java | 4 +- ...ithSnapshotOnPropertyFacetFactoryTest.java | 4 +- ...eAnnotationOnPropertyFacetFactoryTest.java | 4 +- ...xAnnotationOnPropertyFacetFactoryTest.java | 4 +- ...ueSemanticsAnnotationFacetFactoryTest.java | 248 ++++++++++-------- 19 files changed, 180 insertions(+), 161 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java index a95a5ea7f90..c2a38b96a4f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java @@ -22,11 +22,9 @@ import org.junit.jupiter.api.BeforeEach; import org.apache.causeway.applib.Identifier; -import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.id.LogicalType; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; @Deprecated //TODO[CAUSEWAY-3409] use FacetFactoryTestAbstract scenarios instead public abstract class FacetFactoryTestAbstract2 @@ -68,27 +66,4 @@ protected void tearDownAll2() { facetedMethod = null; } - protected void processMethod( - final FacetFactory facetFactory, - final Class type, - final String methodName, - final Class[] signature) { - - facetFactory.process(ProcessMethodContext - .forTesting(type, null, - findMethod(type, methodName, signature), - methodRemover, facetedMethod)); - } - - protected void processParams( - final FacetFactory facetFactory, - final Class type, - final String methodName, - final Class[] signature) { - - facetFactory.processParams(FacetFactory.ProcessParameterContext - .forTesting(type, IntrospectionPolicy.ANNOTATION_OPTIONAL, - findMethod(type, methodName, signature), - null, facetedMethodParameter)); - } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java index 30f4be10618..d5f342e33d8 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java @@ -52,7 +52,8 @@ import lombok.val; -class ActionMethodsFacetFactoryTest extends FacetFactoryTestAbstract2 { +class ActionMethodsFacetFactoryTest +extends FacetFactoryTestAbstract2 { @BeforeEach public void setUp() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java index d6511e52d4c..f3c8d1d8827 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java @@ -29,10 +29,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.ignore.javalang.IteratorFilteringFacetFactory; -class IteratorFilteringFacetFactoryTest extends FacetFactoryTestAbstract2 { +class IteratorFilteringFacetFactoryTest +extends FacetFactoryTestAbstract { private IteratorFilteringFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java index 9d40bb75a45..a8c75196d63 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java @@ -69,7 +69,7 @@ public void setUp() { val specLoader = getSpecificationLoader(); voidSpec = specLoader.loadSpecification(void.class); stringSpec = specLoader.loadSpecification(java.lang.String.class); - customerSpec = specLoader.loadSpecification(Customer.class); + customerSpec = specLoader.loadSpecification(FacetFactoryTestAbstract2.Customer.class); } public void testActionInvocationFacetIsInstalledAndMethodRemoved() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java index 1570a0417d5..62edff458a6 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java @@ -47,7 +47,8 @@ import lombok.val; -class CollectionLayoutAnnotationFactoryTest extends FacetFactoryTestAbstract2 { +class CollectionLayoutAnnotationFactoryTest +extends FacetFactoryTestAbstract2 { @Test public void testCollectionLayoutAnnotation_named() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java index 38a04d5e1f6..850df9bac78 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java @@ -27,11 +27,11 @@ import org.apache.causeway.applib.annotation.DomainService; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacet; class DomainServiceFacetAnnotationFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private DomainServiceFacetAnnotationFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java index 70205b7d57d..3e7dde789aa 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java @@ -30,12 +30,12 @@ import org.apache.causeway.applib.annotation.DomainServiceLayout; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet; import org.apache.causeway.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacetFactory; class DomainServiceLayoutFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private DomainServiceLayoutFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java index 85520799b90..0b1ccba3037 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java @@ -27,13 +27,13 @@ import org.apache.causeway.applib.ViewModel; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacet; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetFactory; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetForViewModelInterface; class RecreatableObjectFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private ViewModelFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java index de17233c52e..7619c644cc5 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java @@ -30,12 +30,13 @@ import org.apache.causeway.applib.annotation.ParameterLayout; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet; import org.apache.causeway.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation; import org.apache.causeway.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory; -public class LabelAtFacetForParameterLayoutAnnotationFactoryTest extends FacetFactoryTestAbstract2 { +public class LabelAtFacetForParameterLayoutAnnotationFactoryTest +extends FacetFactoryTestAbstract { public void testParameterLayoutAnnotationPickedUp() { final ParameterLayoutFacetFactory facetFactory = new ParameterLayoutFacetFactory(getMetaModelContext()); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java index abc7ad4f321..091b402be40 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java @@ -29,7 +29,7 @@ import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.annotation.ParameterLayout; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet; import org.apache.causeway.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation; import org.apache.causeway.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory; @@ -37,7 +37,7 @@ import lombok.val; class NamedFacetForParameterLayoutAnnotationFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private static final String NAME = "an action"; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java index bf6490f123e..21c89c57b72 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java @@ -32,12 +32,13 @@ import org.apache.causeway.applib.annotation.Parameter; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetForParameterAnnotation; import org.apache.causeway.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByNullableAnnotationOnParameter; -class ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest extends FacetFactoryTestAbstract2 { +class ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest +extends FacetFactoryTestAbstract { private ParameterAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java index 76fc4869d14..9fed0f65cee 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java @@ -32,11 +32,12 @@ import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.regex.RegExFacet; import org.apache.causeway.core.metamodel.facets.param.parameter.regex.RegExFacetForPatternAnnotationOnParameter; -class RegExAnnotationOnParameterFacetFactoryTest extends FacetFactoryTestAbstract2 { +class RegExAnnotationOnParameterFacetFactoryTest +extends FacetFactoryTestAbstract { private ParameterAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java index 0b8e1e5cccd..b336f664cae 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java @@ -28,7 +28,7 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethod; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethodFactory; @@ -62,7 +62,7 @@ import lombok.val; class PropertyMethodsFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { public void testPropertyAccessorFacetIsInstalledAndMethodRemoved() { val facetFactory = new PropertyAccessorFacetViaAccessorFactory(getMetaModelContext()); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java index c27382027fc..0b9e4ce6ff7 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java @@ -33,14 +33,14 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacetAbstract; import lombok.val; class DisabledAnnotationOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java index b31058b9f2b..98ced00590f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java @@ -30,14 +30,14 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import lombok.val; class MandatoryAnnotationFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java index 210540cb007..a9a3675b9c4 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java @@ -30,14 +30,14 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet; import org.apache.causeway.core.metamodel.facets.properties.property.snapshot.SnapshotExcludeFacetForPropertyAnnotation; import lombok.val; class PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java index 84c1a967c90..30fa2d47d8a 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java @@ -32,7 +32,7 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByNullableAnnotationOnProperty; @@ -40,7 +40,7 @@ import lombok.val; class PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java index 4590cac224f..ae863732f21 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java @@ -33,14 +33,14 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.regex.RegExFacet; import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPatternAnnotationOnProperty; import lombok.val; class RegExAnnotationOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java index 324a9750292..ea58eb21cde 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java @@ -29,9 +29,8 @@ import org.apache.causeway.applib.annotation.TimeZoneTranslation; import org.apache.causeway.applib.annotation.ValueSemantics; -import org.apache.causeway.commons.internal._Constants; import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.objectvalue.daterenderedadjust.DateRenderAdjustFacet; import org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacet; @@ -44,7 +43,7 @@ @SuppressWarnings("unused") class ValueSemanticsAnnotationFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { // -- MAX TOTAL DIGITS @@ -54,13 +53,15 @@ class Order { @ValueSemantics(maxTotalDigits = 5) public BigDecimal getCost() { return null; } } - // when - processMethod(newFacetFactory(), Order.class, "getCost", _Constants.emptyClasses); - // then - assertMaxTotalDigits(facetedMethod, 5); - assertDefaultMinIntegerDigits(facetedMethod); - assertDefaultMaxFractionalDigits(facetedMethod); - assertDefaultMinFractionalDigits(facetedMethod); + propertyScenario(Order.class, "cost", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertMaxTotalDigits(facetedMethod, 5); + assertDefaultMinIntegerDigits(facetedMethod); + assertDefaultMaxFractionalDigits(facetedMethod); + assertDefaultMinFractionalDigits(facetedMethod); + }); } public void testMaxTotalPickedUpOnActionParameter() { @@ -70,13 +71,15 @@ public void updateCost( @ValueSemantics(maxTotalDigits = 5) final BigDecimal cost) { } } - // when - processParams(newFacetFactory(), Order.class, "updateCost", new Class[] { BigDecimal.class }); - // then - assertMaxTotalDigits(facetedMethodParameter, 5); - assertDefaultMinIntegerDigits(facetedMethodParameter); - assertDefaultMaxFractionalDigits(facetedMethodParameter); - assertDefaultMinFractionalDigits(facetedMethodParameter); + parameterScenario(Order.class, "updateCost", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().processParams(processParameterContext); + // then + assertMaxTotalDigits(facetedMethodParameter, 5); + assertDefaultMinIntegerDigits(facetedMethodParameter); + assertDefaultMaxFractionalDigits(facetedMethodParameter); + assertDefaultMinFractionalDigits(facetedMethodParameter); + }); } // -- MIN INTEGER DIGITS @@ -87,13 +90,15 @@ class Order { @ValueSemantics(minIntegerDigits = 5) public BigDecimal getCost() { return null; } } - // when - processMethod(newFacetFactory(), Order.class, "getCost", _Constants.emptyClasses); - // then - assertDefaultMaxTotalDigits(facetedMethod); - assertMinIntegerDigits(facetedMethod, 5); - assertDefaultMaxFractionalDigits(facetedMethod); - assertDefaultMinFractionalDigits(facetedMethod); + propertyScenario(Order.class, "cost", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertDefaultMaxTotalDigits(facetedMethod); + assertMinIntegerDigits(facetedMethod, 5); + assertDefaultMaxFractionalDigits(facetedMethod); + assertDefaultMinFractionalDigits(facetedMethod); + }); } public void testMinIntegerPickedUpOnActionParameter() { @@ -103,13 +108,15 @@ public void updateCost( @ValueSemantics(minIntegerDigits = 5) final BigDecimal cost) { } } - // when - processParams(newFacetFactory(), Order.class, "updateCost", new Class[] { BigDecimal.class }); - // then - assertDefaultMaxTotalDigits(facetedMethodParameter); - assertMinIntegerDigits(facetedMethodParameter, 5); - assertDefaultMaxFractionalDigits(facetedMethodParameter); - assertDefaultMinFractionalDigits(facetedMethodParameter); + parameterScenario(Order.class, "updateCost", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().processParams(processParameterContext); + // then + assertDefaultMaxTotalDigits(facetedMethodParameter); + assertMinIntegerDigits(facetedMethodParameter, 5); + assertDefaultMaxFractionalDigits(facetedMethodParameter); + assertDefaultMinFractionalDigits(facetedMethodParameter); + }); } // -- MAX FRACTIONAL DIGITS @@ -120,13 +127,15 @@ class Order { @ValueSemantics(maxFractionalDigits = 5) public BigDecimal getCost() { return null; } } - // when - processMethod(newFacetFactory(), Order.class, "getCost", _Constants.emptyClasses); - // then - assertDefaultMaxTotalDigits(facetedMethod); - assertDefaultMinIntegerDigits(facetedMethod); - assertMaxFractionalDigits(facetedMethod, 5); - assertDefaultMinFractionalDigits(facetedMethod); + propertyScenario(Order.class, "cost", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertDefaultMaxTotalDigits(facetedMethod); + assertDefaultMinIntegerDigits(facetedMethod); + assertMaxFractionalDigits(facetedMethod, 5); + assertDefaultMinFractionalDigits(facetedMethod); + }); } public void testMaxFracionalPickedUpOnActionParameter() { @@ -136,13 +145,15 @@ public void updateCost( @ValueSemantics(maxFractionalDigits = 5) final BigDecimal cost) { } } - // when - processParams(newFacetFactory(), Order.class, "updateCost", new Class[] { BigDecimal.class }); - // then - assertDefaultMaxTotalDigits(facetedMethodParameter); - assertDefaultMinIntegerDigits(facetedMethodParameter); - assertMaxFractionalDigits(facetedMethodParameter, 5); - assertDefaultMinFractionalDigits(facetedMethodParameter); + parameterScenario(Order.class, "updateCost", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().processParams(processParameterContext); + // then + assertDefaultMaxTotalDigits(facetedMethodParameter); + assertDefaultMinIntegerDigits(facetedMethodParameter); + assertMaxFractionalDigits(facetedMethodParameter, 5); + assertDefaultMinFractionalDigits(facetedMethodParameter); + }); } // -- MIN FRACTIONAL DIGITS @@ -153,13 +164,15 @@ class Order { @ValueSemantics(minFractionalDigits = 5) public BigDecimal getCost() { return null; } } - // when - processMethod(newFacetFactory(), Order.class, "getCost", _Constants.emptyClasses); - // then - assertDefaultMaxTotalDigits(facetedMethod); - assertDefaultMinIntegerDigits(facetedMethod); - assertDefaultMaxFractionalDigits(facetedMethod); - assertMinFractionalDigits(facetedMethod, 5); + propertyScenario(Order.class, "cost", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertDefaultMaxTotalDigits(facetedMethod); + assertDefaultMinIntegerDigits(facetedMethod); + assertDefaultMaxFractionalDigits(facetedMethod); + assertMinFractionalDigits(facetedMethod, 5); + }); } public void testMinFracionalPickedUpOnActionParameter() { @@ -169,13 +182,15 @@ public void updateCost( @ValueSemantics(minFractionalDigits = 5) final BigDecimal cost) { } } - // when - processParams(newFacetFactory(), Order.class, "updateCost", new Class[] { BigDecimal.class }); - // then - assertDefaultMaxTotalDigits(facetedMethodParameter); - assertDefaultMinIntegerDigits(facetedMethodParameter); - assertDefaultMaxFractionalDigits(facetedMethodParameter); - assertMinFractionalDigits(facetedMethodParameter, 5); + parameterScenario(Order.class, "updateCost", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().processParams(processParameterContext); + // then + assertDefaultMaxTotalDigits(facetedMethodParameter); + assertDefaultMinIntegerDigits(facetedMethodParameter); + assertDefaultMaxFractionalDigits(facetedMethodParameter); + assertMinFractionalDigits(facetedMethodParameter, 5); + }); } // -- DIGITS ANNOTATION @@ -186,10 +201,12 @@ class Order { @javax.validation.constraints.Digits(integer=14, fraction=4) public BigDecimal getCost() { return null; } } - // when - processMethod(newFacetFactory(), Order.class, "getCost", _Constants.emptyClasses); - // then - assertDigitsFacets(facetedMethod, 18, 4); + propertyScenario(Order.class, "cost", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertDigitsFacets(facetedMethod, 18, 4); + }); } public void testDigitsAnnotationPickedUpOnActionParameter() { @@ -199,10 +216,12 @@ public void updateCost( @javax.validation.constraints.Digits(integer=14, fraction=4) final BigDecimal cost) { } } - // when - processParams(newFacetFactory(), Order.class, "updateCost", new Class[] { BigDecimal.class }); - // then - assertDigitsFacets(facetedMethodParameter, 18, 4); + parameterScenario(Order.class, "updateCost", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().processParams(processParameterContext); + // then + assertDigitsFacets(facetedMethodParameter, 18, 4); + }); } // -- CONSTRAINT MERGERS @@ -229,25 +248,34 @@ class Order { } - // when - processMethod(newFacetFactory(), Order.class, "maxTotalA", _Constants.emptyClasses); - // then - lowest bound wins - assertMaxTotalDigits(facetedMethod, 18); - // when - processMethod(newFacetFactory(), Order.class, "maxTotalB", _Constants.emptyClasses); - // then - lowest bound wins - assertMaxTotalDigits(facetedMethod, 17); - - // when - processMethod(newFacetFactory(), Order.class, "maxFracA", _Constants.emptyClasses); - // then - lowest bound wins - assertMaxFractionalDigits(facetedMethod, 4); - - // when - processMethod(newFacetFactory(), Order.class, "maxFracB", _Constants.emptyClasses); - // then - lowest bound wins - assertMaxFractionalDigits(facetedMethod, 4); + actionScenario(Order.class, "maxTotalA", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then - lowest bound wins + assertMaxTotalDigits(facetedMethod, 18); + }); + + actionScenario(Order.class, "maxTotalB", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then - lowest bound wins + assertMaxTotalDigits(facetedMethod, 17); + }); + + actionScenario(Order.class, "maxFracA", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then - lowest bound wins + assertMaxFractionalDigits(facetedMethod, 4); + }); + + actionScenario(Order.class, "maxFracB", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then - lowest bound wins + assertMaxFractionalDigits(facetedMethod, 4); + }); } // -- TEMPORAL FORMAT STYLE @@ -258,10 +286,12 @@ class Order { @ValueSemantics(dateRenderAdjustDays = ValueSemantics.AS_DAY_BEFORE) public LocalDateTime getDateTime() { return null; } } - // when - processMethod(newFacetFactory(), Order.class, "getDateTime", _Constants.emptyClasses); - // then - assertDateRenderAdjustDays(facetedMethod, -1); + propertyScenario(Order.class, "dateTime", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertDateRenderAdjustDays(facetedMethod, -1); + }); } public void testTimeZoneTranslationPickedUpOnProperty() { @@ -274,15 +304,18 @@ class Order { public LocalDateTime getDateTimeB() { return null; } } - // when - processMethod(newFacetFactory(), Order.class, "getDateTimeA", _Constants.emptyClasses); - // then - assertTimeZoneTranslation(facetedMethod, TimeZoneTranslation.NONE); - - // when - processMethod(newFacetFactory(), Order.class, "getDateTimeB", _Constants.emptyClasses); - // then - assertTimeZoneTranslation(facetedMethod, TimeZoneTranslation.TO_LOCAL_TIMEZONE); + propertyScenario(Order.class, "dateTimeA", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertTimeZoneTranslation(facetedMethod, TimeZoneTranslation.NONE); + }); + propertyScenario(Order.class, "dateTimeB", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertTimeZoneTranslation(facetedMethod, TimeZoneTranslation.TO_LOCAL_TIMEZONE); + }); } public void testDateFormatStylePickedUpOnProperty() { @@ -292,9 +325,12 @@ class Order { public LocalDateTime getDateTime() { return null; } } // when - processMethod(newFacetFactory(), Order.class, "getDateTime", _Constants.emptyClasses); - // then - assertDateFormatStyle(facetedMethod, FormatStyle.FULL); + propertyScenario(Order.class, "dateTime", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertDateFormatStyle(facetedMethod, FormatStyle.FULL); + }); } public void testTimeFormatStylePickedUpOnProperty() { @@ -303,10 +339,12 @@ class Order { @ValueSemantics(timeFormatStyle = FormatStyle.FULL) public LocalDateTime getDateTime() { return null; } } - // when - processMethod(newFacetFactory(), Order.class, "getDateTime", _Constants.emptyClasses); - // then - assertTimeFormatStyle(facetedMethod, FormatStyle.FULL); + propertyScenario(Order.class, "dateTime", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + // when + newFacetFactory().process(processMethodContext); + // then + assertTimeFormatStyle(facetedMethod, FormatStyle.FULL); + }); } // -- HELPER From 06262e5b8ee28c94f908b3992b47c23927343daf Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 15:11:54 +0200 Subject: [PATCH 18/37] CAUSEWAY-3409: resurrecting ActionMethodsFacetFactoryTest --- .../facets/FacetFactoryTestAbstract.java | 17 ++- .../ActionMethodsFacetFactoryTest.java | 144 +++++++----------- .../IteratorFilteringFacetFactoryTest.java | 38 +++-- ...tionFacetFactoryTest_ActionInvocation.java | 105 ++++++------- ...mainServiceFacetAnnotationFactoryTest.java | 20 +-- .../DomainServiceLayoutFacetFactoryTest.java | 101 ++++++------ .../RecreatableObjectFacetFactoryTest.java | 13 +- ...rParameterLayoutAnnotationFactoryTest.java | 34 ++--- ...rParameterLayoutAnnotationFactoryTest.java | 27 ++-- ...AnnotationOnParameterFacetFactoryTest.java | 4 +- ...AnnotationOnParameterFacetFactoryTest.java | 4 +- .../PropertyMethodsFacetFactoryTest.java | 8 +- ...dAnnotationOnPropertyFacetFactoryTest.java | 4 +- .../MandatoryAnnotationFacetFactoryTest.java | 4 +- ...ithSnapshotOnPropertyFacetFactoryTest.java | 4 +- ...eAnnotationOnPropertyFacetFactoryTest.java | 4 +- ...xAnnotationOnPropertyFacetFactoryTest.java | 21 ++- 17 files changed, 260 insertions(+), 292 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index 2811ad29d9f..6278d675ba8 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -26,6 +26,8 @@ import org.junit.jupiter.api.BeforeEach; import org.mockito.Mockito; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.Identifier; @@ -170,7 +172,7 @@ protected void actionScenario( final Class declaringClass, final String actionName, final MemberScenarioConsumer consumer) { val scenario = Scenario.act(getMetaModelContext(), declaringClass, actionName); val processMethodContext = ProcessMethodContext - .forTesting(declaringClass, null, scenario.annotatedMethod(), methodRemover, scenario.facetedMethod()); + .forTesting(declaringClass, FeatureType.ACTION, scenario.annotatedMethod(), methodRemover, scenario.facetedMethod()); consumer.accept(processMethodContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); } @@ -251,4 +253,17 @@ protected final void assertMethodWasRemoved(final Method method) { assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(method)); } + public void assertMethodEquals(final Method a, final Method b) { + assertEquals(a.getName(), b.getName()); + assertEquals(a.getParameterCount(), b.getParameterCount()); + assertArrayEquals(a.getParameterTypes(), b.getParameterTypes()); + + val ownerA = a.getDeclaringClass(); + val ownerB = b.getDeclaringClass(); + + assertTrue(ownerA.isAssignableFrom(ownerB) + || ownerB.isAssignableFrom(ownerA)); + + } + } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java index d5f342e33d8..24851651dfe 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java @@ -24,9 +24,8 @@ import java.util.List; import java.util.Set; -import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -34,7 +33,7 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.validate.ActionValidationFacet; import org.apache.causeway.core.metamodel.facets.actions.validate.method.ActionValidationFacetViaMethod; @@ -48,92 +47,76 @@ import org.apache.causeway.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet; import org.apache.causeway.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod; import org.apache.causeway.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethodFactory; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import lombok.val; class ActionMethodsFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { - @BeforeEach - public void setUp() { - val specLoader = getMetaModelContext().getSpecificationLoader(); - ObjectSpecification voidSpec = specLoader.loadSpecification(void.class); - } - - public void testInstallsValidateMethodNoArgsFacetAndRemovesMethod() { + @Test + void installsValidateMethodNoArgsFacetAndRemovesMethod() { val facetFactory = new ActionValidationFacetViaMethodFactory(getMetaModelContext()); @SuppressWarnings("unused") class Customer { - - public void someAction() { - } - - public String validateSomeAction() { - return null; - } + public void someAction() {} + public String validateSomeAction() { return null;} } - final Method actionMethod = findMethod(Customer.class, "someAction"); + final Method validateMethod = findMethod(Customer.class, "validateSomeAction"); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.ACTION, actionMethod, methodRemover, facetedMethod)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.process(processMethodContext); + + //then + final Facet facet = facetedMethod.getFacet(ActionValidationFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ActionValidationFacetViaMethod); + val actionValidationFacetViaMethod = (ActionValidationFacetViaMethod) facet; + assertMethodEquals(validateMethod, actionValidationFacetViaMethod.getMethods().getFirstElseFail().asMethodElseFail()); - final Facet facet = facetedMethod.getFacet(ActionValidationFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ActionValidationFacetViaMethod); - final ActionValidationFacetViaMethod actionValidationFacetViaMethod = (ActionValidationFacetViaMethod) facet; - assertEquals(validateMethod, actionValidationFacetViaMethod.getMethods().getFirstElseFail()); + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(validateMethod)); + }); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(validateMethod)); } - public void testInstallsValidateMethodSomeArgsFacetAndRemovesMethod() { + @Test + void installsValidateMethodSomeArgsFacetAndRemovesMethod() { val facetFactory = new ActionValidationFacetViaMethodFactory(getMetaModelContext()); + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction(final int x, final int y) { - } - - @SuppressWarnings("unused") - public String validateSomeAction(final int x, final int y) { - return null; - } + public void someAction(final int x, final int y) {} + public String validateSomeAction(final int x, final int y) { return null;} } - final Method actionMethod = findMethod(Customer.class, "someAction", new Class[] { int.class, int.class }); + final Method validateMethod = findMethod(Customer.class, "validateSomeAction", new Class[] { int.class, int.class }); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.ACTION, actionMethod, methodRemover, facetedMethod)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.process(processMethodContext); - final Facet facet = facetedMethod.getFacet(ActionValidationFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ActionValidationFacetViaMethod); - final ActionValidationFacetViaMethod actionValidationFacetViaMethod = (ActionValidationFacetViaMethod) facet; - assertEquals(validateMethod, actionValidationFacetViaMethod.getMethods().getFirstElseFail()); + //then + final Facet facet = facetedMethod.getFacet(ActionValidationFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ActionValidationFacetViaMethod); + val actionValidationFacetViaMethod = (ActionValidationFacetViaMethod) facet; + assertMethodEquals(validateMethod, actionValidationFacetViaMethod.getMethods().getFirstElseFail().asMethodElseFail()); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(validateMethod)); + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(validateMethod)); + }); } - public void testInstallsParameterDefaultsMethodAndRemovesMethod() { + @Test + void installsParameterDefaultsMethodAndRemovesMethod() { val facetFactory = new ActionParameterDefaultsFacetViaMethodFactory(getMetaModelContext()); + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction(final int x, final long y) { - } - - @SuppressWarnings("unused") - public int default0SomeAction() { - return 0; - } - - @SuppressWarnings("unused") - public long default1SomeAction() { - return 0; - } + public void someAction(final int x, final long y) {} + public int default0SomeAction() { return 0; } + public long default1SomeAction() { return 0; } } final Method actionMethod = findMethod(Customer.class, "someAction", new Class[] { int.class, long.class }); @@ -150,7 +133,7 @@ public long default1SomeAction() { assertNotNull(facet0); assertTrue(facet0 instanceof ActionParameterDefaultsFacetViaMethod); final ActionParameterDefaultsFacetViaMethod actionDefaultFacetViaMethod0 = (ActionParameterDefaultsFacetViaMethod) facet0; - assertEquals(default0Method, actionDefaultFacetViaMethod0.getMethods().getFirstElseFail()); + assertMethodEquals(default0Method, actionDefaultFacetViaMethod0.getMethods().getFirstElseFail().asMethodElseFail()); assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(default0Method)); @@ -158,34 +141,23 @@ public long default1SomeAction() { assertNotNull(facet1); assertTrue(facet1 instanceof ActionParameterDefaultsFacetViaMethod); final ActionParameterDefaultsFacetViaMethod actionDefaultFacetViaMethod1 = (ActionParameterDefaultsFacetViaMethod) facet1; - assertEquals(default1Method, actionDefaultFacetViaMethod1.getMethods().getFirstElseFail()); + assertMethodEquals(default1Method, actionDefaultFacetViaMethod1.getMethods().getFirstElseFail().asMethodElseFail()); assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(default1Method)); } - public void testInstallsParameterChoicesMethodAndRemovesMethod() { + @Test + void installsParameterChoicesMethodAndRemovesMethod() { val facetFactory = new ActionParameterChoicesFacetViaMethodFactory(getMetaModelContext()); + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction(final int x, final long y, final long z) { - } - - @SuppressWarnings("unused") - public Collection choices0SomeAction() { - return Collections.emptyList(); - } - - @SuppressWarnings("unused") - public List choices1SomeAction() { - return Collections.emptyList(); - } - @SuppressWarnings("unused") - public Set choices2SomeAction() { - return Collections.emptySet(); - } + public void someAction(final int x, final long y, final long z) {} + public Collection choices0SomeAction() { return Collections.emptyList(); } + public List choices1SomeAction() { return Collections.emptyList(); } + public Set choices2SomeAction() { return Collections.emptySet(); } } final Method actionMethod = findMethod(Customer.class, "someAction", new Class[] { int.class, long.class, long.class }); @@ -203,7 +175,7 @@ public Set choices2SomeAction() { assertNotNull(facet0); assertTrue(facet0 instanceof ActionParameterChoicesFacetViaMethod); final ActionParameterChoicesFacetViaMethod actionChoicesFacetViaMethod0 = (ActionParameterChoicesFacetViaMethod) facet0; - assertEquals(choices0Method, actionChoicesFacetViaMethod0.getMethods().getFirstElseFail()); + assertMethodEquals(choices0Method, actionChoicesFacetViaMethod0.getMethods().getFirstElseFail().asMethodElseFail()); assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(choices0Method)); @@ -211,7 +183,7 @@ public Set choices2SomeAction() { assertNotNull(facet1); assertTrue(facet1 instanceof ActionParameterChoicesFacetViaMethod); final ActionParameterChoicesFacetViaMethod actionChoicesFacetViaMethod1 = (ActionParameterChoicesFacetViaMethod) facet1; - assertEquals(choices1Method, actionChoicesFacetViaMethod1.getMethods().getFirstElseFail()); + assertMethodEquals(choices1Method, actionChoicesFacetViaMethod1.getMethods().getFirstElseFail().asMethodElseFail()); assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(choices1Method)); @@ -219,14 +191,15 @@ public Set choices2SomeAction() { assertNotNull(facet2); assertTrue(facet2 instanceof ActionParameterChoicesFacetViaMethod); final ActionParameterChoicesFacetViaMethod actionChoicesFacetViaMethod2 = (ActionParameterChoicesFacetViaMethod) facet2; - assertEquals(choices2Method, actionChoicesFacetViaMethod2.getMethods().getFirstElseFail()); + assertMethodEquals(choices2Method, actionChoicesFacetViaMethod2.getMethods().getFirstElseFail().asMethodElseFail()); assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(choices2Method)); } - public void testInstallsParameterAutoCompleteMethodAndRemovesMethod() { + @Test + void installsParameterAutoCompleteMethodAndRemovesMethod() { val facetFactory = new ActionParameterAutoCompleteFacetViaMethodFactory(getMetaModelContext()); class Customer { @@ -253,10 +226,9 @@ public List autoComplete0SomeAction(final String searchArg) { assertNotNull(facet0); assertTrue(facet0 instanceof ActionParameterAutoCompleteFacetViaMethod); final ActionParameterAutoCompleteFacetViaMethod actionAutoCompleteFacetViaMethod0 = (ActionParameterAutoCompleteFacetViaMethod) facet0; - assertEquals(autoComplete0Method, actionAutoCompleteFacetViaMethod0.getMethods().getFirstElseFail()); + assertMethodEquals(autoComplete0Method, actionAutoCompleteFacetViaMethod0.getMethods().getFirstElseFail().asMethodElseFail()); assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(autoComplete0Method)); } - } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java index f3c8d1d8827..153d5d72f69 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java @@ -23,12 +23,13 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.ignore.javalang.IteratorFilteringFacetFactory; @@ -47,42 +48,39 @@ protected void tearDown() { facetFactory = null; } - public void testRequestsRemoverToRemoveIteratorMethods() { + @Test + void testRequestsRemoverToRemoveIteratorMethods() { class Customer { @SuppressWarnings("unused") - public void someAction() { - } + public void someAction() {} } - facetFactory.process(ProcessClassContext - .forTesting(Customer.class, methodRemover, facetedMethod)); - - assertEquals(1, methodRemover.getRemoveMethodArgsCalls().size()); + objectScenario(Customer.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + assertEquals(1, methodRemover.getRemoveMethodArgsCalls().size()); + }); } - public void testNoIteratorMethodFiltered() { + @Test + void testNoIteratorMethodFiltered() { class Customer { @SuppressWarnings("unused") - public void someAction() { - } + public void someAction() {} } final Method actionMethod = findMethod(Customer.class, "someAction"); - assertFalse(facetFactory.recognizes(actionMethod)); } - public void xxxtestIterableIteratorMethodFiltered() { + @Test @Disabled("seems iterator() is not recognized") + void testIterableIteratorMethodFiltered() { class Customer implements Iterable { @SuppressWarnings("unused") - public void someAction() { - } - + public void someAction() {} @Override - public Iterator iterator() { - return null; - } + public Iterator iterator() { return null; } } final Method iteratorMethod = findMethod(Customer.class, "iterator"); - assertTrue(facetFactory.recognizes(iteratorMethod)); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java index a8c75196d63..71184a45157 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java @@ -31,7 +31,7 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet; import org.apache.causeway.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEvent; @@ -47,11 +47,10 @@ @SuppressWarnings("unused") class ActionAnnotationFacetFactoryTest_ActionInvocation -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private ObjectSpecification voidSpec; private ObjectSpecification stringSpec; - private ObjectSpecification customerSpec; private ActionAnnotationFacetFactory facetFactory; private void processInvocation( @@ -69,60 +68,60 @@ public void setUp() { val specLoader = getSpecificationLoader(); voidSpec = specLoader.loadSpecification(void.class); stringSpec = specLoader.loadSpecification(java.lang.String.class); - customerSpec = specLoader.loadSpecification(FacetFactoryTestAbstract2.Customer.class); } public void testActionInvocationFacetIsInstalledAndMethodRemoved() { class Customer { - public void someAction() { - } + public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); - - processInvocation(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); - final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ActionInvocationFacetForDomainEvent); - final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEvent) facet; - assertEquals(actionMethod, actionInvocationFacetViaMethod.getMethods().getFirstElseFail()); + final Method actionMethod = findMethod(Customer.class, "someAction"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(actionMethod)); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + processInvocation(facetFactory, processMethodContext); + + //then + final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ActionInvocationFacetForDomainEvent); + final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEvent) facet; + assertEquals(actionMethod, actionInvocationFacetViaMethod.getMethods().getFirstElseFail()); + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(actionMethod)); + }); } public void testActionReturnTypeWhenVoid() { class Customer { - public void someAction() { - } + public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); - processInvocation(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); - final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEvent) facet; - assertEquals(voidSpec, actionInvocationFacetViaMethod.getReturnType()); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + processInvocation(facetFactory, processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); + final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEvent) facet; + assertEquals(voidSpec, actionInvocationFacetViaMethod.getReturnType()); + }); } public void testActionReturnTypeWhenNotVoid() { class Customer { - public String someAction() { - return null; - } + public String someAction() { return null; } } - final Method actionMethod = findMethod(Customer.class, "someAction"); - - processInvocation(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); - final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); - final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEvent) facet; - assertEquals(stringSpec, actionInvocationFacetViaMethod.getReturnType()); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + processInvocation(facetFactory, processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); + final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = (ActionInvocationFacetForDomainEvent) facet; + assertEquals(stringSpec, actionInvocationFacetViaMethod.getReturnType()); + }); } public void testActionOnType() { @@ -135,17 +134,17 @@ public String someAction() { val customerSpec = getSpecificationLoader().loadSpecification(LocalCustomer.class); - final Method actionMethod = findMethod(LocalCustomer.class, "someAction"); - - processInvocation(facetFactory, ProcessMethodContext - .forTesting(LocalCustomer.class, null, actionMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); - final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = - (ActionInvocationFacetForDomainEvent) facet; - assertEquals( - customerSpec, - actionInvocationFacetViaMethod.getDeclaringType()); + actionScenario(LocalCustomer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + processInvocation(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(ActionInvocationFacet.class); + final ActionInvocationFacetForDomainEvent actionInvocationFacetViaMethod = + (ActionInvocationFacetForDomainEvent) facet; + assertEquals( + customerSpec, + actionInvocationFacetViaMethod.getDeclaringType()); + }); } public void testActionsPickedUpFromSuperclass() { @@ -176,14 +175,8 @@ public void testActionsPickedUpFromSuperclassButHelpersFromSubClass() { val facetFactoryForDisable = new DisableForContextFacetViaMethodFactory(getMetaModelContext()); class Customer { - - public void someAction(final int x, final long y) { - } - - - public int[] choices0SomeAction() { - return new int[0]; - } + public void someAction(final int x, final long y) { } + public int[] choices0SomeAction() { return new int[0]; } } class CustomerEx extends Customer { @@ -191,13 +184,9 @@ class CustomerEx extends Customer { public int[] choices0SomeAction() { return new int[0]; } - - public long[] choices1SomeAction() { return new long[0]; } - - public String disableSomeAction() { return null; } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java index 850df9bac78..77a3103d9ac 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactoryTest.java @@ -26,7 +26,6 @@ import org.apache.causeway.applib.annotation.DomainService; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.domainservice.DomainServiceFacet; @@ -51,16 +50,19 @@ public void testAggregatedAnnotationPickedUpOnClass() { class Customers { } - facetFactory.process(ProcessClassContext - .forTesting(Customers.class, methodRemover, facetHolder)); + objectScenario(Customers.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + final Facet facet = facetHolder.getFacet(DomainServiceFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof DomainServiceFacetForAnnotation); + DomainServiceFacetForAnnotation domainServiceFacet = (DomainServiceFacetForAnnotation) facet; + assertNotNull(domainServiceFacet); - final Facet facet = facetHolder.getFacet(DomainServiceFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof DomainServiceFacetForAnnotation); - DomainServiceFacetForAnnotation domainServiceFacet = (DomainServiceFacetForAnnotation) facet; - assertNotNull(domainServiceFacet); + assertNoMethodsRemoved(); + }); - assertNoMethodsRemoved(); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java index 3e7dde789aa..8a391159820 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainservicelayout/annotation/DomainServiceLayoutFacetFactoryTest.java @@ -29,7 +29,6 @@ import org.apache.causeway.applib.annotation.DomainService; import org.apache.causeway.applib.annotation.DomainServiceLayout; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet; import org.apache.causeway.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacetFactory; @@ -49,79 +48,87 @@ protected void tearDown() { facetFactory = null; } - public void testAnnotationPickedUpOnClass() { + void testAnnotationPickedUpOnClass() { @DomainService @DomainServiceLayout(menuBar = DomainServiceLayout.MenuBar.SECONDARY) class Customers { } - facetFactory.process(ProcessClassContext - .forTesting(Customers.class, methodRemover, facetHolder)); - - final Facet facet = facetHolder.getFacet(DomainServiceLayoutFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof DomainServiceLayoutFacetAnnotation); - DomainServiceLayoutFacetAnnotation domainServiceLayoutFacet = (DomainServiceLayoutFacetAnnotation) facet; - //assertThat(domainServiceLayoutFacet.getMenuOrder(), is("123")); - assertThat(domainServiceLayoutFacet.getMenuBar(), is(DomainServiceLayout.MenuBar.SECONDARY)); - - assertNoMethodsRemoved(); + objectScenario(Customers.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + final Facet facet = facetHolder.getFacet(DomainServiceLayoutFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof DomainServiceLayoutFacetAnnotation); + DomainServiceLayoutFacetAnnotation domainServiceLayoutFacet = (DomainServiceLayoutFacetAnnotation) facet; + //assertThat(domainServiceLayoutFacet.getMenuOrder(), is("123")); + assertThat(domainServiceLayoutFacet.getMenuBar(), is(DomainServiceLayout.MenuBar.SECONDARY)); + + assertNoMethodsRemoved(); + }); } - - public void testDomainServiceAnnotationPickedUpOnClass() { + void testDomainServiceAnnotationPickedUpOnClass() { @DomainService class Customers { } - facetFactory.process(ProcessClassContext - .forTesting(Customers.class, methodRemover, facetHolder)); - - final Facet facet = facetHolder.getFacet(DomainServiceLayoutFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof DomainServiceLayoutFacetAnnotation); - DomainServiceLayoutFacetAnnotation domainServiceLayoutFacet = (DomainServiceLayoutFacetAnnotation) facet; - assertNotNull(domainServiceLayoutFacet); - - assertNoMethodsRemoved(); + objectScenario(Customers.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + final Facet facet = facetHolder.getFacet(DomainServiceLayoutFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof DomainServiceLayoutFacetAnnotation); + DomainServiceLayoutFacetAnnotation domainServiceLayoutFacet = (DomainServiceLayoutFacetAnnotation) facet; + assertNotNull(domainServiceLayoutFacet); + + assertNoMethodsRemoved(); + }); } - public void testDomainServiceAndDomainServiceLayoutAnnotationWhenCompatiblePickedUpOnClass() { + void testDomainServiceAndDomainServiceLayoutAnnotationWhenCompatiblePickedUpOnClass() { @DomainService//(menuOrder = "123") @DomainServiceLayout(menuBar = DomainServiceLayout.MenuBar.SECONDARY) class Customers { } - facetFactory.process(ProcessClassContext - .forTesting(Customers.class, methodRemover, facetHolder)); - - final Facet facet = facetHolder.getFacet(DomainServiceLayoutFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof DomainServiceLayoutFacetAnnotation); - DomainServiceLayoutFacetAnnotation domainServiceLayoutFacet = (DomainServiceLayoutFacetAnnotation) facet; - //assertThat(domainServiceLayoutFacet.getMenuOrder(), is("123")); - assertThat(domainServiceLayoutFacet.getMenuBar(), is(DomainServiceLayout.MenuBar.SECONDARY)); - - assertNoMethodsRemoved(); + objectScenario(Customers.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + final Facet facet = facetHolder.getFacet(DomainServiceLayoutFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof DomainServiceLayoutFacetAnnotation); + DomainServiceLayoutFacetAnnotation domainServiceLayoutFacet = (DomainServiceLayoutFacetAnnotation) facet; + //assertThat(domainServiceLayoutFacet.getMenuOrder(), is("123")); + assertThat(domainServiceLayoutFacet.getMenuBar(), is(DomainServiceLayout.MenuBar.SECONDARY)); + + assertNoMethodsRemoved(); + }); } - public void testDomainServiceAndDomainServiceLayoutAnnotation_takes_the_minimum() { + void testDomainServiceAndDomainServiceLayoutAnnotation_takes_the_minimum() { @DomainService//(menuOrder = "1") @DomainServiceLayout(menuBar = DomainServiceLayout.MenuBar.SECONDARY) class Customers { } - facetFactory.process(ProcessClassContext - .forTesting(Customers.class, methodRemover, facetHolder)); + objectScenario(Customers.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + final Facet facet = facetHolder.getFacet(DomainServiceLayoutFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof DomainServiceLayoutFacetAnnotation); + DomainServiceLayoutFacetAnnotation domainServiceLayoutFacet = (DomainServiceLayoutFacetAnnotation) facet; + //assertThat(domainServiceLayoutFacet.getMenuOrder(), is("1")); + assertThat(domainServiceLayoutFacet.getMenuBar(), is(DomainServiceLayout.MenuBar.SECONDARY)); - final Facet facet = facetHolder.getFacet(DomainServiceLayoutFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof DomainServiceLayoutFacetAnnotation); - DomainServiceLayoutFacetAnnotation domainServiceLayoutFacet = (DomainServiceLayoutFacetAnnotation) facet; - //assertThat(domainServiceLayoutFacet.getMenuOrder(), is("1")); - assertThat(domainServiceLayoutFacet.getMenuBar(), is(DomainServiceLayout.MenuBar.SECONDARY)); + assertNoMethodsRemoved(); + }); - assertNoMethodsRemoved(); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java index 0b1ccba3037..63f3d927fb7 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java @@ -27,13 +27,13 @@ import org.apache.causeway.applib.ViewModel; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacet; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetFactory; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetForViewModelInterface; class RecreatableObjectFacetFactoryTest -extends FacetFactoryTestAbstract { +extends FacetFactoryTestAbstract2 { private ViewModelFacetFactory facetFactory; @@ -48,14 +48,9 @@ protected void tearDown() { } static class Customer implements ViewModel { - @Override - public String viewModelMemento() { - return null; - } - - public Customer(final String memento) { - } + public String viewModelMemento() { return null; } + public Customer(final String memento) { } } public void testViewModelInterfacePickedUpOnClassAndDefaultsToAlways() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java index 7619c644cc5..b7e8fbf492a 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/LabelAtFacetForParameterLayoutAnnotationFactoryTest.java @@ -18,45 +18,41 @@ */ package org.apache.causeway.core.metamodel.facets.param.layout.annotation; -import java.lang.reflect.Method; - import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; -import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.annotation.LabelPosition; import org.apache.causeway.applib.annotation.ParameterLayout; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.labelat.LabelAtFacet; import org.apache.causeway.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation; import org.apache.causeway.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory; -public class LabelAtFacetForParameterLayoutAnnotationFactoryTest +class LabelAtFacetForParameterLayoutAnnotationFactoryTest extends FacetFactoryTestAbstract { - public void testParameterLayoutAnnotationPickedUp() { + void testParameterLayoutAnnotationPickedUp() { final ParameterLayoutFacetFactory facetFactory = new ParameterLayoutFacetFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") - public void someAction(@ParameterLayout(labelPosition = LabelPosition.LEFT) final String foo) { - } + public void someAction( + @ParameterLayout(labelPosition = LabelPosition.LEFT) + final String foo) {} } - final Method method = findMethod(Customer.class, "someAction", new Class[] { String.class }); - - facetFactory.processParams(FacetFactory.ProcessParameterContext.forTesting( - Customer.class, - IntrospectionPolicy.ANNOTATION_OPTIONAL, - method, null, facetedMethodParameter)); - final Facet facet = facetedMethodParameter.getFacet(LabelAtFacet.class); - assertThat(facet, is(notNullValue())); - assertThat(facet, is(instanceOf(LabelAtFacetForParameterLayoutAnnotation.class))); - final LabelAtFacetForParameterLayoutAnnotation layoutAnnotation = (LabelAtFacetForParameterLayoutAnnotation) facet; - assertThat(layoutAnnotation.label(), is(LabelPosition.LEFT)); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.processParams(processParameterContext); + //then + final Facet facet = facetedMethodParameter.getFacet(LabelAtFacet.class); + assertThat(facet, is(notNullValue())); + assertThat(facet, is(instanceOf(LabelAtFacetForParameterLayoutAnnotation.class))); + final LabelAtFacetForParameterLayoutAnnotation layoutAnnotation = (LabelAtFacetForParameterLayoutAnnotation) facet; + assertThat(layoutAnnotation.label(), is(LabelPosition.LEFT)); + }); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java index 091b402be40..d07f4e97cd8 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/layout/annotation/NamedFacetForParameterLayoutAnnotationFactoryTest.java @@ -18,17 +18,13 @@ */ package org.apache.causeway.core.metamodel.facets.param.layout.annotation; -import java.lang.reflect.Method; - import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.junit.jupiter.api.Assertions.assertEquals; -import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.annotation.ParameterLayout; -import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.all.named.ParamNamedFacet; import org.apache.causeway.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation; @@ -46,20 +42,21 @@ public void testParameterLayoutAnnotationNamed() { class Customer { @SuppressWarnings("unused") - public void someAction(@ParameterLayout(named = NAME) final String foo) { - } + public void someAction( + @ParameterLayout(named = NAME) + final String foo) {} } - final Method method = findMethod(Customer.class, "someAction", new Class[]{String.class}); - facetFactory.processParams(FacetFactory.ProcessParameterContext.forTesting( - Customer.class, - IntrospectionPolicy.ANNOTATION_OPTIONAL, - method, null, facetedMethodParameter)); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.processParams(processParameterContext); + //then + val facet = facetedMethodParameter.getFacet(ParamNamedFacet.class); + assertThat(facet, is(notNullValue())); + assertThat(facet, is(instanceOf(NamedFacetForParameterLayoutAnnotation.class))); + assertEquals(NAME, facet.text()); + }); - val facet = facetedMethodParameter.getFacet(ParamNamedFacet.class); - assertThat(facet, is(notNullValue())); - assertThat(facet, is(instanceOf(NamedFacetForParameterLayoutAnnotation.class))); - assertEquals(NAME, facet.text()); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java index 21c89c57b72..c0336fb0d12 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java @@ -32,13 +32,13 @@ import org.apache.causeway.applib.annotation.Parameter; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetForParameterAnnotation; import org.apache.causeway.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByNullableAnnotationOnParameter; class ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest -extends FacetFactoryTestAbstract { +extends FacetFactoryTestAbstract2 { private ParameterAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java index 9fed0f65cee..47db2634e88 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java @@ -32,12 +32,12 @@ import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.regex.RegExFacet; import org.apache.causeway.core.metamodel.facets.param.parameter.regex.RegExFacetForPatternAnnotationOnParameter; class RegExAnnotationOnParameterFacetFactoryTest -extends FacetFactoryTestAbstract { +extends FacetFactoryTestAbstract2 { private ParameterAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java index b336f664cae..0673a7d532e 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java @@ -28,7 +28,7 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facetapi.FeatureType; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethod; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethodFactory; @@ -62,16 +62,14 @@ import lombok.val; class PropertyMethodsFacetFactoryTest -extends FacetFactoryTestAbstract { +extends FacetFactoryTestAbstract2 { public void testPropertyAccessorFacetIsInstalledAndMethodRemoved() { val facetFactory = new PropertyAccessorFacetViaAccessorFactory(getMetaModelContext()); class Customer { @SuppressWarnings("unused") - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java index 0b9e4ce6ff7..c27382027fc 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java @@ -33,14 +33,14 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacetAbstract; import lombok.val; class DisabledAnnotationOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java index 98ced00590f..b31058b9f2b 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java @@ -30,14 +30,14 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import lombok.val; class MandatoryAnnotationFacetFactoryTest -extends FacetFactoryTestAbstract { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java index a9a3675b9c4..210540cb007 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java @@ -30,14 +30,14 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet; import org.apache.causeway.core.metamodel.facets.properties.property.snapshot.SnapshotExcludeFacetForPropertyAnnotation; import lombok.val; class PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java index 30fa2d47d8a..84c1a967c90 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java @@ -32,7 +32,7 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByNullableAnnotationOnProperty; @@ -40,7 +40,7 @@ import lombok.val; class PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java index ae863732f21..54d0e92ff92 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java @@ -23,6 +23,7 @@ import javax.validation.constraints.Pattern; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -33,14 +34,14 @@ import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; import org.apache.causeway.core.metamodel.facets.objectvalue.regex.RegExFacet; import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPatternAnnotationOnProperty; import lombok.val; class RegExAnnotationOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract { +extends FacetFactoryTestAbstract2 { private PropertyAnnotationFacetFactory facetFactory; @@ -55,13 +56,12 @@ private void processRegEx( facetFactory.processRegEx(processMethodContext, propertyIfAny); } - public void testRegExAnnotationPickedUpOnProperty() { + @Test + void testRegExAnnotationPickedUpOnProperty() { class Customer { @Pattern(regexp = "^A.*", flags = { Pattern.Flag.CASE_INSENSITIVE }) - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } final Method method = findMethod(Customer.class, "getFirstName"); @@ -76,13 +76,12 @@ public String getFirstName() { assertEquals(2, regExFacet.patternFlags()); } - public void testRegExAnnotationIgnoredForNonStringsProperty() { + @Test + void testRegExAnnotationIgnoredForNonStringsProperty() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public int getNumberOfOrders() { - return 0; - } + public int getNumberOfOrders() { return 0; } } final Method method = findMethod(Customer.class, "getNumberOfOrders"); From 17d8efa1903edd74f3357e8e1407854ca23eccd7 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 15:16:01 +0200 Subject: [PATCH 19/37] CAUSEWAY-3409: resurrect ActionSemanticsFacetFallbackToNonIdempotentFactoryTest --- ...cetFallbackToNonIdempotentFactoryTest.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java index 51f5f6a26cf..9c90946dd48 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java @@ -18,10 +18,9 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action; -import java.lang.reflect.Method; - import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -29,14 +28,14 @@ import org.apache.causeway.applib.annotation.Action; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetFallbackToNonIdempotent; import org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet; import lombok.val; class ActionSemanticsFacetFallbackToNonIdempotentFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private ActionAnnotationFacetFactory facetFactory; @@ -56,22 +55,22 @@ protected void tearDown() { facetFactory = null; } - public void testNoAnnotationPickedUp() { + @Test + void noAnnotationPickedUp() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction() { - } + public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); - - processSemantics(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(ActionSemanticsFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ActionSemanticsFacetFallbackToNonIdempotent); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + processSemantics(facetFactory, processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(ActionSemanticsFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ActionSemanticsFacetFallbackToNonIdempotent); - assertNoMethodsRemoved(); + assertNoMethodsRemoved(); + }); } } From 188cce724d801f9f4cac90aa5e0952da7b0b4d64 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 15:18:11 +0200 Subject: [PATCH 20/37] CAUSEWAY-3409: resurrect BookmarkableAnnotationFacetFactoryTest_action --- ...ableAnnotationFacetFactoryTest_action.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/bookmarkable/BookmarkableAnnotationFacetFactoryTest_action.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/bookmarkable/BookmarkableAnnotationFacetFactoryTest_action.java index d3021d62c83..91c0990260d 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/bookmarkable/BookmarkableAnnotationFacetFactoryTest_action.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/bookmarkable/BookmarkableAnnotationFacetFactoryTest_action.java @@ -18,23 +18,21 @@ */ package org.apache.causeway.core.metamodel.facets.actions.bookmarkable; -import java.lang.reflect.Method; - import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetAbstract; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetFallbackFactory; class BookmarkableAnnotationFacetFactoryTest_action -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private BookmarkPolicyFacetFallbackFactory facetFactory; @@ -48,21 +46,22 @@ protected void tearDown() { facetFactory = null; } - public void testBookmarkableAnnotationPickedUpOnClass() { + @Test + void bookmarkableAnnotationPickedUpOnClass() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") public void placeOrder(){} } - final Method actionMethod = findMethod(Customer.class, "placeOrder"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(BookmarkPolicyFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof BookmarkPolicyFacetAbstract); + actionScenario(Customer.class, "placeOrder", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.process(processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(BookmarkPolicyFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof BookmarkPolicyFacetAbstract); - assertNoMethodsRemoved(); + assertNoMethodsRemoved(); + }); } } From dcd471d46e2edc32f31eaa758260945c33feae43 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 15:20:38 +0200 Subject: [PATCH 21/37] CAUSEWAY-3409: resurrect BookmarkableAnnotationFacetFactoryTest_class --- ...kableAnnotationFacetFactoryTest_class.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/BookmarkableAnnotationFacetFactoryTest_class.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/BookmarkableAnnotationFacetFactoryTest_class.java index fc163eb17c9..a6559cef5e7 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/BookmarkableAnnotationFacetFactoryTest_class.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/bookmarkpolicy/BookmarkableAnnotationFacetFactoryTest_class.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -28,12 +29,11 @@ import org.apache.causeway.applib.annotation.BookmarkPolicy; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetFallbackFactory; class BookmarkableAnnotationFacetFactoryTest_class -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private BookmarkPolicyFacetFallbackFactory facetFactory; @@ -47,20 +47,24 @@ protected void tearDown() { facetFactory = null; } - public void testBookmarkablePolicyInferredPickedUpOnClassAndDefaultsToAlways() { + @Test + void bookmarkablePolicyInferredPickedUpOnClassAndDefaultsToAlways() { class Customer { } - facetFactory.process(ProcessClassContext - .forTesting(Customer.class, methodRemover, facetedMethod)); + objectScenario(Customer.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + final Facet facet = facetHolder.getFacet(BookmarkPolicyFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof BookmarkPolicyFacetFallback); + BookmarkPolicyFacet bookmarkableFacet = (BookmarkPolicyFacet) facet; + assertThat(bookmarkableFacet.value(), is(BookmarkPolicy.NEVER)); - final Facet facet = facetedMethod.getFacet(BookmarkPolicyFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof BookmarkPolicyFacetFallback); - BookmarkPolicyFacet bookmarkableFacet = (BookmarkPolicyFacet) facet; - assertThat(bookmarkableFacet.value(), is(BookmarkPolicy.NEVER)); + assertNoMethodsRemoved(); + }); - assertNoMethodsRemoved(); } } From c984637a0c90c8345b6887c770e82f36fc08b60f Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 15:39:23 +0200 Subject: [PATCH 22/37] CAUSEWAY-3409: resurrect all tests from ObjectSupportFacetFactoryTestAbstract --- .../ObjectDisabledMethodFacetFactoryTest.java | 5 +- .../ObjectHiddenMethodFacetFactoryTest.java | 7 +- .../CssClassFacetMethodFactoryTest.java | 13 ++-- .../icon/IconFacetMethodFactoryTest.java | 14 ++-- .../ident/layout/LayoutFacetFactoryTest.java | 7 +- .../TitleFacetViaMethodsFactoryTest.java | 64 +++++++++++-------- ...ObjectSupportFacetFactoryTestAbstract.java | 38 ++++++----- 7 files changed, 89 insertions(+), 59 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/disabled/ObjectDisabledMethodFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/disabled/ObjectDisabledMethodFacetFactoryTest.java index 10fb45c4d79..833441bd4c4 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/disabled/ObjectDisabledMethodFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/disabled/ObjectDisabledMethodFacetFactoryTest.java @@ -18,13 +18,16 @@ */ package org.apache.causeway.core.metamodel.facets.object.disabled; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod; import org.apache.causeway.core.metamodel.facets.object.support.ObjectSupportFacetFactoryTestAbstract; public class ObjectDisabledMethodFacetFactoryTest extends ObjectSupportFacetFactoryTestAbstract { - public void testDisabledMethodPickedUpAndMethodRemoved() { + @Test + void disabledMethodPickedUpAndMethodRemoved() { class Customer { @SuppressWarnings("unused") public String disabled() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/hidden/ObjectHiddenMethodFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/hidden/ObjectHiddenMethodFacetFactoryTest.java index 2be131b6a91..6d81e95afd6 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/hidden/ObjectHiddenMethodFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/hidden/ObjectHiddenMethodFacetFactoryTest.java @@ -18,13 +18,16 @@ */ package org.apache.causeway.core.metamodel.facets.object.hidden; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod; import org.apache.causeway.core.metamodel.facets.object.support.ObjectSupportFacetFactoryTestAbstract; -public class ObjectHiddenMethodFacetFactoryTest +class ObjectHiddenMethodFacetFactoryTest extends ObjectSupportFacetFactoryTestAbstract { - public void testDisabledMethodPickedUpAndMethodRemovedBooleanType() { + @Test + void disabledMethodPickedUpAndMethodRemovedBooleanType() { class Customer { @SuppressWarnings("unused") public boolean hidden() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodFactoryTest.java index bdde5f40d1e..d6a2f372f92 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/cssclass/CssClassFacetMethodFactoryTest.java @@ -18,19 +18,20 @@ */ package org.apache.causeway.core.metamodel.facets.object.ident.cssclass; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod; import org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.causeway.core.metamodel.facets.object.support.ObjectSupportFacetFactoryTestAbstract; -public class CssClassFacetMethodFactoryTest +class CssClassFacetMethodFactoryTest extends ObjectSupportFacetFactoryTestAbstract { - public void testIconNameMethodPickedUpOnClassAndMethodRemoved() { + @Test + void iconNameMethodPickedUpOnClassAndMethodRemoved() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String cssClass() { - return null; - } + public String cssClass() { return null; } } assertPicksUp(1, facetFactory, Customer.class, ObjectSupportMethod.CSS_CLASS, CssClassFacet.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/icon/IconFacetMethodFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/icon/IconFacetMethodFactoryTest.java index 516f45939e9..d56ae9f9f35 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/icon/IconFacetMethodFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/icon/IconFacetMethodFactoryTest.java @@ -18,19 +18,21 @@ */ package org.apache.causeway.core.metamodel.facets.object.ident.icon; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod; import org.apache.causeway.core.metamodel.facets.object.icon.IconFacet; import org.apache.causeway.core.metamodel.facets.object.support.ObjectSupportFacetFactoryTestAbstract; -public class IconFacetMethodFactoryTest +class IconFacetMethodFactoryTest extends ObjectSupportFacetFactoryTestAbstract { - public void testIconNameMethodPickedUpOnClassAndMethodRemoved() { + @Test + void iconNameMethodPickedUpOnClassAndMethodRemoved() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String iconName() { - return null; - } + public String iconName() { return null; } + } assertPicksUp(1, facetFactory, Customer.class, ObjectSupportMethod.ICON_NAME, IconFacet.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/layout/LayoutFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/layout/LayoutFacetFactoryTest.java index 4dde1055ba4..9ee390ca60f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/layout/LayoutFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/layout/LayoutFacetFactoryTest.java @@ -18,14 +18,17 @@ */ package org.apache.causeway.core.metamodel.facets.object.ident.layout; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod; import org.apache.causeway.core.metamodel.facets.object.layout.LayoutFacet; import org.apache.causeway.core.metamodel.facets.object.support.ObjectSupportFacetFactoryTestAbstract; -public class LayoutFacetFactoryTest +class LayoutFacetFactoryTest extends ObjectSupportFacetFactoryTestAbstract { - public void testLayoutMethodPickedUpOnClassAndMethodRemoved() { + @Test + void layoutMethodPickedUpOnClassAndMethodRemoved() { class Customer { @SuppressWarnings("unused") public String layout() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java index c214e71c64c..fa64c3622c2 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java @@ -20,7 +20,9 @@ import java.lang.reflect.Method; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; @@ -29,63 +31,75 @@ import org.apache.causeway.commons.internal._Constants; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.ObjectSupportMethod; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; +import org.apache.causeway.core.metamodel.facets.FacetedMethod; import org.apache.causeway.core.metamodel.facets.object.support.ObjectSupportFacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.title.TitleFacet; import org.apache.causeway.core.metamodel.facets.object.title.methods.TitleFacetFromToStringMethod; +import lombok.val; + class TitleFacetViaMethodsFactoryTest extends ObjectSupportFacetFactoryTestAbstract { - public void testTitleMethodPickedUpOnClassAndMethodRemoved() { + @Test + void titleMethodPickedUpOnClassAndMethodRemoved() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String title() { - return "Some title"; - } + public String title() { return "Some title"; } } assertPicksUp(1, facetFactory, Customer.class, ObjectSupportMethod.TITLE, TitleFacet.class); } - public void testToStringMethodPickedUpOnClassAndMethodRemoved() { + @Test + void toStringMethodPickedUpOnClassAndMethodRemoved() { class Customer { @Override - public String toString() { - return "Some title via toString"; - } + public String toString() { return "Some title via toString"; } } + final Method toStringMethod = findMethod(Customer.class, "toString"); - facetFactory.process(ProcessClassContext - .forTesting(Customer.class, methodRemover, facetedMethod)); + objectScenario(Customer.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + final Facet facet = facetHolder.getFacet(TitleFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TitleFacetFromToStringMethod); + val titleFacetViaTitleMethod = (TitleFacetFromToStringMethod) facet; + assertMethodEquals(toStringMethod, titleFacetViaTitleMethod.getMethods().getFirstElseFail().asMethodElseFail()); - final Facet facet = facetedMethod.getFacet(TitleFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TitleFacetFromToStringMethod); - final TitleFacetFromToStringMethod titleFacetViaTitleMethod = (TitleFacetFromToStringMethod) facet; - assertEquals(toStringMethod, titleFacetViaTitleMethod.getMethods().getFirstElseFail()); + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(toStringMethod)); + }); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(toStringMethod)); } - public void testTitleFacetOnJavaObjectToStringIsIgnored() throws NoSuchMethodException, SecurityException { + @Test + void titleFacetOnJavaObjectToStringIsIgnored() throws NoSuchMethodException, SecurityException { final Method sampleMethod = Object.class .getMethod("toString", _Constants.emptyClasses); + + val facetedMethod = Mockito.mock(FacetedMethod.class); + assertFalse(TitleFacetFromToStringMethod .create(sampleMethod, facetedMethod) .isPresent()); } - public void testNoExplicitTitleOrToStringMethod() { + @Test + void noExplicitTitleOrToStringMethod() { class Customer { } - facetFactory.process(ProcessClassContext - .forTesting(Customer.class, methodRemover, facetedMethod)); + objectScenario(Customer.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + assertNull(facetHolder.getFacet(TitleFacet.class)); + assertFalse(methodRemover.getRemovedMethodMethodCalls().isEmpty()); + }); - assertNull(facetedMethod.getFacet(TitleFacet.class)); - assertFalse(methodRemover.getRemovedMethodMethodCalls().isEmpty()); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java index 15069d3fff8..8507d101fa9 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java @@ -26,17 +26,17 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.commons.internal.reflection._MethodFacades; +import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.ImperativeFacet; import lombok.val; public abstract class ObjectSupportFacetFactoryTestAbstract -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { protected ObjectSupportFacetFactory facetFactory; @@ -57,24 +57,28 @@ protected void assertPicksUp( final ProgrammingModelConstants.ObjectSupportMethod supportMethodEnum, final Class facetType) { - // when - facetFactory.process(ProcessClassContext - .forTesting(type, methodRemover, facetedMethod)); + objectScenario(type, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + val supportMethods = supportMethodEnum.getMethodNames() + .map(methodName->findMethod(type, methodName)) + .map(_MethodFacades::regular) + .map(MethodFacade::asMethodElseFail); - val supportMethods = supportMethodEnum.getMethodNames() - .map(methodName->findMethod(type, methodName)) - .map(_MethodFacades::regular); + assertEquals(expectedSupportMethodCount, supportMethods.size()); - assertEquals(expectedSupportMethodCount, supportMethods.size()); + val facet = facetHolder.getFacet(facetType); + assertNotNull(facet); + assertTrue(facet instanceof ImperativeFacet); + val imperativeFacet = (ImperativeFacet)facet; - val facet = facetedMethod.getFacet(facetType); - assertNotNull(facet); - assertTrue(facet instanceof ImperativeFacet); - val imperativeFacet = (ImperativeFacet)facet; + supportMethods.forEach(method->{ + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(method)); + assertTrue(imperativeFacet.getMethods() + .map(MethodFacade::asMethodElseFail).contains(method)); + }); - supportMethods.forEach(method->{ - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(method)); - assertTrue(imperativeFacet.getMethods().contains(method)); }); } From fad90f8dc605bd7aec96a1d6435212eb4286ea3c Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 16:13:26 +0200 Subject: [PATCH 23/37] CAUSEWAY-3409: resurrect all tests from CallbackFacetFactoryTestAbstract --- .../facets/FacetFactoryTestAbstract.java | 8 ++- .../ActionMethodsFacetFactoryTest.java | 22 ++++---- .../IteratorFilteringFacetFactoryTest.java | 4 +- ...tionFacetFactoryTest_ActionInvocation.java | 12 ++-- ...AnnotationFacetFactoryTest_Invocation.java | 8 +-- .../PrototypeFacetAnnotationFactoryTest.java | 2 +- ...ollectionFieldMethodsFacetFactoryTest.java | 12 ++-- ...tionAnnotationFacetFactoryTest_typeOf.java | 6 +- ...CollectionLayoutAnnotationFactoryTest.java | 4 +- .../CallbackFacetFactoryTestAbstract.java | 55 ++++++++++-------- .../CreatedCallbackFacetFactoryTest.java | 12 ++-- .../LoadedCallbackFacetFactoryTest.java | 12 ++-- .../PersistedCallbackFacetFactoryTest.java | 34 ++++++----- .../PersistingCallbackFacetFactoryTest.java | 34 ++++++----- .../RemovingCallbackFacetFactoryTest.java | 32 +++++------ .../UpdatedCallbackFacetFactoryTest.java | 12 ++-- .../UpdatingCallbackFacetFactoryTest.java | 12 ++-- .../TitleFacetViaMethodsFactoryTest.java | 2 +- ...ObjectSupportFacetFactoryTestAbstract.java | 5 +- .../ordering/memberorder/LayoutOrderTest.java | 6 +- ...AnnotationOnParameterFacetFactoryTest.java | 8 +-- ...AnnotationOnParameterFacetFactoryTest.java | 4 +- .../PropertyMethodsFacetFactoryTest.java | 56 +++++++++---------- ...dAnnotationOnPropertyFacetFactoryTest.java | 4 +- .../MandatoryAnnotationFacetFactoryTest.java | 2 +- ...ithSnapshotOnPropertyFacetFactoryTest.java | 2 +- ...eAnnotationOnPropertyFacetFactoryTest.java | 8 +-- ...xAnnotationOnPropertyFacetFactoryTest.java | 4 +- .../PropertyLayoutAnnotationFactoryTest.java | 6 +- 29 files changed, 205 insertions(+), 183 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index 6278d675ba8..03e9bd1e51a 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -234,14 +234,18 @@ protected static boolean contains(final ImmutableEnumSet featureTyp return _Utils.contains(featureTypes, featureType); } - protected Method findMethod(final Class type, final String methodName, final Class[] methodTypes) { + protected Method findMethodExactOrFail(final Class type, final String methodName, final Class[] methodTypes) { return _Utils.findMethodExactOrFail(type, methodName, methodTypes); } - protected Method findMethod(final Class type, final String methodName) { + protected Method findMethodExactOrFail(final Class type, final String methodName) { return _Utils.findMethodExactOrFail(type, methodName); } + protected Optional findMethodExact(final Class type, final String methodName) { + return _Utils.findMethodExact(type, methodName); + } + // -- EXPECTATIONS protected final void assertNoMethodsRemoved() { diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java index 24851651dfe..ed3957a8ca0 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java @@ -63,7 +63,7 @@ public void someAction() {} public String validateSomeAction() { return null;} } - final Method validateMethod = findMethod(Customer.class, "validateSomeAction"); + final Method validateMethod = findMethodExactOrFail(Customer.class, "validateSomeAction"); actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { //when @@ -91,7 +91,7 @@ public void someAction(final int x, final int y) {} public String validateSomeAction(final int x, final int y) { return null;} } - final Method validateMethod = findMethod(Customer.class, "validateSomeAction", new Class[] { int.class, int.class }); + final Method validateMethod = findMethodExactOrFail(Customer.class, "validateSomeAction", new Class[] { int.class, int.class }); actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { //when @@ -119,9 +119,9 @@ public void someAction(final int x, final long y) {} public long default1SomeAction() { return 0; } } - final Method actionMethod = findMethod(Customer.class, "someAction", new Class[] { int.class, long.class }); - final Method default0Method = findMethod(Customer.class, "default0SomeAction", new Class[] {}); - final Method default1Method = findMethod(Customer.class, "default1SomeAction", new Class[]{}); + final Method actionMethod = findMethodExactOrFail(Customer.class, "someAction", new Class[] { int.class, long.class }); + final Method default0Method = findMethodExactOrFail(Customer.class, "default0SomeAction", new Class[] {}); + final Method default1Method = findMethodExactOrFail(Customer.class, "default1SomeAction", new Class[]{}); final FacetedMethod facetHolderWithParms = FacetedMethod .createForAction(getMetaModelContext(), Customer.class, _MethodFacades.regular(actionMethod)); @@ -160,10 +160,10 @@ public void someAction(final int x, final long y, final long z) {} public Set choices2SomeAction() { return Collections.emptySet(); } } - final Method actionMethod = findMethod(Customer.class, "someAction", new Class[] { int.class, long.class, long.class }); - final Method choices0Method = findMethod(Customer.class, "choices0SomeAction", new Class[] {}); - final Method choices1Method = findMethod(Customer.class, "choices1SomeAction", new Class[] {}); - final Method choices2Method = findMethod(Customer.class, "choices2SomeAction", new Class[] {}); + final Method actionMethod = findMethodExactOrFail(Customer.class, "someAction", new Class[] { int.class, long.class, long.class }); + final Method choices0Method = findMethodExactOrFail(Customer.class, "choices0SomeAction", new Class[] {}); + final Method choices1Method = findMethodExactOrFail(Customer.class, "choices1SomeAction", new Class[] {}); + final Method choices2Method = findMethodExactOrFail(Customer.class, "choices2SomeAction", new Class[] {}); final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction( getMetaModelContext(), Customer.class, _MethodFacades.regular(actionMethod)); @@ -213,8 +213,8 @@ public List autoComplete0SomeAction(final String searchArg) { } } - final Method actionMethod = findMethod(Customer.class, "someAction", new Class[] { int.class, long.class }); - final Method autoComplete0Method = findMethod(Customer.class, "autoComplete0SomeAction", new Class[] {String.class}); + final Method actionMethod = findMethodExactOrFail(Customer.class, "someAction", new Class[] { int.class, long.class }); + final Method autoComplete0Method = findMethodExactOrFail(Customer.class, "autoComplete0SomeAction", new Class[] {String.class}); final FacetedMethod facetHolderWithParms = FacetedMethod .createForAction(getMetaModelContext(), Customer.class, _MethodFacades.regular(actionMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java index 153d5d72f69..1a848f404c1 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/IteratorFilteringFacetFactoryTest.java @@ -68,7 +68,7 @@ class Customer { @SuppressWarnings("unused") public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); + final Method actionMethod = findMethodExactOrFail(Customer.class, "someAction"); assertFalse(facetFactory.recognizes(actionMethod)); } @@ -80,7 +80,7 @@ public void someAction() {} @Override public Iterator iterator() { return null; } } - final Method iteratorMethod = findMethod(Customer.class, "iterator"); + final Method iteratorMethod = findMethodExactOrFail(Customer.class, "iterator"); assertTrue(facetFactory.recognizes(iteratorMethod)); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java index 71184a45157..d6dfc8dec21 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java @@ -76,7 +76,7 @@ class Customer { public void someAction() {} } - final Method actionMethod = findMethod(Customer.class, "someAction"); + final Method actionMethod = findMethodExactOrFail(Customer.class, "someAction"); actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { //when @@ -157,7 +157,7 @@ public void someAction(final int x, final long y) { class CustomerEx extends Customer { } - final Method actionMethod = findMethod(CustomerEx.class, "someAction", new Class[] { int.class, long.class }); + final Method actionMethod = findMethodExactOrFail(CustomerEx.class, "someAction", new Class[] { int.class, long.class }); final FacetedMethod facetHolderWithParms = FacetedMethod .createForAction(getMetaModelContext(), CustomerEx.class, _MethodFacades.regular(actionMethod)); @@ -192,10 +192,10 @@ public String disableSomeAction() { } } - final Method actionMethod = findMethod(CustomerEx.class, "someAction", new Class[] { int.class, long.class }); - final Method choices0Method = findMethod(CustomerEx.class, "choices0SomeAction", new Class[] {}); - final Method choices1Method = findMethod(CustomerEx.class, "choices1SomeAction", new Class[] {}); - final Method disableMethod = findMethod(CustomerEx.class, "disableSomeAction", new Class[] {}); + final Method actionMethod = findMethodExactOrFail(CustomerEx.class, "someAction", new Class[] { int.class, long.class }); + final Method choices0Method = findMethodExactOrFail(CustomerEx.class, "choices0SomeAction", new Class[] {}); + final Method choices1Method = findMethodExactOrFail(CustomerEx.class, "choices1SomeAction", new Class[] {}); + final Method disableMethod = findMethodExactOrFail(CustomerEx.class, "disableSomeAction", new Class[] {}); final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(getMetaModelContext(), CustomerEx.class, _MethodFacades.regular(actionMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java index 0c3f295d96e..dd84c1cf1b6 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_Invocation.java @@ -65,7 +65,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - assertMethodWasRemoved(findMethod(Customer.class, "someAction")); + assertMethodWasRemoved(findMethodExactOrFail(Customer.class, "someAction")); // then final ActionDomainEventFacet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); @@ -98,7 +98,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - assertMethodWasRemoved(findMethod(Customer.class, "someAction")); + assertMethodWasRemoved(findMethodExactOrFail(Customer.class, "someAction")); // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); @@ -133,7 +133,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - assertMethodWasRemoved(findMethod(Customer.class, "someAction")); + assertMethodWasRemoved(findMethodExactOrFail(Customer.class, "someAction")); // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); @@ -169,7 +169,7 @@ public void someAction() {} processInvocation(facetFactory, processMethodContext); // expect - assertMethodWasRemoved(findMethod(Customer.class, "someAction")); + assertMethodWasRemoved(findMethodExactOrFail(Customer.class, "someAction")); // then final Facet domainEventFacet = facetedMethod.getFacet(ActionDomainEventFacet.class); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java index f4341622ca1..6534c7f4263 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java @@ -63,7 +63,7 @@ class Customer { public void someAction() { } } - final Method actionMethod = findMethod(Customer.class, "someAction"); + final Method actionMethod = findMethodExactOrFail(Customer.class, "someAction"); processRestrictTo(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java index ed3414d6866..a38af07b61b 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java @@ -48,7 +48,7 @@ public Collection getOrders() { return null; } } - final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders"); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); @@ -72,7 +72,7 @@ public List getOrders() { return null; } } - final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders"); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); facetFactory.process(ProcessMethodContext @@ -96,7 +96,7 @@ public Set getOrders() { return null; } } - final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders"); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); @@ -119,7 +119,7 @@ public Object[] getOrders() { return null; } } - final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders"); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); @@ -145,7 +145,7 @@ public Order[] getOrders() { return null; } } - final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders"); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); @@ -175,7 +175,7 @@ public Collection getOrders() { class CustomerEx extends Customer { } - final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders"); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); facetFactory.process(ProcessMethodContext .forTesting(CustomerEx.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java index 0fa56f7ac8c..35e57b71155 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java @@ -62,7 +62,7 @@ public Collection someAction() { return null; } } - final Method actionMethod = findMethod(Customer.class, "someAction"); + final Method actionMethod = findMethodExactOrFail(Customer.class, "someAction"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); @@ -85,7 +85,7 @@ public Collection getOrders() { } } - final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders"); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); @@ -107,7 +107,7 @@ public Order[] getOrders() { return null; } } - final Method collectionAccessorMethod = findMethod(Customer.class, "getOrders"); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java index 62edff458a6..3669cb03bbf 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java @@ -60,7 +60,7 @@ public SortedSet getFirstNames() { return _Sets.newTreeSet(); } } - final Method method = findMethod(Customer.class, "getFirstNames"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstNames"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); @@ -81,7 +81,7 @@ public SortedSet getFirstNames() { return _Sets.newTreeSet(); } } - final Method method = findMethod(Customer.class, "getFirstNames"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstNames"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CallbackFacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CallbackFacetFactoryTestAbstract.java index f202a167934..6dcc1331eda 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CallbackFacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CallbackFacetFactoryTestAbstract.java @@ -18,25 +18,28 @@ */ package org.apache.causeway.core.metamodel.facets.object.callback; +import java.util.Optional; + import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; +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.causeway.commons.collections.Can; import org.apache.causeway.commons.internal.reflection._MethodFacades; +import org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade; import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.ImperativeFacet; import org.apache.causeway.core.metamodel.facets.object.callbacks.CallbackFacetFactory; import lombok.val; abstract class CallbackFacetFactoryTestAbstract -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { protected CallbackFacetFactory facetFactory; @@ -50,6 +53,9 @@ protected void tearDown() { facetFactory = null; } + /** + * see also ObjectSupportFacetFactoryTestAbstract#assertPicksUp + */ protected void assertPicksUp( final int expectedCallbackCount, final FacetFactory facetFactory, @@ -57,24 +63,29 @@ protected void assertPicksUp( final ProgrammingModelConstants.CallbackMethod callbackMethod, final Class facetType) { - // when - facetFactory.process(ProcessClassContext - .forTesting(type, methodRemover, facetedMethod)); - - val callbackMethods = callbackMethod.getMethodNames() - .map(methodName->findMethod(type, methodName)) - .map(_MethodFacades::regular); - - Assertions.assertEquals(expectedCallbackCount, callbackMethods.size()); - - val facet = facetedMethod.getFacet(facetType); - assertNotNull(facet); - assertTrue(facet instanceof ImperativeFacet); - val imperativeFacet = facet; - - callbackMethods.forEach(method->{ - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(method)); - assertTrue(imperativeFacet.getMethods().contains(method)); + objectScenario(type, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + val callbackMethods = callbackMethod.getMethodNames().stream() + .map(methodName->findMethodExact(type, methodName)) + .flatMap(Optional::stream) + .map(_MethodFacades::regular) + .map(MethodFacade::asMethodElseFail) + .collect(Can.toCan()); + + assertEquals(expectedCallbackCount, callbackMethods.size()); + + val facet = facetHolder.getFacet(facetType); + assertNotNull(facet); + assertTrue(facet instanceof ImperativeFacet); + val imperativeFacet = facet; + + callbackMethods.forEach(method->{ + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(method)); + assertTrue(imperativeFacet.getMethods() + .map(MethodFacade::asMethodElseFail).contains(method)); + }); }); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CreatedCallbackFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CreatedCallbackFacetFactoryTest.java index 285e0dc4426..0c7a784beb3 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CreatedCallbackFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/CreatedCallbackFacetFactoryTest.java @@ -18,17 +18,19 @@ */ package org.apache.causeway.core.metamodel.facets.object.callback; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CallbackMethod; import org.apache.causeway.core.metamodel.facets.object.callbacks.CreatedCallbackFacet; -public class CreatedCallbackFacetFactoryTest +class CreatedCallbackFacetFactoryTest extends CallbackFacetFactoryTestAbstract { - public void testCreatedLifecycleMethodPickedUpOn() { + @Test + void createdLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void created() { - } + public void created() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.CREATED, CreatedCallbackFacet.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/LoadedCallbackFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/LoadedCallbackFacetFactoryTest.java index e2425348a50..c6aa21b803e 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/LoadedCallbackFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/LoadedCallbackFacetFactoryTest.java @@ -18,17 +18,19 @@ */ package org.apache.causeway.core.metamodel.facets.object.callback; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CallbackMethod; import org.apache.causeway.core.metamodel.facets.object.callbacks.LoadedCallbackFacet; -public class LoadedCallbackFacetFactoryTest +class LoadedCallbackFacetFactoryTest extends CallbackFacetFactoryTestAbstract { - public void testLoadedLifecycleMethodPickedUpOn() { + @Test + void loadedLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void loaded() { - } + public void loaded() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.LOADED, LoadedCallbackFacet.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/PersistedCallbackFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/PersistedCallbackFacetFactoryTest.java index 9f8c80eea91..9bd72628295 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/PersistedCallbackFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/PersistedCallbackFacetFactoryTest.java @@ -18,42 +18,40 @@ */ package org.apache.causeway.core.metamodel.facets.object.callback; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CallbackMethod; import org.apache.causeway.core.metamodel.facets.object.callbacks.PersistedCallbackFacet; -public class PersistedCallbackFacetFactoryTest +class PersistedCallbackFacetFactoryTest extends CallbackFacetFactoryTestAbstract { - public void testPersistedLifecycleMethodPickedUpOn() { + @Test + void persistedLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void persisted() { - } + public void persisted() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.PERSISTED, PersistedCallbackFacet.class); } - public void testSavedLifecycleMethodPickedUpOn() { + @Test + void savedLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void saved() { - } + public void saved() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.PERSISTED, PersistedCallbackFacet.class); } - public void testSavedAndPersistedLifecycleMethodPickedUpOn() { + @Test + void savedAndPersistedLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void saved() { - } - - @SuppressWarnings("unused") - public void persisted() { - } + public void saved() {} + public void persisted() {} } assertPicksUp(2, facetFactory, Customer.class, CallbackMethod.PERSISTED, PersistedCallbackFacet.class); } - } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/PersistingCallbackFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/PersistingCallbackFacetFactoryTest.java index 18d6a637a38..15d7ec74db5 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/PersistingCallbackFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/PersistingCallbackFacetFactoryTest.java @@ -18,41 +18,39 @@ */ package org.apache.causeway.core.metamodel.facets.object.callback; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CallbackMethod; import org.apache.causeway.core.metamodel.facets.object.callbacks.PersistingCallbackFacet; -public class PersistingCallbackFacetFactoryTest +class PersistingCallbackFacetFactoryTest extends CallbackFacetFactoryTestAbstract { - public void testPersistingLifecycleMethodPickedUpOn() { + @Test + void persistingLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void persisting() { - } + public void persisting() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.PERSISTING, PersistingCallbackFacet.class); } - public void testSavingLifecycleMethodPickedUpOn() { + @Test + void savingLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void saving() { - } + public void saving() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.PERSISTING, PersistingCallbackFacet.class); } - public void testSavingAndPersistingLifecycleMethodPickedUpOn() { + @Test + void savingAndPersistingLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void saving() { - } - - @SuppressWarnings("unused") - public void persisting() { - } + public void saving() {} + public void persisting() {} } - assertPicksUp(2, facetFactory, Customer.class, CallbackMethod.PERSISTING, PersistingCallbackFacet.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/RemovingCallbackFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/RemovingCallbackFacetFactoryTest.java index 796925f4528..6bc6f4e84d6 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/RemovingCallbackFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/RemovingCallbackFacetFactoryTest.java @@ -18,38 +18,38 @@ */ package org.apache.causeway.core.metamodel.facets.object.callback; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CallbackMethod; import org.apache.causeway.core.metamodel.facets.object.callbacks.RemovingCallbackFacet; -public class RemovingCallbackFacetFactoryTest +class RemovingCallbackFacetFactoryTest extends CallbackFacetFactoryTestAbstract { - public void testRemovingLifecycleMethodPickedUpOn() { + @Test + void removingLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void removing() { - } + public void removing() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.REMOVING, RemovingCallbackFacet.class); } - public void testDeletingLifecycleMethodPickedUpOn() { + @Test + void deletingLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void deleting() { - } + public void deleting() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.REMOVING, RemovingCallbackFacet.class); } - public void testRemovingAndDeletingLifecycleMethodPickedUpOn() { + @Test + void removingAndDeletingLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void removing() { - } - @SuppressWarnings("unused") - public void deleting() { - } + public void removing() {} + public void deleting() {} } assertPicksUp(2, facetFactory, Customer.class, CallbackMethod.REMOVING, RemovingCallbackFacet.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/UpdatedCallbackFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/UpdatedCallbackFacetFactoryTest.java index 2ea7879a929..c8d6286b0de 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/UpdatedCallbackFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/UpdatedCallbackFacetFactoryTest.java @@ -18,17 +18,19 @@ */ package org.apache.causeway.core.metamodel.facets.object.callback; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CallbackMethod; import org.apache.causeway.core.metamodel.facets.object.callbacks.UpdatedCallbackFacet; -public class UpdatedCallbackFacetFactoryTest +class UpdatedCallbackFacetFactoryTest extends CallbackFacetFactoryTestAbstract { - public void testUpdatedLifecycleMethodPickedUpOn() { + @Test + void updatedLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void updated() { - } + public void updated() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.UPDATED, UpdatedCallbackFacet.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/UpdatingCallbackFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/UpdatingCallbackFacetFactoryTest.java index a9e2d3a2c10..c37c45522ac 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/UpdatingCallbackFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/callback/UpdatingCallbackFacetFactoryTest.java @@ -18,17 +18,19 @@ */ package org.apache.causeway.core.metamodel.facets.object.callback; +import org.junit.jupiter.api.Test; + import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CallbackMethod; import org.apache.causeway.core.metamodel.facets.object.callbacks.UpdatingCallbackFacet; -public class UpdatingCallbackFacetFactoryTest +class UpdatingCallbackFacetFactoryTest extends CallbackFacetFactoryTestAbstract { - public void testUpdatingLifecycleMethodPickedUpOn() { + @Test + void updatingLifecycleMethodPickedUpOn() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void updating() { - } + public void updating() {} } assertPicksUp(1, facetFactory, Customer.class, CallbackMethod.UPDATING, UpdatingCallbackFacet.class); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java index fa64c3622c2..a8c92916152 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/ident/title/TitleFacetViaMethodsFactoryTest.java @@ -57,7 +57,7 @@ class Customer { public String toString() { return "Some title via toString"; } } - final Method toStringMethod = findMethod(Customer.class, "toString"); + final Method toStringMethod = findMethodExactOrFail(Customer.class, "toString"); objectScenario(Customer.class, (processClassContext, facetHolder) -> { //when diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java index 8507d101fa9..55c115b566a 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/support/ObjectSupportFacetFactoryTestAbstract.java @@ -50,6 +50,9 @@ protected void tearDown() { facetFactory = null; } + /** + * see also CallbackFacetFactoryTestAbstract#assertPicksUp + */ protected void assertPicksUp( final int expectedSupportMethodCount, final FacetFactory facetFactory, @@ -62,7 +65,7 @@ protected void assertPicksUp( facetFactory.process(processClassContext); //then val supportMethods = supportMethodEnum.getMethodNames() - .map(methodName->findMethod(type, methodName)) + .map(methodName->findMethodExactOrFail(type, methodName)) .map(_MethodFacades::regular) .map(MethodFacade::asMethodElseFail); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java index 9dfa87c62d1..45852250552 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java @@ -72,7 +72,7 @@ public String getFirstName() { return null; } } - final Method method = findMethod(Customer.class, "getFirstName"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); val facetFactory = new PropertyLayoutFacetFactory(getMetaModelContext()); facetFactory.process(ProcessMethodContext @@ -99,7 +99,7 @@ public Collection getOrders() { public void addToOrders(final Order o) { } } - final Method method = findMethod(Customer.class, "getOrders"); + final Method method = findMethodExactOrFail(Customer.class, "getOrders"); val facetFactory = new CollectionLayoutFacetFactory(getMetaModelContext()); facetFactory.process(ProcessMethodContext @@ -119,7 +119,7 @@ class Customer { public void someAction() { } } - final Method method = findMethod(Customer.class, "someAction"); + final Method method = findMethodExactOrFail(Customer.class, "someAction"); val facetFactory = new ActionLayoutFacetFactory(getMetaModelContext()); facetFactory.process(ProcessMethodContext diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java index c0336fb0d12..a558fdc8bb7 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java @@ -54,7 +54,7 @@ class Customer { public void someAction(@Parameter(optionality = Optionality.OPTIONAL) final String foo) { } } - final Method method = findMethod(Customer.class, "someAction", new Class[] { String.class }); + final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { String.class }); facetFactory.processParamsOptional( ProcessParameterContext.forTesting( @@ -72,7 +72,7 @@ class Customer { public void someAction(@Parameter(optionality = Optionality.OPTIONAL) final int foo) { } } - final Method method = findMethod(Customer.class, "someAction", new Class[] { int.class }); + final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { int.class }); facetFactory.processParamsOptional( ProcessParameterContext.forTesting( @@ -88,7 +88,7 @@ class Customer { public void someAction(final @Nullable String foo) { } } - final Method method = findMethod(Customer.class, "someAction", new Class[] { String.class }); + final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { String.class }); facetFactory.processParamsOptional( ProcessParameterContext.forTesting( @@ -106,7 +106,7 @@ class Customer { public void someAction(final @Nullable int foo) { } } - final Method method = findMethod(Customer.class, "someAction", new Class[] { int.class }); + final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { int.class }); facetFactory.processParamsOptional( ProcessParameterContext.forTesting( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java index 47db2634e88..b16df99def2 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java @@ -53,7 +53,7 @@ class Customer { public void someAction(@Pattern(regexp = "^A.*", flags = { Pattern.Flag.CASE_INSENSITIVE }) final String foo) { } } - final Method method = findMethod(Customer.class, "someAction", new Class[] { String.class }); + final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { String.class }); facetFactory.processParams( ProcessParameterContext.forTesting( @@ -74,7 +74,7 @@ class Customer { public void someAction(final int foo) { } } - final Method method = findMethod(Customer.class, "someAction", new Class[] { int.class }); + final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { int.class }); facetFactory.processParams( ProcessParameterContext.forTesting( diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java index 0673a7d532e..008466a5322 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java @@ -71,7 +71,7 @@ class Customer { @SuppressWarnings("unused") public String getFirstName() { return null; } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -98,8 +98,8 @@ public String getFirstName() { public void setFirstName(final String firstName) { } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertySetterMethod = findMethod(Customer.class, "setFirstName", new Class[] { String.class }); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertySetterMethod = findMethodExactOrFail(Customer.class, "setFirstName", new Class[] { String.class }); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -126,8 +126,8 @@ public String getFirstName() { public void setFirstName(final String firstName) { } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertySetterMethod = findMethod(Customer.class, "setFirstName", new Class[] { String.class }); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertySetterMethod = findMethodExactOrFail(Customer.class, "setFirstName", new Class[] { String.class }); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -154,7 +154,7 @@ public String getFirstName() { public void setFirstName(final String firstName) { } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -176,8 +176,8 @@ public String getFirstName() { public void setFirstName(final String firstName) { } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertySetterMethod = findMethod(Customer.class, "setFirstName", new Class[] { String.class }); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertySetterMethod = findMethodExactOrFail(Customer.class, "setFirstName", new Class[] { String.class }); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -203,8 +203,8 @@ public String[] choicesFirstName() { return null; } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertyChoicesMethod = findMethod(Customer.class, "choicesFirstName"); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyChoicesMethod = findMethodExactOrFail(Customer.class, "choicesFirstName"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -233,8 +233,8 @@ public String[] autoCompleteFirstName(final String searchArg) { return null; } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertyAutoCompleteMethod = findMethod(Customer.class, "autoCompleteFirstName", new Class[]{String.class}); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyAutoCompleteMethod = findMethodExactOrFail(Customer.class, "autoCompleteFirstName", new Class[]{String.class}); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -262,8 +262,8 @@ public String defaultFirstName() { return null; } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertyDefaultMethod = findMethod(Customer.class, "defaultFirstName"); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyDefaultMethod = findMethodExactOrFail(Customer.class, "defaultFirstName"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -291,8 +291,8 @@ public String validateFirstName(final String firstName) { return null; } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertyValidateMethod = findMethod(Customer.class, "validateFirstName", new Class[] { String.class }); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyValidateMethod = findMethodExactOrFail(Customer.class, "validateFirstName", new Class[] { String.class }); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -320,8 +320,8 @@ public String disableFirstName() { return "disabled"; } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertyDisableMethod = findMethod(Customer.class, "disableFirstName", new Class[] {}); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyDisableMethod = findMethodExactOrFail(Customer.class, "disableFirstName", new Class[] {}); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -350,8 +350,8 @@ public String disableFirstName() { return "disabled"; } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertyDisableMethod = findMethod(Customer.class, "disableFirstName"); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyDisableMethod = findMethodExactOrFail(Customer.class, "disableFirstName"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -379,8 +379,8 @@ public boolean hideFirstName() { return true; } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertyHideMethod = findMethod(Customer.class, "hideFirstName", new Class[] {}); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyHideMethod = findMethodExactOrFail(Customer.class, "hideFirstName", new Class[] {}); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -408,8 +408,8 @@ public boolean hideFirstName() { return true; } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertyHideMethod = findMethod(Customer.class, "hideFirstName"); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyHideMethod = findMethodExactOrFail(Customer.class, "hideFirstName"); facetFactory.process(ProcessMethodContext .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -436,7 +436,7 @@ public String getFirstName() { class CustomerEx extends Customer { } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); facetFactory.process(ProcessMethodContext .forTesting(CustomerEx.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); @@ -472,9 +472,9 @@ public String disableFirstName() { } } - final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName"); - final Method propertyHideMethod = findMethod(CustomerEx.class, "hideFirstName"); - final Method propertyDisableMethod = findMethod(CustomerEx.class, "disableFirstName"); + final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyHideMethod = findMethodExactOrFail(CustomerEx.class, "hideFirstName"); + final Method propertyDisableMethod = findMethodExactOrFail(CustomerEx.class, "disableFirstName"); final ProcessMethodContext processMethodContext = ProcessMethodContext .forTesting(CustomerEx.class, FeatureType.PROPERTY, diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java index c27382027fc..6186dcbfc6f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java @@ -67,7 +67,7 @@ public int getNumberOfOrders() { return 0; } } - final Method actionMethod = findMethod(Customer.class, "getNumberOfOrders"); + final Method actionMethod = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); processEditing(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); @@ -89,7 +89,7 @@ public int getNumberOfOrders() { return 0; } } - final Method actionMethod = findMethod(Customer.class, "getNumberOfOrders"); + final Method actionMethod = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); processEditing(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java index b31058b9f2b..b13b1f48b7b 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java @@ -60,7 +60,7 @@ public String getFirstName() { return null; } } - final Method method = findMethod(Customer.class, "getFirstName"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); processOptional(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java index 210540cb007..27beff59d55 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java @@ -60,7 +60,7 @@ public String getFirstName() { return null; } } - final Method method = findMethod(Customer.class, "getFirstName"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); processNotPersisted(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java index 84c1a967c90..6efa7dd3939 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java @@ -63,7 +63,7 @@ public String getFirstName() { return null; } } - final Method method = findMethod(Customer.class, "getFirstName"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); processOptional(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); @@ -81,7 +81,7 @@ public int getNumberOfOrders() { return 0; } } - final Method method = findMethod(Customer.class, "getNumberOfOrders"); + final Method method = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); processOptional(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); @@ -97,7 +97,7 @@ public String getFirstName() { return null; } } - final Method method = findMethod(Customer.class, "getFirstName"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); processOptional(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); @@ -115,7 +115,7 @@ public int getNumberOfOrders() { return 0; } } - final Method method = findMethod(Customer.class, "getNumberOfOrders"); + final Method method = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); processOptional(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java index 54d0e92ff92..3087a3f5e23 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java @@ -63,7 +63,7 @@ class Customer { @Pattern(regexp = "^A.*", flags = { Pattern.Flag.CASE_INSENSITIVE }) public String getFirstName() { return null; } } - final Method method = findMethod(Customer.class, "getFirstName"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); processRegEx(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); @@ -83,7 +83,7 @@ void testRegExAnnotationIgnoredForNonStringsProperty() { class Customer { public int getNumberOfOrders() { return 0; } } - final Method method = findMethod(Customer.class, "getNumberOfOrders"); + final Method method = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); processRegEx(facetFactory, ProcessMethodContext .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java index 2c1c1debfc8..eeccf2d0fcc 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java @@ -65,7 +65,7 @@ public String getFirstName() { return null; } } - final Method method = findMethod(Customer.class, "getFirstName"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); // when final FacetFactory.ProcessMethodContext processMethodContext = @@ -90,7 +90,7 @@ public String getFirstName() { return null; } } - final Method method = findMethod(Customer.class, "getFirstName"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); final FacetFactory.ProcessMethodContext processMethodContext = ProcessMethodContext @@ -116,7 +116,7 @@ public String getFirstName() { return null; } } - final Method method = findMethod(Customer.class, "getFirstName"); + final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); final FacetFactory.ProcessMethodContext processMethodContext = ProcessMethodContext From 688cf466a39d53808a4e89cfc2d5eae132689af7 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 16:17:59 +0200 Subject: [PATCH 24/37] CAUSEWAY-3409: resurrect ChoicesFacetFromBoundedAnnotationFactoryTest --- ...FacetFromBoundedAnnotationFactoryTest.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java index 5c6e4fca333..40772fffe3f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/domainobject/ChoicesFacetFromBoundedAnnotationFactoryTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -27,15 +28,12 @@ import org.apache.causeway.applib.annotation.Bounding; import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.choices.ChoicesFacet; -import lombok.val; - class ChoicesFacetFromBoundedAnnotationFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private DomainObjectAnnotationFacetFactory facetFactory; @@ -49,19 +47,21 @@ protected void tearDown() { facetFactory = null; } - public void testBoundedAnnotationPickedUpOnClass() { + @Test + void boundedAnnotationPickedUpOnClass() { @DomainObject(bounding = Bounding.BOUNDED) class Customer { } + objectScenario(Customer.class, (processClassContext, facetHolder) -> { + //when + facetFactory.processBounded(processClassContext.synthesizeOnType(DomainObject.class), processClassContext); + //then + final Facet facet = facetHolder.getFacet(ChoicesFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ChoicesFacetFromBoundedAbstract); - val context = ProcessClassContext - .forTesting(Customer.class, methodRemover, facetedMethod); - facetFactory.processBounded(context.synthesizeOnType(DomainObject.class), context); - - final Facet facet = facetedMethod.getFacet(ChoicesFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ChoicesFacetFromBoundedAbstract); + assertNoMethodsRemoved(); + }); - assertNoMethodsRemoved(); } } From a281bcbb7cbc0f05682570e6ad62e1b020555a0b Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 16:26:42 +0200 Subject: [PATCH 25/37] CAUSEWAY-3409: resurrect DisabledAnnotationOnPropertyFacetFactoryTest --- ...dAnnotationOnPropertyFacetFactoryTest.java | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java index 6186dcbfc6f..316f5eb95ef 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/DisabledAnnotationOnPropertyFacetFactoryTest.java @@ -18,10 +18,9 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property; -import java.lang.reflect.Method; - import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -30,17 +29,17 @@ import org.apache.causeway.applib.annotation.Editing; import org.apache.causeway.applib.annotation.Property; +import org.apache.causeway.core.metamodel.consent.Consent.VetoReason; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.DisabledFacetAbstract; import lombok.val; class DisabledAnnotationOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; @@ -60,48 +59,49 @@ private void processEditing( facetFactory.processEditing(processMethodContext, propertyIfAny); } - public void testDisabledAnnotationPickedUpOnProperty() { + @Test + void disabledAnnotationPickedUpOnProperty() { class Customer { @Property(editing = Editing.DISABLED) - public int getNumberOfOrders() { - return 0; - } + public int getNumberOfOrders() { return 0; } } - final Method actionMethod = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); - - processEditing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); + propertyScenario(Customer.class, "numberOfOrders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processEditing(facetFactory, processMethodContext); - final Facet facet = facetedMethod.getFacet(DisabledFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof DisabledFacetAbstract); + // then + final Facet facet = facetedMethod.getFacet(DisabledFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof DisabledFacetAbstract); - final DisabledFacet disabledFacet = (DisabledFacet) facet; - assertThat(disabledFacet.disabledReason(null), is("Always disabled")); + final DisabledFacet disabledFacet = (DisabledFacet) facet; + assertThat(disabledFacet.disabledReason(null).map(VetoReason::string).orElse(null), is("Disabled via @Property annotation, reason not given.")); - assertNoMethodsRemoved(); + assertNoMethodsRemoved(); + }); } - public void testDisabledAnnotationWithReason() { + @Test + void disabledAnnotationWithReason() { class Customer { @Property(editing = Editing.DISABLED, editingDisabledReason = "Oh no you don't!") - public int getNumberOfOrders() { - return 0; - } + public int getNumberOfOrders() { return 0;} } - final Method actionMethod = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); + propertyScenario(Customer.class, "numberOfOrders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processEditing(facetFactory, processMethodContext); + // then - processEditing(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); - final Facet facet = facetedMethod.getFacet(DisabledFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof DisabledFacetAbstract); - final DisabledFacet disabledFacet = (DisabledFacet) facet; - assertThat(disabledFacet.disabledReason(null), is("Oh no you don't!")); + final Facet facet = facetedMethod.getFacet(DisabledFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof DisabledFacetAbstract); - assertNoMethodsRemoved(); - } + final DisabledFacet disabledFacet = (DisabledFacet) facet; + assertThat(disabledFacet.disabledReason(null).map(VetoReason::string).orElse(null), is("Oh no you don't!")); + assertNoMethodsRemoved(); + }); + } } From 387393464c4a55b17f1fb6a06c7fdaab0ebea72a Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 16:28:31 +0200 Subject: [PATCH 26/37] CAUSEWAY-3409: resurrect PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest --- ...ithSnapshotOnPropertyFacetFactoryTest.java | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java index 27beff59d55..23364d1cab5 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest.java @@ -18,9 +18,8 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property; -import java.lang.reflect.Method; - import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -29,15 +28,14 @@ import org.apache.causeway.applib.annotation.Snapshot; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.propcoll.memserexcl.SnapshotExcludeFacet; import org.apache.causeway.core.metamodel.facets.properties.property.snapshot.SnapshotExcludeFacetForPropertyAnnotation; import lombok.val; class PropertyAnnotationWithSnapshotOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; @@ -52,25 +50,23 @@ private void processNotPersisted( facetFactory.processSnapshot(processMethodContext, propertyIfAny); } - public void testAnnotationPickedUpOnProperty() { + @Test + void annotationPickedUpOnProperty() { class Customer { @Property(snapshot = Snapshot.EXCLUDED) - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); - - processNotPersisted(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(SnapshotExcludeFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof SnapshotExcludeFacetForPropertyAnnotation); - - assertNoMethodsRemoved(); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processNotPersisted(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(SnapshotExcludeFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof SnapshotExcludeFacetForPropertyAnnotation); + + assertNoMethodsRemoved(); + }); } - } From 61b5c7959c251117b4510edf6cc9865d5f59d614 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 16:37:15 +0200 Subject: [PATCH 27/37] CAUSEWAY-3409: resurrect PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest --- ...eAnnotationOnPropertyFacetFactoryTest.java | 92 ++++++++-------- .../PropertyLayoutAnnotationFactoryTest.java | 100 +++++++----------- 2 files changed, 80 insertions(+), 112 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java index 6efa7dd3939..7c4657c698f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java @@ -18,9 +18,8 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property; -import java.lang.reflect.Method; - import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.lang.Nullable; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -31,8 +30,7 @@ import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByNullableAnnotationOnProperty; @@ -40,7 +38,7 @@ import lombok.val; class PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; @@ -55,72 +53,68 @@ private void processOptional( facetFactory.processOptional(processMethodContext, propertyIfAny); } - public void testPropertyAnnotationWithOptionalityPickedUpOnProperty() { + @Test + void propertyAnnotationWithOptionalityPickedUpOnProperty() { class Customer { @Property(optionality = Optionality.OPTIONAL) - public String getFirstName() { - return null; - } + public String getFirstName() { return null;} } - final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); - - processOptional(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(MandatoryFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof MandatoryFacetForPropertyAnnotation.Optional); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + //when + processOptional(facetFactory, processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(MandatoryFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof MandatoryFacetForPropertyAnnotation.Optional); + }); } - public void testPropertyAnnotationIgnoredForPrimitiveOnProperty() { + @Test + void propertyAnnotationIgnoredForPrimitiveOnProperty() { class Customer { @Property(optionality = Optionality.OPTIONAL) - public int getNumberOfOrders() { - return 0; - } + public int getNumberOfOrders() { return 0;} } - final Method method = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); - - processOptional(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - assertNotNull(facetedMethod.getFacet(MandatoryFacet.class)); + propertyScenario(Customer.class, "numberOfOrders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + //when + processOptional(facetFactory, processMethodContext); + //then + assertNotNull(facetedMethod.getFacet(MandatoryFacet.class)); + }); } - public void testNullableAnnotationPickedUpOnProperty() { + @Test + void nullableAnnotationPickedUpOnProperty() { class Customer { @Nullable - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); - - processOptional(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(MandatoryFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof MandatoryFacetInvertedByNullableAnnotationOnProperty); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + //when + processOptional(facetFactory, processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(MandatoryFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof MandatoryFacetInvertedByNullableAnnotationOnProperty); + }); } - public void testNullableAnnotationIgnoredForPrimitiveOnProperty() { + @Test + void nullableAnnotationIgnoredForPrimitiveOnProperty() { class Customer { @Nullable - public int getNumberOfOrders() { - return 0; - } + public int getNumberOfOrders() { return 0; } } - final Method method = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); - - processOptional(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - assertNull(facetedMethod.getFacet(MandatoryFacet.class)); + propertyScenario(Customer.class, "numberOfOrders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + //when + processOptional(facetFactory, processMethodContext); + //then + assertNull(facetedMethod.getFacet(MandatoryFacet.class)); + }); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java index eeccf2d0fcc..1f2266ea270 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PropertyLayoutAnnotationFactoryTest.java @@ -18,8 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.properties.propertylayout; -import java.lang.reflect.Method; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -36,9 +34,7 @@ import org.apache.causeway.applib.annotation.PropertyLayout; import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; import org.apache.causeway.core.metamodel.facets.all.i8n.staatic.HasStaticText; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; @@ -47,7 +43,7 @@ import lombok.val; class PropertyLayoutAnnotationFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyLayoutFacetFactory facetFactory; @@ -57,81 +53,59 @@ protected void setUp() { } @Test - void testPropertyLayoutAnnotation_named() { + void propertyLayoutAnnotation_named() { class Customer { @PropertyLayout(named = "1st name") - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); - - // when - final FacetFactory.ProcessMethodContext processMethodContext = - ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod); - - facetFactory.process(processMethodContext); - - // then - val facet = facetedMethod.getFacet(MemberNamedFacet.class); - assertThat(facet, is(notNullValue())); - assertThat(facet, is(instanceOf(NamedFacetForPropertyLayoutAnnotation.class))); - assertThat(((HasStaticText)facet).text(), is(equalTo("1st name"))); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + //when + facetFactory.process(processMethodContext); + //then + val facet = facetedMethod.getFacet(MemberNamedFacet.class); + assertThat(facet, is(notNullValue())); + assertThat(facet, is(instanceOf(NamedFacetForPropertyLayoutAnnotation.class))); + assertThat(((HasStaticText)facet).text(), is(equalTo("1st name"))); + }); } @Test - void testPropertyLayoutAnnotation_hidden() { + void propertyLayoutAnnotation_hidden() { class Customer { @PropertyLayout(hidden = Where.OBJECT_FORMS) - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); - - final FacetFactory.ProcessMethodContext processMethodContext = - ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod); - - // when - facetFactory.process(processMethodContext); - - // then - final Facet facet = facetedMethod.getFacet(HiddenFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof HiddenFacetForPropertyLayoutAnnotation); - val propLayoutFacetAnnotation = (HiddenFacetForPropertyLayoutAnnotation) facet; - assertEquals(Where.OBJECT_FORMS, propLayoutFacetAnnotation.where()); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + //when + facetFactory.process(processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(HiddenFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof HiddenFacetForPropertyLayoutAnnotation); + val propLayoutFacetAnnotation = (HiddenFacetForPropertyLayoutAnnotation) facet; + assertEquals(Where.OBJECT_FORMS, propLayoutFacetAnnotation.where()); + }); } @Test - void testPropertyLayoutAnnotation_labelPosition() { + void propertyLayoutAnnotation_labelPosition() { class Customer { @PropertyLayout(labelPosition = LabelPosition.LEFT) - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); - - final FacetFactory.ProcessMethodContext processMethodContext = - ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod); - - // when - facetFactory.process(processMethodContext); - - // then - final Facet facet = facetedMethod.getFacet(LabelAtFacet.class); - assertThat(facet, is(notNullValue())); - assertThat(facet, is(instanceOf(LabelAtFacetForPropertyLayoutAnnotation.class))); - val layoutAnnotation = (LabelAtFacetForPropertyLayoutAnnotation) facet; - assertThat(layoutAnnotation.label(), is(equalTo(LabelPosition.LEFT))); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + //when + facetFactory.process(processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(LabelAtFacet.class); + assertThat(facet, is(notNullValue())); + assertThat(facet, is(instanceOf(LabelAtFacetForPropertyLayoutAnnotation.class))); + val layoutAnnotation = (LabelAtFacetForPropertyLayoutAnnotation) facet; + assertThat(layoutAnnotation.label(), is(equalTo(LabelPosition.LEFT))); + }); } - } From 0d2d3aff411fc9e54eed13fdcbca1ad9cc0f17bc Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 16:39:33 +0200 Subject: [PATCH 28/37] CAUSEWAY-3409: resurrect PrototypeFacetAnnotationFactoryTest --- .../PrototypeFacetAnnotationFactoryTest.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java index 6534c7f4263..9249e6cf9e1 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/PrototypeFacetAnnotationFactoryTest.java @@ -18,10 +18,9 @@ */ package org.apache.causeway.core.metamodel.facets.actions.action; -import java.lang.reflect.Method; - import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -30,14 +29,14 @@ import org.apache.causeway.applib.annotation.RestrictTo; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacet; import org.apache.causeway.core.metamodel.facets.actions.prototype.PrototypeFacetAbstract; import lombok.val; class PrototypeFacetAnnotationFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private ActionAnnotationFacetFactory facetFactory; @@ -57,22 +56,22 @@ protected void tearDown() { facetFactory = null; } - public void testAnnotationPickedUp() { + @Test + void testAnnotationPickedUp() { class Customer { @Action(restrictTo = RestrictTo.PROTOTYPING) - public void someAction() { - } + public void someAction() {} } - final Method actionMethod = findMethodExactOrFail(Customer.class, "someAction"); - - processRestrictTo(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PrototypeFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PrototypeFacetAbstract); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + processRestrictTo(facetFactory, processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(PrototypeFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PrototypeFacetAbstract); - assertNoMethodsRemoved(); + assertNoMethodsRemoved(); + }); } } From 7bb3dc762a03c79ac97645eb51408117c4a03194 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 16:41:15 +0200 Subject: [PATCH 29/37] CAUSEWAY-3409: resurrect MandatoryAnnotationFacetFactoryTest --- .../MandatoryAnnotationFacetFactoryTest.java | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java index b13b1f48b7b..3b86a2fda8c 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/MandatoryAnnotationFacetFactoryTest.java @@ -18,9 +18,8 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property; -import java.lang.reflect.Method; - import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -29,15 +28,14 @@ import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation; import lombok.val; class MandatoryAnnotationFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; @@ -52,23 +50,21 @@ private void processOptional( facetFactory.processOptional(processMethodContext, propertyIfAny); } - public void testMandatoryAnnotationPickedUpOnProperty() { + @Test + void mandatoryAnnotationPickedUpOnProperty() { class Customer { @Property(optionality = Optionality.MANDATORY) - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); - - processOptional(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(MandatoryFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof MandatoryFacetForPropertyAnnotation); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processOptional(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(MandatoryFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof MandatoryFacetForPropertyAnnotation); + }); } - } From 89095a8d98af4b2ac5aaa128723848ced6938cfc Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 17:02:54 +0200 Subject: [PATCH 30/37] CAUSEWAY-3409: resurrect PropertyMethodsFacetFactoryTest --- .../facets/FacetFactoryTestAbstract.java | 2 +- .../PropertyMethodsFacetFactoryTest.java | 589 ++++++++---------- 2 files changed, 266 insertions(+), 325 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index 03e9bd1e51a..03f04eb4344 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -197,7 +197,7 @@ protected void propertyScenario( final Class declaringClass, final String propertyName, final MemberScenarioConsumer consumer) { val scenario = Scenario.prop(getMetaModelContext(), declaringClass, propertyName); val processMethodContext = ProcessMethodContext - .forTesting(declaringClass, null, scenario.annotatedMethod(), methodRemover, scenario.facetedMethod()); + .forTesting(declaringClass, FeatureType.PROPERTY, scenario.annotatedMethod(), methodRemover, scenario.facetedMethod()); consumer.accept(processMethodContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java index 008466a5322..0f07e424a97 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java @@ -20,15 +20,14 @@ import java.lang.reflect.Method; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facetapi.FeatureType; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacet; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethod; import org.apache.causeway.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethodFactory; @@ -62,438 +61,380 @@ import lombok.val; class PropertyMethodsFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { - public void testPropertyAccessorFacetIsInstalledAndMethodRemoved() { + @Test + void propertyAccessorFacetIsInstalledAndMethodRemoved() { val facetFactory = new PropertyAccessorFacetViaAccessorFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") public String getFirstName() { return null; } } final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PropertyAccessorFacetViaAccessor); - final PropertyAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (PropertyAccessorFacetViaAccessor) facet; - assertEquals(propertyAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail()); - - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyAccessorMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PropertyAccessorFacetViaAccessor); + final PropertyAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (PropertyAccessorFacetViaAccessor) facet; + assertMethodEquals(propertyAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyAccessorMethod)); + }); } - public void testSetterFacetIsInstalledForSetterMethodAndMethodRemoved() { + @Test + void setterFacetIsInstalledForSetterMethodAndMethodRemoved() { val facetFactory = new PropertySetterFacetFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public void setFirstName(final String firstName) { - } + public String getFirstName() { return null; } + public void setFirstName(final String firstName) { } } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); final Method propertySetterMethod = findMethodExactOrFail(Customer.class, "setFirstName", new Class[] { String.class }); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertySetterFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PropertySetterFacetViaSetterMethod); - final PropertySetterFacetViaSetterMethod propertySetterFacet = (PropertySetterFacetViaSetterMethod) facet; - assertEquals(propertySetterMethod, propertySetterFacet.getMethods().getFirstElseFail()); - - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertySetterMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertySetterFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PropertySetterFacetViaSetterMethod); + final PropertySetterFacetViaSetterMethod propertySetterFacet = (PropertySetterFacetViaSetterMethod) facet; + assertMethodEquals(propertySetterMethod, propertySetterFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertySetterMethod)); + }); } - public void testInitializationFacetIsInstalledForSetterMethodAndMethodRemoved() { + @Test + void initializationFacetIsInstalledForSetterMethodAndMethodRemoved() { val facetFactory = new PropertySetterFacetFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public void setFirstName(final String firstName) { - } + public String getFirstName() { return null; } + public void setFirstName(final String firstName) {} } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); final Method propertySetterMethod = findMethodExactOrFail(Customer.class, "setFirstName", new Class[] { String.class }); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyInitializationFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PropertyInitializationFacet); - final PropertyInitializationFacetViaSetterMethod propertySetterFacet = (PropertyInitializationFacetViaSetterMethod) facet; - assertEquals(propertySetterMethod, propertySetterFacet.getMethods().getFirstElseFail()); - - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertySetterMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyInitializationFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PropertyInitializationFacet); + final PropertyInitializationFacetViaSetterMethod propertySetterFacet = (PropertyInitializationFacetViaSetterMethod) facet; + assertMethodEquals(propertySetterMethod, propertySetterFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertySetterMethod)); + }); } - public void testSetterFacetIsInstalledMeansNoDisabledOrDerivedFacetsInstalled() { + @Test + void setterFacetIsInstalledMeansNoDisabledOrDerivedFacetsInstalled() { val facetFactory = new PropertySetterFacetFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public void setFirstName(final String firstName) { - } + public String getFirstName() { return null; } + public void setFirstName(final String firstName) {} } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); - - assertNull(facetedMethod.getFacet(SnapshotExcludeFacet.class)); - assertNull(facetedMethod.getFacet(SnapshotExcludeFacet.class)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + assertNull(facetedMethod.getFacet(SnapshotExcludeFacet.class)); + }); } - public void testClearFacetViaSetterIfNoExplicitClearMethod() { + @Test + void clearFacetViaSetterIfNoExplicitClearMethod() { val facetFactory = new PropertySetterFacetFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public void setFirstName(final String firstName) { - } + public String getFirstName() { return null; } + public void setFirstName(final String firstName) { } } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); final Method propertySetterMethod = findMethodExactOrFail(Customer.class, "setFirstName", new Class[] { String.class }); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyClearFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PropertyClearFacetViaSetterMethod); - final PropertyClearFacetViaSetterMethod propertyClearFacet = (PropertyClearFacetViaSetterMethod) facet; - assertEquals(propertySetterMethod, propertyClearFacet.getMethods().getFirstElseFail()); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyClearFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PropertyClearFacetViaSetterMethod); + final PropertyClearFacetViaSetterMethod propertyClearFacet = (PropertyClearFacetViaSetterMethod) facet; + assertMethodEquals(propertySetterMethod, propertyClearFacet.getMethods().getFirstElseFail().asMethodElseFail()); + }); } - public void testChoicesFacetFoundAndMethodRemoved() { + @Test + void choicesFacetFoundAndMethodRemoved() { val facetFactory = new PropertyChoicesFacetViaMethodFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public String[] choicesFirstName() { - return null; - } + public String getFirstName() { return null; } + public String[] choicesFirstName() { return null; } } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - final Method propertyChoicesMethod = findMethodExactOrFail(Customer.class, "choicesFirstName"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); - final Facet facet = facetedMethod.getFacet(PropertyChoicesFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PropertyChoicesFacetViaMethod); - final PropertyChoicesFacetViaMethod propertyChoicesFacet = (PropertyChoicesFacetViaMethod) facet; - assertEquals(propertyChoicesMethod, propertyChoicesFacet.getMethods().getFirstElseFail()); + final Method propertyChoicesMethod = findMethodExactOrFail(Customer.class, "choicesFirstName"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyChoicesMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyChoicesFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PropertyChoicesFacetViaMethod); + final PropertyChoicesFacetViaMethod propertyChoicesFacet = (PropertyChoicesFacetViaMethod) facet; + assertMethodEquals(propertyChoicesMethod, propertyChoicesFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyChoicesMethod)); + }); } - public void testAutoCompleteFacetFoundAndMethodRemoved() { - + @Test + void autoCompleteFacetFoundAndMethodRemoved() { val facetFactory = new PropertyAutoCompleteFacetMethodFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public String[] autoCompleteFirstName(final String searchArg) { - return null; - } + public String getFirstName() { return null; } + public String[] autoCompleteFirstName(final String searchArg) { return null; } } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - final Method propertyAutoCompleteMethod = findMethodExactOrFail(Customer.class, "autoCompleteFirstName", new Class[]{String.class}); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyAutoCompleteFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PropertyAutoCompleteFacetMethod); - final PropertyAutoCompleteFacetMethod propertyAutoCompleteFacet = (PropertyAutoCompleteFacetMethod) facet; - assertEquals(propertyAutoCompleteMethod, propertyAutoCompleteFacet.getMethods().getFirstElseFail()); + final Method propertyAutoCompleteMethod = findMethodExactOrFail(Customer.class, "autoCompleteFirstName", new Class[]{String.class}); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyAutoCompleteMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyAutoCompleteFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PropertyAutoCompleteFacetMethod); + final PropertyAutoCompleteFacetMethod propertyAutoCompleteFacet = (PropertyAutoCompleteFacetMethod) facet; + assertMethodEquals(propertyAutoCompleteMethod, propertyAutoCompleteFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyAutoCompleteMethod)); + }); } - public void testDefaultFacetFoundAndMethodRemoved() { + @Test + void defaultFacetFoundAndMethodRemoved() { val facetFactory = new PropertyDefaultFacetViaMethodFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public String defaultFirstName() { - return null; - } + public String getFirstName() { return null; } + public String defaultFirstName() { return null; } } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - final Method propertyDefaultMethod = findMethodExactOrFail(Customer.class, "defaultFirstName"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); - final Facet facet = facetedMethod.getFacet(PropertyDefaultFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PropertyDefaultFacetViaMethod); - final PropertyDefaultFacetViaMethod propertyDefaultFacet = (PropertyDefaultFacetViaMethod) facet; - assertEquals(propertyDefaultMethod, propertyDefaultFacet.getMethods().getFirstElseFail()); + final Method propertyDefaultMethod = findMethodExactOrFail(Customer.class, "defaultFirstName"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyDefaultMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyDefaultFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PropertyDefaultFacetViaMethod); + final PropertyDefaultFacetViaMethod propertyDefaultFacet = (PropertyDefaultFacetViaMethod) facet; + assertMethodEquals(propertyDefaultMethod, propertyDefaultFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyDefaultMethod)); + }); } - public void testValidateFacetFoundAndMethodRemoved() { + @Test + void validateFacetFoundAndMethodRemoved() { val facetFactory = new PropertyValidateFacetViaMethodFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public String validateFirstName(final String firstName) { - return null; - } + public String getFirstName() { return null; } + public String validateFirstName(final String firstName) { return null;} } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - final Method propertyValidateMethod = findMethodExactOrFail(Customer.class, "validateFirstName", new Class[] { String.class }); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyValidateFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PropertyValidateFacetViaMethod); - final PropertyValidateFacetViaMethod propertyValidateFacet = (PropertyValidateFacetViaMethod) facet; - assertEquals(propertyValidateMethod, propertyValidateFacet.getMethods().getFirstElseFail()); + final Method propertyValidateMethod = findMethodExactOrFail(Customer.class, "validateFirstName", new Class[] { String.class }); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyValidateMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyValidateFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PropertyValidateFacetViaMethod); + final PropertyValidateFacetViaMethod propertyValidateFacet = (PropertyValidateFacetViaMethod) facet; + assertMethodEquals(propertyValidateMethod, propertyValidateFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyValidateMethod)); + }); } - public void testDisableFacetFoundAndMethodRemoved() { + @Test + void disableFacetFoundAndMethodRemoved() { val facetFactory = new DisableForContextFacetViaMethodFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public String disableFirstName() { - return "disabled"; - } + public String getFirstName() { return null; } + public String disableFirstName() { return "disabled"; } } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - final Method propertyDisableMethod = findMethodExactOrFail(Customer.class, "disableFirstName", new Class[] {}); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); - final Facet facet = facetedMethod.getFacet(DisableForContextFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof DisableForContextFacetViaMethod); - final DisableForContextFacetViaMethod disableForContextFacet = (DisableForContextFacetViaMethod) facet; - assertEquals(propertyDisableMethod, disableForContextFacet.getMethods().getFirstElseFail()); + final Method propertyDisableMethod = findMethodExactOrFail(Customer.class, "disableFirstName", new Class[] {}); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyDisableMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(DisableForContextFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof DisableForContextFacetViaMethod); + final DisableForContextFacetViaMethod disableForContextFacet = (DisableForContextFacetViaMethod) facet; + assertMethodEquals(propertyDisableMethod, disableForContextFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyDisableMethod)); + }); } - public void testDisableFacetNoArgsFoundAndMethodRemoved() { - + @Test + void disableFacetNoArgsFoundAndMethodRemoved() { val facetFactory = new DisableForContextFacetViaMethodFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public String disableFirstName() { - return "disabled"; - } + public String getFirstName() { return null; } + public String disableFirstName() { return "disabled"; } } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - final Method propertyDisableMethod = findMethodExactOrFail(Customer.class, "disableFirstName"); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(DisableForContextFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof DisableForContextFacetViaMethod); - final DisableForContextFacetViaMethod disableForContextFacet = (DisableForContextFacetViaMethod) facet; - assertEquals(propertyDisableMethod, disableForContextFacet.getMethods().getFirstElseFail()); + final Method propertyDisableMethod = findMethodExactOrFail(Customer.class, "disableFirstName"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyDisableMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(DisableForContextFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof DisableForContextFacetViaMethod); + final DisableForContextFacetViaMethod disableForContextFacet = (DisableForContextFacetViaMethod) facet; + assertMethodEquals(propertyDisableMethod, disableForContextFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyDisableMethod)); + }); } - public void testHiddenFacetFoundAndMethodRemoved() { + @Test + void hiddenFacetFoundAndMethodRemoved() { val facetFactory = new HideForContextFacetViaMethodFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public boolean hideFirstName() { - return true; - } + public String getFirstName() { return null; } + public boolean hideFirstName() { return true; } } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - final Method propertyHideMethod = findMethodExactOrFail(Customer.class, "hideFirstName", new Class[] {}); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); - final Facet facet = facetedMethod.getFacet(HideForContextFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof HideForContextFacetViaMethod); - final HideForContextFacetViaMethod hideForContextFacet = (HideForContextFacetViaMethod) facet; - assertEquals(propertyHideMethod, hideForContextFacet.getMethods().getFirstElseFail()); + final Method propertyHideMethod = findMethodExactOrFail(Customer.class, "hideFirstName", new Class[] {}); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyHideMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(HideForContextFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof HideForContextFacetViaMethod); + final HideForContextFacetViaMethod hideForContextFacet = (HideForContextFacetViaMethod) facet; + assertMethodEquals(propertyHideMethod, hideForContextFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyHideMethod)); + }); } - public void testHiddenFacetWithNoArgFoundAndMethodRemoved() { + @Test + void hiddenFacetWithNoArgFoundAndMethodRemoved() { val facetFactory = new HideForContextFacetViaMethodFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } - - @SuppressWarnings("unused") - public boolean hideFirstName() { - return true; - } + public String getFirstName() { return null; } + public boolean hideFirstName() { return true; } } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); - final Method propertyHideMethod = findMethodExactOrFail(Customer.class, "hideFirstName"); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(HideForContextFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof HideForContextFacetViaMethod); - final HideForContextFacetViaMethod hideForContextFacet = (HideForContextFacetViaMethod) facet; - assertEquals(propertyHideMethod, hideForContextFacet.getMethods().getFirstElseFail()); + final Method propertyHideMethod = findMethodExactOrFail(Customer.class, "hideFirstName"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyHideMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(HideForContextFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof HideForContextFacetViaMethod); + final HideForContextFacetViaMethod hideForContextFacet = (HideForContextFacetViaMethod) facet; + assertMethodEquals(propertyHideMethod, hideForContextFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyHideMethod)); + }); } - public void testPropertyFoundOnSuperclass() { + @Test + void propertyFoundOnSuperclass() { val facetFactory = new PropertyAccessorFacetViaAccessorFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } - class CustomerEx extends Customer { } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); + final Method propertyAccessorMethod = findMethodExactOrFail(CustomerEx.class, "getFirstName"); - facetFactory.process(ProcessMethodContext - .forTesting(CustomerEx.class, null, propertyAccessorMethod, methodRemover, facetedMethod)); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof PropertyAccessorFacetViaAccessor); + final PropertyAccessorFacetViaAccessor accessorFacet = (PropertyAccessorFacetViaAccessor) facet; + assertMethodEquals(propertyAccessorMethod, accessorFacet.getMethods().getFirstElseFail().asMethodElseFail()); + }); - final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof PropertyAccessorFacetViaAccessor); - final PropertyAccessorFacetViaAccessor accessorFacet = (PropertyAccessorFacetViaAccessor) facet; - assertEquals(propertyAccessorMethod, accessorFacet.getMethods().getFirstElseFail()); } - public void testPropertyFoundOnSuperclassButHelperMethodFoundOnSubclass() { + @Test + void propertyFoundOnSuperclassButHelperMethodFoundOnSubclass() { val facetFactory = new PropertyAccessorFacetViaAccessorFactory(getMetaModelContext()); val facetFactoryForHide = new HideForContextFacetViaMethodFactory(getMetaModelContext()); val facetFactoryForDisable = new DisableForContextFacetViaMethodFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } - + @SuppressWarnings("unused") class CustomerEx extends Customer { - @SuppressWarnings("unused") - public boolean hideFirstName() { - return true; - } - - @SuppressWarnings("unused") - public String disableFirstName() { - return "disabled"; - } + public boolean hideFirstName() { return true; } + public String disableFirstName() { return "disabled";} } - final Method propertyAccessorMethod = findMethodExactOrFail(Customer.class, "getFirstName"); final Method propertyHideMethod = findMethodExactOrFail(CustomerEx.class, "hideFirstName"); final Method propertyDisableMethod = findMethodExactOrFail(CustomerEx.class, "disableFirstName"); - final ProcessMethodContext processMethodContext = ProcessMethodContext - .forTesting(CustomerEx.class, FeatureType.PROPERTY, - propertyAccessorMethod, methodRemover, facetedMethod); - facetFactory.process(processMethodContext); - facetFactoryForHide.process(processMethodContext); - facetFactoryForDisable.process(processMethodContext); - - final Facet facet = facetedMethod.getFacet(HideForContextFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof HideForContextFacetViaMethod); - final HideForContextFacetViaMethod hideForContextFacet = (HideForContextFacetViaMethod) facet; - assertEquals(propertyHideMethod, hideForContextFacet.getMethods().getFirstElseFail()); - - final Facet facet2 = facetedMethod.getFacet(DisableForContextFacet.class); - assertNotNull(facet2); - assertTrue(facet2 instanceof DisableForContextFacetViaMethod); - final DisableForContextFacetViaMethod disableForContextFacet = (DisableForContextFacetViaMethod) facet2; - assertEquals(propertyDisableMethod, disableForContextFacet.getMethods().getFirstElseFail()); + propertyScenario(CustomerEx.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + facetFactory.process(processMethodContext); + facetFactoryForHide.process(processMethodContext); + facetFactoryForDisable.process(processMethodContext); + + final Facet facet = facetedMethod.getFacet(HideForContextFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof HideForContextFacetViaMethod); + final HideForContextFacetViaMethod hideForContextFacet = (HideForContextFacetViaMethod) facet; + assertMethodEquals(propertyHideMethod, hideForContextFacet.getMethods().getFirstElseFail().asMethodElseFail()); + + final Facet facet2 = facetedMethod.getFacet(DisableForContextFacet.class); + assertNotNull(facet2); + assertTrue(facet2 instanceof DisableForContextFacetViaMethod); + final DisableForContextFacetViaMethod disableForContextFacet = (DisableForContextFacetViaMethod) facet2; + assertMethodEquals(propertyDisableMethod, disableForContextFacet.getMethods().getFirstElseFail().asMethodElseFail()); + }); } } From a49202011a4cb22d0305ce13d5013be141059f1c Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 17:10:41 +0200 Subject: [PATCH 31/37] CAUSEWAY-3409: resurrect CollectionAnnotationFacetFactoryTest_typeOf --- .../facets/FacetFactoryTestAbstract.java | 13 +++ ...tionAnnotationFacetFactoryTest_typeOf.java | 97 +++++++++---------- 2 files changed, 57 insertions(+), 53 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index 03f04eb4344..ea75b3a4334 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -201,6 +201,19 @@ protected void propertyScenario( consumer.accept(processMethodContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); } + /** + * Collection scenario. + */ + protected void collectionScenario( + final Class declaringClass, final String propertyName, final MemberScenarioConsumer consumer) { + val scenario = Scenario.prop(getMetaModelContext(), declaringClass, propertyName); + val processMethodContext = ProcessMethodContext + .forTesting(declaringClass, FeatureType.COLLECTION, scenario.annotatedMethod(), methodRemover, scenario.facetedMethod()); + consumer.accept(processMethodContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); + } + + + /** * DomainObject scenario. */ diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java index 35e57b71155..71ebd76851d 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest_typeOf.java @@ -18,13 +18,13 @@ */ package org.apache.causeway.core.metamodel.facets.collections.collection; -import java.lang.reflect.Method; import java.util.Collection; import java.util.Optional; import org.hamcrest.Matchers; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -33,13 +33,12 @@ import org.apache.causeway.core.config.progmodel.ProgrammingModelConstants.CollectionSemantics; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacetFromFeature; class CollectionAnnotationFacetFactoryTest_typeOf -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private CollectionAnnotationFacetFactory facetFactory; @@ -53,71 +52,63 @@ protected void tearDown() { facetFactory = null; } - public void testTypeOfFacetInferredForActionWithGenericCollectionReturnType() { + @Test + void typeOfFacetInferredForActionWithGenericCollectionReturnType() { class Order { } + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public Collection someAction() { - return null; - } + public Collection someAction() { return null;} } - final Method actionMethod = findMethodExactOrFail(Customer.class, "someAction"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, actionMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TypeOfFacetFromFeature); - final TypeOfFacetFromFeature typeOfFacetInferredFromGenerics = (TypeOfFacetFromFeature) facet; - assertEquals(Order.class, typeOfFacetInferredFromGenerics.value().getElementType()); - + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.process(processMethodContext); + //then + final Facet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TypeOfFacetFromFeature); + final TypeOfFacetFromFeature typeOfFacetInferredFromGenerics = (TypeOfFacetFromFeature) facet; + assertEquals(Order.class, typeOfFacetInferredFromGenerics.value().getElementType()); + }); } - public void testTypeOfFacetInferredForCollectionWithGenericCollectionReturnType() { + @Test + void typeOfFacetInferredForCollectionWithGenericCollectionReturnType() { class Order { } + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public Collection getOrders() { - return null; - } + public Collection getOrders() { return null; } } - - final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof TypeOfFacetFromFeature); - final TypeOfFacetFromFeature typeOfFacetInferredFromGenerics = (TypeOfFacetFromFeature) facet; - assertEquals(Order.class, typeOfFacetInferredFromGenerics.value().getElementType()); - + collectionScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof TypeOfFacetFromFeature); + final TypeOfFacetFromFeature typeOfFacetInferredFromGenerics = (TypeOfFacetFromFeature) facet; + assertEquals(Order.class, typeOfFacetInferredFromGenerics.value().getElementType()); + }); } - public void testTypeOfFacetIsInferredForCollectionFromOrderArray() { + @Test + void typeOfFacetIsInferredForCollectionFromOrderArray() { class Order { } + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public Order[] getOrders() { - return null; - } + public Order[] getOrders() { return null;} } - final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); - - final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); - assertNotNull(facet); - assertEquals(Order.class, facet.value().getElementType()); - assertThat(facet.value().getCollectionSemantics(), Matchers.is(Optional.of(CollectionSemantics.ARRAY))); - + collectionScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final TypeOfFacet facet = facetedMethod.getFacet(TypeOfFacet.class); + assertNotNull(facet); + assertEquals(Order.class, facet.value().getElementType()); + assertThat(facet.value().getCollectionSemantics(), Matchers.is(Optional.of(CollectionSemantics.ARRAY))); + }); } - } From cea661f2b878275a0411850b43b21db6c14bfcf4 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 17:19:09 +0200 Subject: [PATCH 32/37] CAUSEWAY-3409: resurrect CollectionFieldMethodsFacetFactoryTest --- .../facets/FacetFactoryTestAbstract.java | 2 - ...ollectionFieldMethodsFacetFactoryTest.java | 212 +++++++++--------- 2 files changed, 102 insertions(+), 112 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index ea75b3a4334..dbda815266e 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -212,8 +212,6 @@ protected void collectionScenario( consumer.accept(processMethodContext, scenario.facetHolder, scenario.facetedMethod, scenario.facetedMethodParameter); } - - /** * DomainObject scenario. */ diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java index a38af07b61b..8924fed9bb5 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java @@ -23,13 +23,13 @@ import java.util.List; import java.util.Set; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessor; import org.apache.causeway.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessorFactory; import org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet; @@ -37,158 +37,150 @@ import lombok.val; class CollectionFieldMethodsFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { - public void testPropertyAccessorFacetIsInstalledForJavaUtilCollectionAndMethodRemoved() { + @Test + void propertyAccessorFacetIsInstalledForJavaUtilCollectionAndMethodRemoved() { val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); - + @SuppressWarnings({ "rawtypes", "unused" }) class Customer { - @SuppressWarnings({ "rawtypes", "unused" }) - public Collection getOrders() { - return null; - } + public Collection getOrders() { return null; } } - final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); - final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; - assertEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail()); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + collectionScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); + final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; + assertMethodEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + }); } - - public void testPropertyAccessorFacetIsInstalledForJavaUtilListAndMethodRemoved() { + @Test + void propertyAccessorFacetIsInstalledForJavaUtilListAndMethodRemoved() { val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); - + @SuppressWarnings({ "rawtypes", "unused" }) class Customer { - @SuppressWarnings({ "rawtypes", "unused" }) - public List getOrders() { - return null; - } + public List getOrders() { return null; } } - final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); - final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; - assertEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail()); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + collectionScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); + final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; + assertMethodEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + }); } - public void testPropertyAccessorFacetIsInstalledForJavaUtilSetAndMethodRemoved() { + @Test + void propertyAccessorFacetIsInstalledForJavaUtilSetAndMethodRemoved() { val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); - + @SuppressWarnings({ "rawtypes", "unused" }) class Customer { - @SuppressWarnings({ "rawtypes", "unused" }) - public Set getOrders() { - return null; - } + public Set getOrders() { return null; } } - final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); - final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; - assertEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail()); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + collectionScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); + final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; + assertMethodEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + }); } - public void testPropertyAccessorFacetIsInstalledForObjectArrayAndMethodRemoved() { + @Test + void propertyAccessorFacetIsInstalledForObjectArrayAndMethodRemoved() { val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); - + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public Object[] getOrders() { - return null; - } + public Object[] getOrders() { return null; } } - final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); - final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; - assertEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail()); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + collectionScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); + final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; + assertMethodEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + }); } public void testPropertyAccessorFacetIsInstalledForOrderArrayAndMethodRemoved() { val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); - - @SuppressWarnings("hiding") class Order { } + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public Order[] getOrders() { - return null; - } + public Order[] getOrders() { return null; } } - final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); - final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; - assertEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail()); + final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + collectionScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); + final CollectionAccessorFacetViaAccessor propertyAccessorFacetViaAccessor = (CollectionAccessorFacetViaAccessor) facet; + assertMethodEquals(collectionAccessorMethod, propertyAccessorFacetViaAccessor.getMethods().getFirstElseFail().asMethodElseFail()); + + assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(collectionAccessorMethod)); + }); } - public void testMethodFoundInSuperclass() { + @Test + void methodFoundInSuperclass() { val facetFactory = new CollectionAccessorFacetViaAccessorFactory(getMetaModelContext()); - - @SuppressWarnings("hiding") class Order { } + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public Collection getOrders() { - return null; - } + public Collection getOrders() { return null; } } - class CustomerEx extends Customer { } - - final Method collectionAccessorMethod = findMethodExactOrFail(Customer.class, "getOrders"); - - facetFactory.process(ProcessMethodContext - .forTesting(CustomerEx.class, null, collectionAccessorMethod, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); - final CollectionAccessorFacetViaAccessor collectionAccessorFacetViaMethod = (CollectionAccessorFacetViaAccessor) facet; - assertEquals(collectionAccessorMethod, collectionAccessorFacetViaMethod.getMethods().getFirstElseFail()); + final Method collectionAccessorMethod = findMethodExactOrFail(CustomerEx.class, "getOrders"); + collectionScenario(CustomerEx.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(PropertyOrCollectionAccessorFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof CollectionAccessorFacetViaAccessor); + val collectionAccessorFacetViaMethod = (CollectionAccessorFacetViaAccessor) facet; + assertMethodEquals(collectionAccessorMethod, collectionAccessorFacetViaMethod.getMethods().getFirstElseFail().asMethodElseFail()); + }); } - - static class Order { - } - - } From 2c088aead006491c854179085758c2eecb086eb1 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 17:27:27 +0200 Subject: [PATCH 33/37] CAUSEWAY-3409: resurrect ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest --- ...CollectionLayoutAnnotationFactoryTest.java | 59 ++++----- ...AnnotationOnParameterFacetFactoryTest.java | 113 +++++++++--------- 2 files changed, 79 insertions(+), 93 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java index 3669cb03bbf..6373bd96277 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/collections/layout/annotation/CollectionLayoutAnnotationFactoryTest.java @@ -18,7 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.collections.layout.annotation; -import java.lang.reflect.Method; import java.util.SortedSet; import org.junit.jupiter.api.Test; @@ -36,8 +35,7 @@ import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.commons.internal.collections._Sets; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet; import org.apache.causeway.core.metamodel.facets.all.i8n.staatic.HasStaticText; import org.apache.causeway.core.metamodel.facets.all.named.MemberNamedFacet; @@ -48,50 +46,43 @@ import lombok.val; class CollectionLayoutAnnotationFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { @Test - public void testCollectionLayoutAnnotation_named() { + void collectionLayoutAnnotation_named() { val facetFactory = new CollectionLayoutFacetFactory(getMetaModelContext()); - class Customer { @CollectionLayout(named = "1st names") - public SortedSet getFirstNames() { - return _Sets.newTreeSet(); - } + public SortedSet getFirstNames() { return _Sets.newTreeSet(); } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstNames"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - val facet = facetedMethod.getFacet(MemberNamedFacet.class); - assertThat(facet, is(notNullValue())); - assertThat(facet, is(instanceOf(MemberNamedFacetForCollectionLayoutAnnotation.class))); - assertThat(((HasStaticText)facet).text(), is(equalTo("1st names"))); + collectionScenario(Customer.class, "firstNames", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + val facet = facetedMethod.getFacet(MemberNamedFacet.class); + assertThat(facet, is(notNullValue())); + assertThat(facet, is(instanceOf(MemberNamedFacetForCollectionLayoutAnnotation.class))); + assertThat(((HasStaticText)facet).text(), is(equalTo("1st names"))); + }); } @Test - void testCollectionLayoutAnnotation_hidden() { + void collectionLayoutAnnotation_hidden() { val facetFactory = new CollectionLayoutFacetFactory(getMetaModelContext()); - class Customer { @CollectionLayout(hidden = Where.OBJECT_FORMS) - public SortedSet getFirstNames() { - return _Sets.newTreeSet(); - } + public SortedSet getFirstNames() { return _Sets.newTreeSet(); } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstNames"); - - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(HiddenFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof HiddenFacetForCollectionLayoutAnnotation); - final HiddenFacetForCollectionLayoutAnnotation collLayoutFacetAnnotation = (HiddenFacetForCollectionLayoutAnnotation) facet; - assertEquals(Where.OBJECT_FORMS, collLayoutFacetAnnotation.where()); - + collectionScenario(Customer.class, "firstNames", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(HiddenFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof HiddenFacetForCollectionLayoutAnnotation); + final HiddenFacetForCollectionLayoutAnnotation collLayoutFacetAnnotation = (HiddenFacetForCollectionLayoutAnnotation) facet; + assertEquals(Where.OBJECT_FORMS, collLayoutFacetAnnotation.where()); + }); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java index a558fdc8bb7..e885626a1aa 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java @@ -18,27 +18,24 @@ */ package org.apache.causeway.core.metamodel.facets.param.parameter; -import java.lang.reflect.Method; - import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.lang.Nullable; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.applib.annotation.Optionality; import org.apache.causeway.applib.annotation.Parameter; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet; import org.apache.causeway.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetForParameterAnnotation; import org.apache.causeway.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByNullableAnnotationOnParameter; class ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private ParameterAnnotationFacetFactory facetFactory; @@ -47,72 +44,70 @@ protected void setUp() { facetFactory = new ParameterAnnotationFacetFactory(getMetaModelContext()); } - public void testParameterAnnotationWithOptionalityPickedUpOnActionParameter() { - + @Test + void parameterAnnotationWithOptionalityPickedUpOnActionParameter() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction(@Parameter(optionality = Optionality.OPTIONAL) final String foo) { - } + public void someAction( + @Parameter(optionality = Optionality.OPTIONAL) + final String foo) {} } - final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { String.class }); - - facetFactory.processParamsOptional( - ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, method, null, facetedMethodParameter)); - - final Facet facet = facetedMethodParameter.getFacet(MandatoryFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof MandatoryFacetForParameterAnnotation.Optional); - } - - public void testParameterAnnotationWithOptionalityIgnoredForPrimitiveOnActionParameter() { + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.processParamsOptional(processParameterContext); + //then + final Facet facet = facetedMethodParameter.getFacet(MandatoryFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof MandatoryFacetForParameterAnnotation.Optional); + }); + } + @Test + void parameterAnnotationWithOptionalityIgnoredForPrimitiveOnActionParameter() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction(@Parameter(optionality = Optionality.OPTIONAL) final int foo) { - } + public void someAction( + @Parameter(optionality = Optionality.OPTIONAL) + final int foo) {} } - final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { int.class }); - - facetFactory.processParamsOptional( - ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, method, null, facetedMethodParameter)); - - assertNull(facetedMethod.getFacet(MandatoryFacet.class)); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.processParamsOptional(processParameterContext); + //then + assertNull(facetedMethod.getFacet(MandatoryFacet.class)); + }); } - public void testNullableAnnotationPickedUpOnActionParameter() { - + @Test + void nullableAnnotationPickedUpOnActionParameter() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction(final @Nullable String foo) { - } + public void someAction( + final @Nullable String foo) {} } - final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { String.class }); - - facetFactory.processParamsOptional( - ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, method, null, facetedMethodParameter)); - - final Facet facet = facetedMethodParameter.getFacet(MandatoryFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof MandatoryFacetInvertedByNullableAnnotationOnParameter); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.processParamsOptional(processParameterContext); + //then + final Facet facet = facetedMethodParameter.getFacet(MandatoryFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof MandatoryFacetInvertedByNullableAnnotationOnParameter); + }); } - public void testNullableAnnotationIgnoredForPrimitiveOnActionParameter() { - + @Test + void nullableAnnotationIgnoredForPrimitiveOnActionParameter() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction(final @Nullable int foo) { - } + public void someAction( + final @Nullable int foo) {} } - final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { int.class }); - - facetFactory.processParamsOptional( - ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, method, null, facetedMethodParameter)); - - assertNull(facetedMethod.getFacet(MandatoryFacet.class)); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.processParamsOptional(processParameterContext); + //then + assertNull(facetedMethod.getFacet(MandatoryFacet.class)); + }); } } From c5049bab2e4ed3c72ea57be21e0b8e3547163b5a Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 17:29:24 +0200 Subject: [PATCH 34/37] CAUSEWAY-3409: resurrect RecreatableObjectFacetFactoryTest --- .../RecreatableObjectFacetFactoryTest.java | 25 +++++++++++-------- ...AnnotationOnParameterFacetFactoryTest.java | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java index 63f3d927fb7..1b5978d9f81 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java @@ -20,20 +20,20 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.causeway.applib.ViewModel; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessClassContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacet; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetFactory; import org.apache.causeway.core.metamodel.facets.object.viewmodel.ViewModelFacetForViewModelInterface; class RecreatableObjectFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private ViewModelFacetFactory facetFactory; @@ -53,16 +53,19 @@ static class Customer implements ViewModel { public Customer(final String memento) { } } - public void testViewModelInterfacePickedUpOnClassAndDefaultsToAlways() { + @Test + void viewModelInterfacePickedUpOnClassAndDefaultsToAlways() { - facetFactory.process(ProcessClassContext - .forTesting(Customer.class, methodRemover, facetedMethod)); + objectScenario(Customer.class, (processClassContext, facetHolder) -> { + //when + facetFactory.process(processClassContext); + //then + final Facet facet = facetHolder.getFacet(ViewModelFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof ViewModelFacetForViewModelInterface); - final Facet facet = facetedMethod.getFacet(ViewModelFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof ViewModelFacetForViewModelInterface); - - assertNoMethodsRemoved(); + assertNoMethodsRemoved(); + }); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java index e885626a1aa..e5a984f266c 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java @@ -60,7 +60,7 @@ public void someAction( assertNotNull(facet); assertTrue(facet instanceof MandatoryFacetForParameterAnnotation.Optional); }); - } + } @Test void parameterAnnotationWithOptionalityIgnoredForPrimitiveOnActionParameter() { From f505d7b6cf0b3b57b4fc8976f5a14387644e09f7 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 17:34:09 +0200 Subject: [PATCH 35/37] CAUSEWAY-3409: resurrect RegExAnnotationOnParameterFacetFactoryTest --- ...AnnotationOnParameterFacetFactoryTest.java | 65 +++++++++---------- ...xAnnotationOnPropertyFacetFactoryTest.java | 48 ++++++-------- 2 files changed, 51 insertions(+), 62 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java index b16df99def2..f69d6270c3f 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java @@ -18,26 +18,23 @@ */ package org.apache.causeway.core.metamodel.facets.param.parameter; -import java.lang.reflect.Method; - import javax.validation.constraints.Pattern; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import org.apache.causeway.applib.annotation.Introspection.IntrospectionPolicy; import org.apache.causeway.core.metamodel.facetapi.Facet; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessParameterContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.regex.RegExFacet; import org.apache.causeway.core.metamodel.facets.param.parameter.regex.RegExFacetForPatternAnnotationOnParameter; class RegExAnnotationOnParameterFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private ParameterAnnotationFacetFactory facetFactory; @@ -46,41 +43,39 @@ protected void setUp() { facetFactory = new ParameterAnnotationFacetFactory(getMetaModelContext()); } - public void testRegExAnnotationPickedUpOnActionParameter() { - + @Test + void regExAnnotationPickedUpOnActionParameter() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction(@Pattern(regexp = "^A.*", flags = { Pattern.Flag.CASE_INSENSITIVE }) final String foo) { - } + public void someAction( + @Pattern(regexp = "^A.*", flags = { Pattern.Flag.CASE_INSENSITIVE }) + final String foo) {} } - final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { String.class }); - - facetFactory.processParams( - ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, method, null, facetedMethodParameter)); - - final Facet facet = facetedMethodParameter.getFacet(RegExFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof RegExFacetForPatternAnnotationOnParameter); - final RegExFacetForPatternAnnotationOnParameter regExFacet = (RegExFacetForPatternAnnotationOnParameter) facet; - assertEquals("^A.*", regExFacet.regexp()); - assertEquals(2, regExFacet.patternFlags()); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.processParams(processParameterContext); + //then + final Facet facet = facetedMethodParameter.getFacet(RegExFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof RegExFacetForPatternAnnotationOnParameter); + final RegExFacetForPatternAnnotationOnParameter regExFacet = (RegExFacetForPatternAnnotationOnParameter) facet; + assertEquals("^A.*", regExFacet.regexp()); + assertEquals(2, regExFacet.patternFlags()); + }); } - public void testRegExAnnotationIgnoredForPrimitiveOnActionParameter() { - + @Test + void regExAnnotationIgnoredForPrimitiveOnActionParameter() { + @SuppressWarnings("unused") class Customer { - @SuppressWarnings("unused") - public void someAction(final int foo) { - } + public void someAction(final int foo) {} } - final Method method = findMethodExactOrFail(Customer.class, "someAction", new Class[] { int.class }); - - facetFactory.processParams( - ProcessParameterContext.forTesting( - Customer.class, IntrospectionPolicy.ANNOTATION_OPTIONAL, method, null, facetedMethodParameter)); - - assertNull(facetedMethod.getFacet(RegExFacet.class)); + parameterScenario(Customer.class, "someAction", 0, (processParameterContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.processParams(processParameterContext); + //then + assertNull(facetedMethod.getFacet(RegExFacet.class)); + }); } } diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java index 3087a3f5e23..09130f4782b 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java @@ -18,8 +18,6 @@ */ package org.apache.causeway.core.metamodel.facets.properties.property; -import java.lang.reflect.Method; - import javax.validation.constraints.Pattern; import org.junit.jupiter.api.BeforeEach; @@ -33,15 +31,14 @@ import org.apache.causeway.applib.annotation.Property; import org.apache.causeway.core.metamodel.facetapi.Facet; import org.apache.causeway.core.metamodel.facets.FacetFactory; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.objectvalue.regex.RegExFacet; import org.apache.causeway.core.metamodel.facets.properties.property.regex.RegExFacetForPatternAnnotationOnProperty; import lombok.val; class RegExAnnotationOnPropertyFacetFactoryTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { private PropertyAnnotationFacetFactory facetFactory; @@ -57,39 +54,36 @@ private void processRegEx( } @Test - void testRegExAnnotationPickedUpOnProperty() { - + void regExAnnotationPickedUpOnProperty() { class Customer { @Pattern(regexp = "^A.*", flags = { Pattern.Flag.CASE_INSENSITIVE }) public String getFirstName() { return null; } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); - - processRegEx(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - final Facet facet = facetedMethod.getFacet(RegExFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof RegExFacetForPatternAnnotationOnProperty); - final RegExFacetForPatternAnnotationOnProperty regExFacet = (RegExFacetForPatternAnnotationOnProperty) facet; - assertEquals("^A.*", regExFacet.regexp()); - assertEquals(2, regExFacet.patternFlags()); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processRegEx(facetFactory, processMethodContext); + // then + final Facet facet = facetedMethod.getFacet(RegExFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof RegExFacetForPatternAnnotationOnProperty); + final RegExFacetForPatternAnnotationOnProperty regExFacet = (RegExFacetForPatternAnnotationOnProperty) facet; + assertEquals("^A.*", regExFacet.regexp()); + assertEquals(2, regExFacet.patternFlags()); + }); } @Test - void testRegExAnnotationIgnoredForNonStringsProperty() { - + void regExAnnotationIgnoredForNonStringsProperty() { @SuppressWarnings("unused") class Customer { public int getNumberOfOrders() { return 0; } } - final Method method = findMethodExactOrFail(Customer.class, "getNumberOfOrders"); - - processRegEx(facetFactory, ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - assertNull(facetedMethod.getFacet(RegExFacet.class)); + propertyScenario(Customer.class, "numberOfOrders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + processRegEx(facetFactory, processMethodContext); + // then + assertNull(facetedMethod.getFacet(RegExFacet.class)); + }); } - } From 305301088165f0e923799fba1c3a43505c8b5500 Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 17:39:13 +0200 Subject: [PATCH 36/37] CAUSEWAY-3409: resurrect LayoutOrderTest --- .../ordering/memberorder/LayoutOrderTest.java | 127 +++++++----------- 1 file changed, 50 insertions(+), 77 deletions(-) diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java index 45852250552..af854d8333c 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/ordering/memberorder/LayoutOrderTest.java @@ -18,10 +18,9 @@ */ package org.apache.causeway.core.metamodel.facets.ordering.memberorder; -import java.lang.reflect.Method; import java.util.Collection; -import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -30,8 +29,7 @@ import org.apache.causeway.applib.annotation.ActionLayout; import org.apache.causeway.applib.annotation.CollectionLayout; import org.apache.causeway.applib.annotation.PropertyLayout; -import org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext; -import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract2; +import org.apache.causeway.core.metamodel.facets.FacetFactoryTestAbstract; import org.apache.causeway.core.metamodel.facets.actions.layout.ActionLayoutFacetFactory; import org.apache.causeway.core.metamodel.facets.collections.layout.CollectionLayoutFacetFactory; import org.apache.causeway.core.metamodel.facets.members.layout.order.LayoutOrderFacet; @@ -43,94 +41,69 @@ import lombok.val; class LayoutOrderTest -extends FacetFactoryTestAbstract2 { +extends FacetFactoryTestAbstract { - @BeforeEach - protected void setUp() { - -//FIXME -// context.checking(new Expectations() {{ -// allowing(mockTranslationService).translate(with(any(TranslationContext.class)), with(any(String.class))); -// will(new Action() { -// @Override -// public Object invoke(final Invocation invocation) throws Throwable { -// return invocation.getParameter(1); -// } -// -// @Override -// public void describeTo(final Description description) { -// description.appendText("Returns parameter #1"); -// } -// }); -// }}); - } - - public void testMemberOrderAnnotationPickedUpOnProperty() { + @Test + void memberOrderAnnotationPickedUpOnProperty() { + val facetFactory = new PropertyLayoutFacetFactory(getMetaModelContext()); class Customer { @PropertyLayout(sequence = "1") - public String getFirstName() { - return null; - } + public String getFirstName() { return null; } } - final Method method = findMethodExactOrFail(Customer.class, "getFirstName"); - - val facetFactory = new PropertyLayoutFacetFactory(getMetaModelContext()); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - val facet = facetedMethod.getFacet(LayoutOrderFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof LayoutOrderFacetFromPropertyLayoutAnnotation); - assertEquals("1", facet.getSequence()); - - assertNoMethodsRemoved(); + propertyScenario(Customer.class, "firstName", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + val facet = facetedMethod.getFacet(LayoutOrderFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof LayoutOrderFacetFromPropertyLayoutAnnotation); + assertEquals("1", facet.getSequence()); + + assertNoMethodsRemoved(); + }); } - public void testMemberOrderAnnotationPickedUpOnCollection() { + @Test + void memberOrderAnnotationPickedUpOnCollection() { + val facetFactory = new CollectionLayoutFacetFactory(getMetaModelContext()); class Order { } + @SuppressWarnings("unused") class Customer { @CollectionLayout(sequence = "2") - public Collection getOrders() { - return null; - } - - @SuppressWarnings("unused") - public void addToOrders(final Order o) { - } + public Collection getOrders() { return null;} + public void addToOrders(final Order o) {} } - final Method method = findMethodExactOrFail(Customer.class, "getOrders"); - - val facetFactory = new CollectionLayoutFacetFactory(getMetaModelContext()); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - val facet = facetedMethod.getFacet(LayoutOrderFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof LayoutOrderFacetFromCollectionLayoutAnnotation); - assertEquals("2", facet.getSequence()); - - assertNoMethodsRemoved(); + collectionScenario(Customer.class, "orders", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter)->{ + // when + facetFactory.process(processMethodContext); + // then + val facet = facetedMethod.getFacet(LayoutOrderFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof LayoutOrderFacetFromCollectionLayoutAnnotation); + assertEquals("2", facet.getSequence()); + + assertNoMethodsRemoved(); + }); } - public void testMemberOrderAnnotationPickedUpOnAction() { + @Test + void memberOrderAnnotationPickedUpOnAction() { + val facetFactory = new ActionLayoutFacetFactory(getMetaModelContext()); class Customer { @ActionLayout(sequence = "3") - public void someAction() { - } + public void someAction() {} } - final Method method = findMethodExactOrFail(Customer.class, "someAction"); - - val facetFactory = new ActionLayoutFacetFactory(getMetaModelContext()); - facetFactory.process(ProcessMethodContext - .forTesting(Customer.class, null, method, methodRemover, facetedMethod)); - - val facet = facetedMethod.getFacet(LayoutOrderFacet.class); - assertNotNull(facet); - assertTrue(facet instanceof LayoutOrderFacetFromActionLayoutAnnotation); - assertEquals("3", facet.getSequence()); - - assertNoMethodsRemoved(); + actionScenario(Customer.class, "someAction", (processMethodContext, facetHolder, facetedMethod, facetedMethodParameter) -> { + //when + facetFactory.process(processMethodContext); + //then + val facet = facetedMethod.getFacet(LayoutOrderFacet.class); + assertNotNull(facet); + assertTrue(facet instanceof LayoutOrderFacetFromActionLayoutAnnotation); + assertEquals("3", facet.getSequence()); + + assertNoMethodsRemoved(); + }); } - } From f3fbc4d4917c813d49d0ea41a4b6d95eff1ec7cb Mon Sep 17 00:00:00 2001 From: Andi Huber Date: Tue, 18 Apr 2023 17:48:21 +0200 Subject: [PATCH 37/37] CAUSEWAY-3409: prepare for merge - still WIP but some fixes already --- .../facets/FacetFactoryTestAbstract.java | 2 +- .../facets/FacetFactoryTestAbstract2.java | 69 ------------------- 2 files changed, 1 insertion(+), 70 deletions(-) delete mode 100644 core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java index dbda815266e..5fbd61fcef1 100644 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java +++ b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java @@ -116,7 +116,7 @@ private static FacetHolder facetHolder( private TranslationService mockTranslationService; private InteractionService mockInteractionService; private final InteractionContext iaContext = InteractionContextFactory.testing(); - protected MethodRemover_forTesting methodRemover; + protected MethodRemover_forTesting methodRemover; //TODO[CAUSEWAY-3409] make private /** * Override, if a custom {@link MetaModelContext_forTesting} is required for certain tests. diff --git a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java deleted file mode 100644 index c2a38b96a4f..00000000000 --- a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract2.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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.causeway.core.metamodel.facets; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; - -import org.apache.causeway.applib.Identifier; -import org.apache.causeway.applib.id.LogicalType; -import org.apache.causeway.core.metamodel.facetapi.FacetHolder; -import org.apache.causeway.core.metamodel.facetapi.FeatureType; - -@Deprecated //TODO[CAUSEWAY-3409] use FacetFactoryTestAbstract scenarios instead -public abstract class FacetFactoryTestAbstract2 -extends FacetFactoryTestAbstract { - - public static class Customer { - - private String firstName; - - public String getFirstName() { - return firstName; - } - - public void setFirstName(final String firstName) { - this.firstName = firstName; - } - } - - protected FacetHolder facetHolder; - protected FacetedMethod facetedMethod; - protected FacetedMethodParameter facetedMethodParameter; - - @BeforeEach - protected void setUpAll2() { - facetHolder = FacetHolder.simple( - getMetaModelContext(), - Identifier.propertyIdentifier(LogicalType.fqcn(Customer.class), "firstName")); - - facetedMethod = FacetedMethod.createSetterForProperty(getMetaModelContext(), Customer.class, "firstName"); - facetedMethodParameter = new FacetedMethodParameter( - getMetaModelContext(), - FeatureType.ACTION_PARAMETER_SINGULAR, - facetedMethod.getOwningType(), - facetedMethod.getMethod(), 0); - } - - @AfterEach - protected void tearDownAll2() { - facetedMethod = null; - } - -}