You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2020/01/29 19:38:39 UTC
[isis] 10/25: ISIS-2273: copies jmock2 into metamodel's own test
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-2062
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 93bcf46a7a4ae8d0f3fb4186ac5873375e26efa4
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 29 17:46:33 2020 +0000
ISIS-2273: copies jmock2 into metamodel's own test
since used in many of its unit tests
---
core/metamodel/pom.xml | 58 ++++
.../metamodel/MetaModelContext_configTest.java | 4 +-
.../facets/AbstractFacetFactoryJUnit4TestCase.java | 4 +-
.../metamodel/facets/AbstractFacetFactoryTest.java | 2 +-
.../metamodel/facets/ObjectAdapterUtilsTest.java | 4 +-
.../actions/ActionMethodsFacetFactoryTest.java | 2 +-
.../prototype/PrototypeFacetAbstractTest.java | 2 +-
.../CollectionFieldMethodsFacetFactoryTest.java | 4 +-
.../collections/JavaCollectionFacetTest.java | 4 +-
.../ViewModelSemanticCheckingFacetFactoryTest.java | 4 +-
.../object/defaults/DefaultedFacetFactoryTest.java | 2 +-
.../DomainObjectAnnotationFacetFactoryTest.java | 2 +-
.../DomainObjectLayoutFactoryTest.java | 2 +-
.../TitleFacetViaTitleAnnotationTest.java | 4 +-
.../parseable/ParseableFacetUsingParserTest.java | 4 +-
...eFacetAnnotationOrConfigurationFactoryTest.java | 2 +-
.../ordering/memberorder/DeweyOrderSetTest.java | 2 +-
.../MemberOrderAnnotationFacetFactoryTest.java | 2 +-
.../memberorder/MemberOrderComparatorTest.java | 2 +-
...romptStyleFacetFromPropertyAnnotation_Test.java | 2 +-
.../PropertyAnnotationFacetFactoryTest.java | 2 +-
.../BigDecimalValueSemanticsProviderTest.java | 2 +-
.../value/BigIntValueSemanticsProviderTest.java | 2 +-
.../value/ByteValueSemanticsProviderTest.java | 2 +-
.../value/DoubleValueSemanticsProviderTest.java | 2 +-
.../value/FloatValueSemanticsProviderTest.java | 2 +-
.../ImageValueSemanticsProviderAbstractTest.java | 6 +-
.../value/IntValueSemanticsProviderTest.java | 2 +-
.../JavaSqlDateValueSemanticsProviderTest.java | 2 +-
.../JavaSqlTimeValueSemanticsProviderTest.java | 2 +-
.../JavaUtilDateValueSemanticsProviderTest.java | 2 +-
.../value/LongValueSemanticsProviderTest.java | 2 +-
.../value/ShortValueSemanticsProviderTest.java | 2 +-
.../ValueSemanticsProviderAbstractTestCase.java | 6 +-
...odaLocalDateTimeValueSemanticsProviderTest.java | 4 +-
...jectAssociationPredicatesTest_visibleWhere.java | 4 +-
.../services/appfeat/ApplicationFeatureIdTest.java | 4 +-
.../ApplicationFeatureRepositoryDefaultTest.java | 2 +-
...zerForRecoverableException_recognizes_Test.java | 4 +-
.../metamodel/MetaModelServiceDefaultTest.java | 4 +-
.../spec/ObjectSpecIdTest_valueSemantics.java | 2 +-
.../specloader/SpecificationCacheDefaultTest.java | 4 +-
...ionParameterAbstractTest_getId_and_getName.java | 5 +-
.../specimpl/ObjectAssociationAbstractTest.java | 4 +-
...ObjectAssociationAbstractTest_alwaysHidden.java | 4 +-
.../jmocking/ImposteriserUsingCodegenPlugin.java | 92 ++++++
.../jmocking/Imposterisers.java} | 22 +-
.../jmocking/InjectIntoJMockAction.java | 63 ++++
.../unittestsupport/jmocking/IsisActions.java | 60 ++++
.../unittestsupport/jmocking/JMockActions.java | 86 ++++++
.../jmocking/JUnitRuleMockery2.java | 321 +++++++++++++++++++++
.../unittestsupport/jmocking/MyMockomatic.java | 110 +++++++
.../jmocking/PostponedAction.java} | 30 +-
53 files changed, 884 insertions(+), 89 deletions(-)
diff --git a/core/metamodel/pom.xml b/core/metamodel/pom.xml
index ba7c946..b821a8d 100644
--- a/core/metamodel/pom.xml
+++ b/core/metamodel/pom.xml
@@ -168,12 +168,70 @@
</dependency>
<dependency>
+ <groupId>org.apache.isis.core</groupId>
+ <artifactId>isis-core-codegen-bytebuddy</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- SPRING -->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm</artifactId>
+ </exclusion>
+ <exclusion>
+ <!-- when spring-boot release lags behind spring-core release explicitly
+ spring-test added below -->
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ </exclusion>
+ <exclusion>
+ <!-- when spring-boot release lags behind spring-core release explicitly
+ spring-test added below -->
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ </exclusion>
+ <exclusion>
+ <!-- we use log4j-2 instead -->
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-logging</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.picocontainer</groupId>
+ <artifactId>picocontainer</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/MetaModelContext_configTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/MetaModelContext_configTest.java
index 73c6ee8..604ed48 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/MetaModelContext_configTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/MetaModelContext_configTest.java
@@ -25,8 +25,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.unittestsupport.config.IsisConfigurationLegacy;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.IsisConfigurationLegacy;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
import lombok.val;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
index c0d04f8..ac090f2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
@@ -49,8 +49,8 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.security.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public abstract class AbstractFacetFactoryJUnit4TestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
index b2d37d5..ef74776 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
@@ -38,7 +38,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.security.authentication.AuthenticationSession;
import org.apache.isis.core.security.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
import junit.framework.TestCase;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ObjectAdapterUtilsTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ObjectAdapterUtilsTest.java
index 74398d1..6556569 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ObjectAdapterUtilsTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ObjectAdapterUtilsTest.java
@@ -28,8 +28,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public class ObjectAdapterUtilsTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
index a51119f..ddec82e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
@@ -53,7 +53,7 @@ import org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionPara
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.testspec.ObjectSpecificationStub;
import org.apache.isis.core.security.authentication.AuthenticationSession;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
import lombok.val;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java
index d2d3755..940454a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java
@@ -27,7 +27,7 @@ import static org.junit.Assert.assertEquals;
import org.apache.isis.core.commons.internal.environment.DeploymentType;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
public class PrototypeFacetAbstractTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
index f0d1b15..dba439d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
@@ -50,8 +50,8 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetFactory;
import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetViaAccessor;
import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetViaClearMethod;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
import lombok.val;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/JavaCollectionFacetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/JavaCollectionFacetTest.java
index 71d6fd0..75d84ab 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/JavaCollectionFacetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/JavaCollectionFacetTest.java
@@ -39,8 +39,8 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.collections.javautilcollection.JavaCollectionFacet;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public class JavaCollectionFacetTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
index d96a1ee..cfd8221 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
@@ -41,8 +41,8 @@ import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModelInitFilterDefault;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorAbstract;
import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
-import org.apache.isis.core.unittestsupport.config._Config;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
import lombok.val;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
index 0359702..01bae00 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
@@ -24,7 +24,7 @@ import org.apache.isis.applib.annotation.Defaulted;
import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class DefaultedFacetFactoryTest extends AbstractFacetFactoryTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
index b7b63bd..319b294 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
@@ -61,7 +61,7 @@ import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObj
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
import lombok.val;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
index ff7aa04..177b31a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
@@ -47,7 +47,7 @@ import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java
index 722563d..b4c933e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/title/annotation/TitleFacetViaTitleAnnotationTest.java
@@ -41,8 +41,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.Annotations;
import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public class TitleFacetViaTitleAnnotationTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
index 71be3d6..5e28408 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
@@ -37,8 +37,8 @@ import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
import org.apache.isis.core.security.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public class ParseableFacetUsingParserTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
index 776f10d..98066e3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
@@ -35,7 +35,7 @@ import org.apache.isis.core.metamodel.facets.object.value.annotcfg.ValueFacetAnn
import org.apache.isis.core.metamodel.facets.object.value.annotcfg.ValueFacetAnnotationOrConfigurationFactory;
import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderUtil;
import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFacetFactoryTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java
index 3ba024d..0105ad0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java
@@ -34,7 +34,7 @@ import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetAnnotation;
import org.apache.isis.core.metamodel.layout.DeweyOrderSet;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
import junit.framework.TestCase;
import junit.framework.TestSuite;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderAnnotationFacetFactoryTest.java
index 9eb2c9b..b4f6318 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderAnnotationFacetFactoryTest.java
@@ -35,7 +35,7 @@ import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetAnnotation;
import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetFactory;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
public class MemberOrderAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderComparatorTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderComparatorTest.java
index 621bcd5..5766504 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderComparatorTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/MemberOrderComparatorTest.java
@@ -30,7 +30,7 @@ import org.apache.isis.core.commons.internal.context._Context;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetAnnotation;
import org.apache.isis.core.metamodel.layout.memberorderfacet.MemberOrderComparator;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
import junit.framework.TestCase;
import junit.framework.TestSuite;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleFacetFromPropertyAnnotation_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleFacetFromPropertyAnnotation_Test.java
index a819306..bac9634 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleFacetFromPropertyAnnotation_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleFacetFromPropertyAnnotation_Test.java
@@ -39,7 +39,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured;
import org.apache.isis.core.metamodel.facets.properties.propertylayout.PromptStyleFacetForPropertyLayoutAnnotation;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
public class PromptStyleFacetFromPropertyAnnotation_Test {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
index cdfe4af..453bc77 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
@@ -39,6 +39,7 @@ import org.apache.isis.applib.annotation.Property;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.events.domain.PropertyDomainEvent;
import org.apache.isis.applib.spec.Specification;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
import org.apache.isis.core.metamodel.commons.matchers.IsisMatchers;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -76,7 +77,6 @@ import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySe
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.unittestsupport.config._Config;
import lombok.val;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
index 20dc05e..7918946 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.metamodel.context.MetaModelContextAware;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class BigDecimalValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
index 75eaf05..3d5d5b4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.metamodel.context.MetaModelContextAware;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class BigIntValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java
index 41ab4b0..7ac38b2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java
@@ -31,7 +31,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
import org.apache.isis.core.metamodel.facets.value.bytes.ByteValueSemanticsProviderAbstract;
import org.apache.isis.core.metamodel.facets.value.bytes.ByteWrapperValueSemanticsProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class ByteValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java
index 2faebe9..36b1f37 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java
@@ -30,7 +30,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
import org.apache.isis.core.metamodel.facets.value.doubles.DoubleWrapperValueSemanticsProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class DoubleValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java
index 728c347..db9fa86 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java
@@ -31,7 +31,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
import org.apache.isis.core.metamodel.facets.value.floats.FloatValueSemanticsProviderAbstract;
import org.apache.isis.core.metamodel.facets.value.floats.FloatWrapperValueSemanticsProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class FloatValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java
index 104f00d..e05d5db 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java
@@ -32,9 +32,9 @@ import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.value.image.ImageValueSemanticsProviderAbstract;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.unittestsupport.config.IsisConfigurationLegacy;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.config.unittestsupport.IsisConfigurationLegacy;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public class ImageValueSemanticsProviderAbstractTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java
index 76ff5b4..d3924bd 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java
@@ -31,7 +31,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
import org.apache.isis.core.metamodel.facets.value.integer.IntValueSemanticsProviderAbstract;
import org.apache.isis.core.metamodel.facets.value.integer.IntWrapperValueSemanticsProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class IntValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
index c667fbf..cfe16c5 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
@@ -36,7 +36,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
import org.apache.isis.core.metamodel.facets.value.datesql.JavaSqlDateValueSemanticsProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class JavaSqlDateValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlTimeValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlTimeValueSemanticsProviderTest.java
index b079f17..b1a87ac 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlTimeValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlTimeValueSemanticsProviderTest.java
@@ -33,7 +33,7 @@ import org.apache.isis.core.metamodel.context.MetaModelContextAware;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.value.timesql.JavaSqlTimeValueSemanticsProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class JavaSqlTimeValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java
index 79dc56b..1a4954d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java
@@ -35,7 +35,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
import org.apache.isis.core.metamodel.facets.value.dateutil.JavaUtilDateValueSemanticsProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class JavaUtilDateValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java
index 26332d0..3a72734 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java
@@ -31,7 +31,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
import org.apache.isis.core.metamodel.facets.value.longs.LongValueSemanticsProviderAbstract;
import org.apache.isis.core.metamodel.facets.value.longs.LongWrapperValueSemanticsProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class LongValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java
index 2a1cc5d..0d20cca 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java
@@ -31,7 +31,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
import org.apache.isis.core.metamodel.facets.value.shortint.ShortValueSemanticsProviderAbstract;
import org.apache.isis.core.metamodel.facets.value.shortint.ShortWrapperValueSemanticsProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
public class ShortValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index fb5d10a..23b83f5 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -46,9 +46,9 @@ import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
import org.apache.isis.core.security.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.unittestsupport.config._Config;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public abstract class ValueSemanticsProviderAbstractTestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java
index f88b233..56a1ec0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java
@@ -32,8 +32,8 @@ import static org.junit.Assert.assertThat;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.core.metamodel.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.unittestsupport.config._Config;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.config.unittestsupport.internal._Config;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
public class JodaLocalDateTimeValueSemanticsProviderTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/feature/ObjectAssociationPredicatesTest_visibleWhere.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/feature/ObjectAssociationPredicatesTest_visibleWhere.java
index 87b4806..73e6ce6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/feature/ObjectAssociationPredicatesTest_visibleWhere.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/feature/ObjectAssociationPredicatesTest_visibleWhere.java
@@ -42,8 +42,8 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facets.WhereValueFacet;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
@RunWith(Parameterized.class)
public class ObjectAssociationPredicatesTest_visibleWhere {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureIdTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureIdTest.java
index 0cf2058..e027b0d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureIdTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureIdTest.java
@@ -39,8 +39,8 @@ import static org.hamcrest.Matchers.lessThan;
import static org.junit.Assert.assertThat;
import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
+import org.apache.isis.applib.unittestsupport.ValueTypeContractTestAbstract;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
public class ApplicationFeatureIdTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
index 9f93871..1b9aa0d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefaultTest.java
@@ -56,7 +56,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
public class ApplicationFeatureRepositoryDefaultTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerForRecoverableException_recognizes_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerForRecoverableException_recognizes_Test.java
index 373a01e..737a0e1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerForRecoverableException_recognizes_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerForRecoverableException_recognizes_Test.java
@@ -28,8 +28,8 @@ import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public class ExceptionRecognizerForRecoverableException_recognizes_Test {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
index 071c385..b397b11 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
@@ -53,8 +53,8 @@ import org.apache.isis.core.metamodel.spec.Hierarchical;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionDefault;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
class MetaModelServiceDefaultTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
index e324b16..da3e0d1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.spec;
import java.util.Arrays;
import java.util.List;
-import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
+import org.apache.isis.applib.unittestsupport.ValueTypeContractTestAbstract;
public class ObjectSpecIdTest_valueSemantics extends ValueTypeContractTestAbstract<ObjectSpecId> {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java
index f99aa12..4bd94f5 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java
@@ -32,8 +32,8 @@ import static org.junit.Assert.assertThat;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
import lombok.val;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
index a72c159..6a56f12 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
@@ -40,8 +40,9 @@ import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+
public class ObjectActionParameterAbstractTest_getId_and_getName {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
index a2ec67c..2e14e13 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
@@ -43,8 +43,8 @@ import org.apache.isis.core.metamodel.interactions.VisibilityContext;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public class ObjectAssociationAbstractTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
index 243c600..bae2e75 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
@@ -46,8 +46,8 @@ import org.apache.isis.core.metamodel.interactions.VisibilityContext;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.metamodel.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
public class ObjectAssociationAbstractTest_alwaysHidden {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/ImposteriserUsingCodegenPlugin.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/ImposteriserUsingCodegenPlugin.java
new file mode 100644
index 0000000..e24e966
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/ImposteriserUsingCodegenPlugin.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.unittestsupport.jmocking;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+
+import org.jmock.api.Imposteriser;
+import org.jmock.api.Invocation;
+import org.jmock.api.Invokable;
+import org.jmock.lib.JavaReflectionImposteriser;
+
+import org.apache.isis.core.codegen.bytebuddy.services.ProxyFactoryServiceByteBuddy;
+import org.apache.isis.core.commons.internal.plugins.codegen.ProxyFactory;
+
+class ImposteriserUsingCodegenPlugin implements Imposteriser {
+
+ public static final Imposteriser INSTANCE = new ImposteriserUsingCodegenPlugin();
+
+ private final Imposteriser reflectionImposteriser = new JavaReflectionImposteriser();
+
+ private ImposteriserUsingCodegenPlugin() {
+ }
+
+
+ @Override
+ public boolean canImposterise(Class<?> mockedType) {
+
+ if(mockedType.isInterface()) {
+ return reflectionImposteriser.canImposterise(mockedType);
+ }
+
+ return !mockedType.isPrimitive() &&
+ !Modifier.isFinal(mockedType.getModifiers()) &&
+ !toStringMethodIsFinal(mockedType);
+ }
+
+ @Override
+ public <T> T imposterise(final Invokable mockObject, final Class<T> mockedType, Class<?>... ancilliaryTypes) {
+ if (!canImposterise(mockedType)) {
+ throw new IllegalArgumentException(mockedType.getName() + " cannot be imposterized (either a primitive, or a final type or has final toString method)");
+ }
+
+ if(mockedType.isInterface()) {
+ return reflectionImposteriser.imposterise(mockObject, mockedType, ancilliaryTypes);
+ }
+
+
+ final ProxyFactory<T> factory = ProxyFactory.builder(mockedType)
+ .interfaces(ancilliaryTypes)
+ .build(new ProxyFactoryServiceByteBuddy());
+
+ final boolean initialize = false;
+
+ return factory.createInstance(
+ (obj, method, args)->mockObject.invoke(new Invocation(obj, method, args)),
+ initialize);
+ }
+
+ // //////////////////////////////////////
+
+ private static boolean toStringMethodIsFinal(Class<?> type) {
+ try {
+ Method toString = type.getMethod("toString");
+ return Modifier.isFinal(toString.getModifiers());
+
+ }
+ catch (SecurityException e) {
+ throw new IllegalStateException("not allowed to reflect on toString method", e);
+ }
+ catch (NoSuchMethodException e) {
+ throw new Error("no public toString method found", e);
+ }
+ }
+
+}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/Imposterisers.java
similarity index 57%
copy from core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
copy to core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/Imposterisers.java
index e324b16..6a82dd3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/Imposterisers.java
@@ -16,23 +16,19 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.spec;
+package org.apache.isis.core.metamodel.unittestsupport.jmocking;
-import java.util.Arrays;
-import java.util.List;
+import org.jmock.api.Imposteriser;
-import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
+public final class Imposterisers {
-public class ObjectSpecIdTest_valueSemantics extends ValueTypeContractTestAbstract<ObjectSpecId> {
+ private Imposterisers() {}
- @Override
- protected List<ObjectSpecId> getObjectsWithSameValue() {
- return Arrays.asList(ObjectSpecId.of("CUS"), ObjectSpecId.of("CUS"), ObjectSpecId.of("CUS"));
- }
-
- @Override
- protected List<ObjectSpecId> getObjectsWithDifferentValue() {
- return Arrays.asList(ObjectSpecId.of("bUS"), ObjectSpecId.of("CUt"));
+ /**
+ * @return framework's default Imposteriser instance
+ */
+ public static Imposteriser getDefault() {
+ return ImposteriserUsingCodegenPlugin.INSTANCE;
}
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/InjectIntoJMockAction.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/InjectIntoJMockAction.java
new file mode 100644
index 0000000..dbe36de
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/InjectIntoJMockAction.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.unittestsupport.jmocking;
+
+import java.lang.reflect.Method;
+
+import org.hamcrest.Description;
+import org.jmock.api.Action;
+import org.jmock.api.Invocation;
+
+public final class InjectIntoJMockAction implements Action {
+ @Override
+ public void describeTo(final Description description) {
+ description.appendText("inject self");
+ }
+
+ // x.injectInto(y) ---> y.setXxx(x)
+ @Override
+ public Object invoke(final Invocation invocation) throws Throwable {
+ final Object injectable = invocation.getInvokedObject();
+ final Object toInjectInto = invocation.getParameter(0);
+ final Method[] methods = toInjectInto.getClass().getMethods();
+ for (final Method method : methods) {
+ if (!method.getName().startsWith("set")) {
+ continue;
+ }
+ if (method.getParameterTypes().length != 1) {
+ continue;
+ }
+ final Class<?> methodParameterType = method.getParameterTypes()[0];
+ if (methodParameterType.isAssignableFrom(injectable.getClass())) {
+ method.invoke(toInjectInto, injectable);
+ break;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Factory
+ */
+ public static Action injectInto() {
+ return new InjectIntoJMockAction();
+ }
+
+}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/IsisActions.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/IsisActions.java
new file mode 100644
index 0000000..4e47164
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/IsisActions.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.unittestsupport.jmocking;
+
+import org.hamcrest.Description;
+import org.jmock.api.Action;
+import org.jmock.api.Invocation;
+
+public final class IsisActions {
+
+ private IsisActions() {
+ }
+
+ public static Action injectInto() {
+ return InjectIntoJMockAction.injectInto();
+ }
+
+ @SafeVarargs
+ public static <T> Action returnEach(final T... values) {
+ return JMockActions.returnEach(values);
+ }
+
+ public static Action returnArgument(final int i) {
+ return JMockActions.returnArgument(i);
+ }
+
+ public static Action returnNewTransientInstance() {
+ return new Action(){
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("new transient instance");
+ }
+
+ @Override
+ public Object invoke(Invocation invocation) throws Throwable {
+ Class<?> cls = (Class<?>) invocation.getParameter(0);
+ return cls.newInstance();
+ }
+ };
+ }
+
+
+}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/JMockActions.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/JMockActions.java
new file mode 100644
index 0000000..1247486
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/JMockActions.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.unittestsupport.jmocking;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.hamcrest.Description;
+import org.jmock.api.Action;
+import org.jmock.api.Invocation;
+
+public final class JMockActions {
+
+ private JMockActions() {
+ }
+
+ @SafeVarargs
+ public static <T> Action returnEach(final T... values) {
+ return new ReturnEachAction<T>(values);
+ }
+
+ public static Action returnArgument(final int i) {
+ return new ReturnArgumentJMockAction(i);
+ }
+
+ private static class ReturnEachAction<T> implements Action {
+
+ private final Collection<T> collection;
+ private final Iterator<T> iterator;
+
+ ReturnEachAction(Collection<T> collection) {
+ this.collection = collection;
+ this.iterator = collection.iterator();
+ }
+
+ @SafeVarargs
+ private ReturnEachAction(T... array) {
+ this(Arrays.asList(array));
+ }
+
+ @Override
+ public T invoke(Invocation invocation) throws Throwable {
+ return iterator.next();
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendValueList("return iterator.next() over ", ", ", "", collection);
+ }
+ }
+
+ private static final class ReturnArgumentJMockAction implements Action {
+ private final int i;
+
+ private ReturnArgumentJMockAction(final int i) {
+ this.i = i;
+ }
+
+ @Override
+ public void describeTo(final Description description) {
+ description.appendText("parameter #" + i + " ");
+ }
+
+ @Override
+ public Object invoke(final Invocation invocation) throws Throwable {
+ return invocation.getParameter(i);
+ }
+ }
+}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/JUnitRuleMockery2.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/JUnitRuleMockery2.java
new file mode 100644
index 0000000..9f903e0
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/JUnitRuleMockery2.java
@@ -0,0 +1,321 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.unittestsupport.jmocking;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.util.List;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.jmock.integration.junit4.JUnit4Mockery;
+import org.jmock.internal.AllDeclaredFields;
+import org.jmock.lib.concurrent.Synchroniser;
+import org.junit.rules.MethodRule;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.Statement;
+import org.picocontainer.MutablePicoContainer;
+import org.picocontainer.PicoBuilder;
+
+import static org.junit.Assert.fail;
+
+import org.apache.isis.core.commons.internal.base._Casts;
+import org.apache.isis.core.commons.internal.context._Context;
+import org.apache.isis.core.commons.internal.environment.IsisSystemEnvironment;
+
+import junit.framework.AssertionFailedError;
+
+
+/**
+ * Use as a <tt>@Rule</tt>, meaning that the <tt>@RunWith(JMock.class)</tt> can
+ * be ignored.
+ *
+ * <pre>
+ * public class MyTest {
+ *
+ * @Rule
+ * public final Junit4Mockery2 context = Junit4Mockery2.createFor(Mode.INTERFACES);
+ *
+ * }
+ * </pre>
+ *
+ * <p>
+ * The class also adds some convenience methods, and uses a factory method to
+ * make it explicit whether the context can mock only interfaces or interfaces
+ * and classes.
+ *
+ * <p>
+ * Used by domain apps only.
+ * </p>
+ */
+public class JUnitRuleMockery2 extends JUnit4Mockery implements MethodRule {
+
+ /**
+ * Factory method.
+ */
+ public static JUnitRuleMockery2 createFor(final Mode mode) {
+
+ _Context.computeIfAbsent(IsisSystemEnvironment.class, IsisSystemEnvironment::new)
+ .setUnitTesting(true);
+
+ final JUnitRuleMockery2 jUnitRuleMockery2 = new JUnitRuleMockery2();
+ if (mode == Mode.INTERFACES_AND_CLASSES) {
+ jUnitRuleMockery2.setImposteriser(Imposterisers.getDefault());
+ }
+ jUnitRuleMockery2.setThreadingPolicy(new Synchroniser());
+ return jUnitRuleMockery2;
+ }
+
+
+ /**
+ * Annotate the field that references the class under test;
+ * is automatically instantiated and autowired by this class,
+ * accessible to the test using {@link JUnitRuleMockery2#getClassUnderTest()}.
+ */
+ @Retention(RUNTIME)
+ @Target(FIELD)
+ public static @interface ClassUnderTest {}
+
+ /**
+ * Annotate fields annotated with {@link Mock}, to indicate that they should be set up
+ * with an {@link Expectations#ignoring(Object)} expectation.
+ */
+ @Retention(RUNTIME)
+ @Target(FIELD)
+ public static @interface Ignoring {}
+
+ /**
+ * Annotate fields annotated with {@link Mock}, to indicate that they should be set up
+ * with an {@link Expectations#allowing(Object)} expectation.
+ */
+ @Retention(RUNTIME)
+ @Target(FIELD)
+ public static @interface Allowing {}
+
+ /**
+ * Annotate fields annotated with {@link Mock}, to indicate that they should be set up
+ * with an {@link Expectations#never(Object)} expectation.
+ */
+ @Retention(RUNTIME)
+ @Target(FIELD)
+ public static @interface Never {}
+
+ /**
+ * Annotate fields annotated with {@link Mock}, to indicate that they should be set up
+ * with an {@link Expectations#one(Object)} expectation.
+ */
+ @Retention(RUNTIME)
+ @Target(FIELD)
+ public static @interface One {}
+
+
+ /**
+ * Annotate fields annotated with {@link Mock}, to indicate that they should be set up
+ * to check the specified {@link ExpectationsOn expectation}.
+ */
+ @Retention(RUNTIME)
+ @Target(FIELD)
+ public static @interface Checking {
+ Class<? extends ExpectationsOn> value() default ExpectationsOn.class;
+ }
+
+ public static enum Mode {
+ INTERFACES_ONLY, INTERFACES_AND_CLASSES;
+ }
+
+ private final MyMockomatic mockomatic = new MyMockomatic(this);
+ private final MutablePicoContainer container = new PicoBuilder().withConstructorInjection().withSetterInjection().build();
+ private Class<?> cutType;
+
+ private JUnitRuleMockery2() {
+ }
+
+ @Override
+ public Statement apply(final Statement base, final FrameworkMethod method, final Object target) {
+ return new Statement() {
+
+ @Override
+ public void evaluate() throws Throwable {
+ prepare(target);
+ base.evaluate();
+ assertIsSatisfied();
+ }
+
+ private void prepare(final Object target) throws IllegalAccessException {
+ final List<Field> allFields = AllDeclaredFields.in(target.getClass());
+ assertOnlyOneJMockContextIn(allFields);
+ List<Object> mocks = fillInAutoMocks(target, allFields);
+ Field cutField = locateClassUnderTestFieldIfAny(allFields);
+ if (cutField != null) {
+ cutType = cutField.getType();
+ for (Object mock : mocks) {
+ container.addComponent(mock);
+ }
+ container.addComponent(cutType);
+
+ final Object cut = container.getComponent(cutType);
+ cutField.setAccessible(true);
+ cutField.set(target, cut);
+
+ } else {
+ cutType = null;
+ }
+
+ }
+
+ private void assertOnlyOneJMockContextIn(final List<Field> allFields) {
+ Field contextField = null;
+ for (final Field field : allFields) {
+ if (JUnitRuleMockery2.class.isAssignableFrom(field.getType())) {
+ if (null != contextField) {
+ fail("Test class should only have one JUnitRuleMockery2 field, found " + contextField.getName() + " and " + field.getName());
+ }
+ contextField = field;
+ }
+ }
+ }
+
+
+ protected Field locateClassUnderTestFieldIfAny(final List<Field> allFields) {
+ Field cutField = null;
+ for (final Field field : allFields) {
+ if(field.getAnnotation(ClassUnderTest.class) != null) {
+ if (null != cutField) {
+ fail("Test class should only have one field annotated with @ClassUnderTest, found " + cutField.getName() + " and " + field.getName());
+ }
+ cutField = field;
+ }
+ }
+ return cutField;
+ }
+
+ private List<Object> fillInAutoMocks(final Object target, final List<Field> allFields) {
+ return mockomatic.fillIn(target, allFields);
+ }
+ };
+ }
+
+
+ public <T> T getClassUnderTest() {
+ if(cutType == null) {
+ throw new IllegalStateException("No field annotated @ClassUnderTest was found");
+ }
+ return _Casts.uncheckedCast( container.getComponent(cutType) );
+ }
+
+
+ /**
+ * Ignoring any interaction with the mock; an allowing/ignoring mock will be
+ * returned in turn.
+ */
+ public <T> T ignoring(final T mock) {
+ checking(new Expectations() {
+ {
+ ignoring(mock);
+ }
+ });
+ return mock;
+ }
+
+ /**
+ * Allow any interaction with the mock; an allowing mock will be returned in
+ * turn.
+ */
+ public <T> T allowing(final T mock) {
+ checking(new Expectations() {
+ {
+ allowing(mock);
+ }
+ });
+ return mock;
+ }
+
+ /**
+ * Prohibit any interaction with the mock.
+ */
+ public <T> T never(final T mock) {
+ checking(new Expectations() {
+ {
+ never(mock);
+ }
+ });
+ return mock;
+ }
+
+ /**
+ * Ignore a set of mocks.
+ */
+ public void ignoring(Object... mocks) {
+ for (Object mock : mocks) {
+ ignoring(mock);
+ }
+ }
+
+
+ /**
+ * Require one interaction
+ * @return
+ */
+ public Object oneOf(final Object mock) {
+ checking(new Expectations() {
+ {
+ oneOf(mock);
+ }
+ });
+ return mock;
+ }
+
+ /**
+ * Require one interaction
+ * @return
+ * @deprecated use {@link #oneOf(Object)} instead
+ */
+ @Deprecated
+ public Object one(final Object mock) {
+ return oneOf(mock);
+ }
+
+ public static class ExpectationsOn<T> extends Expectations {
+ public ExpectationsOn(Object mock) {
+ this.mockObj = _Casts.uncheckedCast( mock );
+ }
+ private T mockObj;
+ public T mock() {
+ return mockObj;
+ }
+ }
+
+ public <T> T checking(T mock, Class<? extends ExpectationsOn<T>> expectationsClass) {
+ try {
+ Constructor<? extends ExpectationsOn<T>> constructor = expectationsClass.getConstructor(Object.class);
+ ExpectationsOn<T> expectations = constructor.newInstance(mock);
+ checking(expectations);
+ return mock;
+ } catch (Exception e) {
+ throw new AssertionFailedError("Unable to instantiate expectations class '" + expectationsClass.getName() + "'");
+ }
+ }
+
+
+}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/MyMockomatic.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/MyMockomatic.java
new file mode 100644
index 0000000..4422574
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/MyMockomatic.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.unittestsupport.jmocking;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jmock.Sequence;
+import org.jmock.States;
+import org.jmock.auto.Auto;
+import org.jmock.auto.Mock;
+
+class MyMockomatic {
+ private final JUnitRuleMockery2 context;
+
+ public MyMockomatic(final JUnitRuleMockery2 context) {
+ this.context = context;
+ }
+
+ public List<Object> fillIn(final Object object, final List<Field> knownFields) {
+ List<Object> mocks = new ArrayList<Object>();
+ for (final Field field : knownFields) {
+ autoMockIfAnnotated(object, field, mocks);
+ autoInstantiateIfAnnotated(object, field);
+ }
+ return mocks;
+ }
+
+ private void autoMockIfAnnotated(final Object object,
+ final Field field, List<Object> mocks) {
+ if (!field.isAnnotationPresent(Mock.class)) {
+ return;
+ }
+ final Object mock = context.mock(field.getType(), field.getName());
+ setAutoField(field, object, mock, "auto-mock field " + field.getName());
+ if(field.isAnnotationPresent(JUnitRuleMockery2.Ignoring.class)) {
+ context.ignoring(mock);
+ }
+ if(field.isAnnotationPresent(JUnitRuleMockery2.Allowing.class)) {
+ context.allowing(mock);
+ }
+ if(field.isAnnotationPresent(JUnitRuleMockery2.Never.class)) {
+ context.never(mock);
+ }
+ if(field.isAnnotationPresent(JUnitRuleMockery2.One.class)) {
+ context.oneOf(mock);
+ }
+ if(field.isAnnotationPresent(JUnitRuleMockery2.Checking.class)) {
+ checking(field, mock);
+ }
+ mocks.add(mock);
+ }
+
+ private <T> void checking(final Field field, final T mock) {
+ JUnitRuleMockery2.Checking checking = field.getAnnotation(JUnitRuleMockery2.Checking.class);
+ @SuppressWarnings("unchecked")
+ Class<? extends JUnitRuleMockery2.ExpectationsOn<T>> expectationsOnClass = (Class<? extends JUnitRuleMockery2.ExpectationsOn<T>>) checking.value();
+ context.checking(mock, expectationsOnClass);
+ }
+
+ private void autoInstantiateIfAnnotated(final Object object,
+ final Field field) {
+ if (!field.isAnnotationPresent(Auto.class)) {
+ return;
+ }
+ final Class<?> type = field.getType();
+ if (type == States.class) {
+ autoInstantiateStates(field, object);
+ } else if (type == Sequence.class) {
+ autoInstantiateSequence(field, object);
+ } else {
+ throw new IllegalStateException("cannot auto-instantiate field of type " + type.getName());
+ }
+ }
+
+ private void autoInstantiateStates(final Field field, final Object object) {
+ setAutoField(field, object, context.states(field.getName()), "auto-instantiate States field " + field.getName());
+ }
+
+ private void autoInstantiateSequence(final Field field, final Object object) {
+ setAutoField(field, object, context.sequence(field.getName()), "auto-instantiate Sequence field " + field.getName());
+ }
+
+ private void setAutoField(final Field field, final Object object, final Object value, final String description) {
+ try {
+ field.setAccessible(true);
+ field.set(object, value);
+ } catch (final IllegalAccessException e) {
+ throw new IllegalStateException("cannot " + description, e);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/PostponedAction.java
similarity index 54%
copy from core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
copy to core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/PostponedAction.java
index e324b16..cb43b6a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/unittestsupport/jmocking/PostponedAction.java
@@ -16,23 +16,31 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.spec;
+package org.apache.isis.core.metamodel.unittestsupport.jmocking;
-import java.util.Arrays;
-import java.util.List;
+import java.util.function.Supplier;
-import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
+import org.hamcrest.Description;
+import org.jmock.api.Action;
+import org.jmock.api.Invocation;
-public class ObjectSpecIdTest_valueSemantics extends ValueTypeContractTestAbstract<ObjectSpecId> {
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
- @Override
- protected List<ObjectSpecId> getObjectsWithSameValue() {
- return Arrays.asList(ObjectSpecId.of("CUS"), ObjectSpecId.of("CUS"), ObjectSpecId.of("CUS"));
+@RequiredArgsConstructor(staticName = "returnValuePostponed")
+public class PostponedAction implements Action {
+
+ @NonNull private Supplier<Object> resultSupplier;
+
+ public Object invoke(Invocation invocation) throws Throwable {
+ return resultSupplier.get();
}
- @Override
- protected List<ObjectSpecId> getObjectsWithDifferentValue() {
- return Arrays.asList(ObjectSpecId.of("bUS"), ObjectSpecId.of("CUt"));
+ public void describeTo(Description description) {
+ description.appendText("returns ");
+ description.appendValue(resultSupplier.get());
}
+
+
}