You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/07/05 05:28:23 UTC

[isis] branch master updated: ISIS-2787: housekeeping with tests:

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new b074db4  ISIS-2787: housekeeping with tests:
b074db4 is described below

commit b074db497e16d111de64f502d8df783530d34aa6
Author: andi-huber <ah...@apache.org>
AuthorDate: Mon Jul 5 07:28:12 2021 +0200

    ISIS-2787: housekeeping with tests:
    
    - move reflection tests to applib (as using the @Programmatic annot.)
    and align package naming
    - bundle the complexity for setting up service tests (w/o Spring and w/o
    mocking) into a common abstract test class (RuntimeServicesTestAbstract)
---
 .../reflection/ReflectSampleForTesting.java        |  2 +-
 .../commons/internal/reflection/ReflectTest.java   | 33 +++++----
 .../_testing/MetaModelContext_forTesting.java      | 18 ++++-
 .../RuntimeServicesTestAbstract.java               | 81 ++++++++++++++++++++++
 .../bootstrap3/MenuBarsServiceBS3Test.java         | 56 ++++-----------
 5 files changed, 127 insertions(+), 63 deletions(-)

diff --git a/core/runtimeservices/src/test/java/org/apache/isis/core/metamodel/commons/internal/reflection/ReflectSampleForTesting.java b/api/applib/src/test/java/org/apache/isis/applib/commons/internal/reflection/ReflectSampleForTesting.java
similarity index 94%
rename from core/runtimeservices/src/test/java/org/apache/isis/core/metamodel/commons/internal/reflection/ReflectSampleForTesting.java
rename to api/applib/src/test/java/org/apache/isis/applib/commons/internal/reflection/ReflectSampleForTesting.java
index 5bb3688..99bf53d 100644
--- a/core/runtimeservices/src/test/java/org/apache/isis/core/metamodel/commons/internal/reflection/ReflectSampleForTesting.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/commons/internal/reflection/ReflectSampleForTesting.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.commons.internal.reflection;
+package org.apache.isis.applib.commons.internal.reflection;
 
 public class ReflectSampleForTesting {
 
diff --git a/core/runtimeservices/src/test/java/org/apache/isis/core/metamodel/commons/internal/reflection/ReflectTest.java b/api/applib/src/test/java/org/apache/isis/applib/commons/internal/reflection/ReflectTest.java
similarity index 83%
rename from core/runtimeservices/src/test/java/org/apache/isis/core/metamodel/commons/internal/reflection/ReflectTest.java
rename to api/applib/src/test/java/org/apache/isis/applib/commons/internal/reflection/ReflectTest.java
index 1ca1bd5..94310a1 100644
--- a/core/runtimeservices/src/test/java/org/apache/isis/core/metamodel/commons/internal/reflection/ReflectTest.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/commons/internal/reflection/ReflectTest.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.metamodel.commons.internal.reflection;
+package org.apache.isis.applib.commons.internal.reflection;
 
 import java.lang.reflect.Method;
 import java.util.List;
@@ -27,10 +27,6 @@ import java.util.stream.Collectors;
 
 import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.commons.internal.reflection._Reflect.InterfacePolicy;
@@ -38,6 +34,9 @@ import org.apache.isis.commons.internal.reflection._Reflect.InterfacePolicy;
 import static org.apache.isis.commons.internal.reflection._Reflect.getAnnotation;
 import static org.apache.isis.commons.internal.reflection._Reflect.streamAllMethods;
 import static org.apache.isis.commons.internal.reflection._Reflect.streamTypeHierarchy;
+import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import lombok.val;
 
@@ -53,11 +52,11 @@ class ReflectTest {
                 .collect(Collectors.toSet());
 
         assertSetContainsAll(_Sets.<String>of(
-                    "org.apache.isis.core.metamodel.commons.internal.reflection.ReflectSampleForTesting$Nested",
+                    "org.apache.isis.applib.commons.internal.reflection.ReflectSampleForTesting$Nested",
                     "java.lang.Object"),
                 typeSet);
     }
-    
+
 
     @Test
     void typeHierarchyAndInterfaces() {
@@ -67,11 +66,11 @@ class ReflectTest {
         val typeSet = streamTypeHierarchy(type, InterfacePolicy.INCLUDE)
                 .map(Class::getName)
                 .collect(Collectors.toSet());
-        
+
         assertSetContainsAll(_Sets.<String>of(
-                    "org.apache.isis.core.metamodel.commons.internal.reflection.ReflectSampleForTesting$NestedInterface",
-                    "org.apache.isis.core.metamodel.commons.internal.reflection.ReflectSampleForTesting$Nested",
-                    "java.lang.Object"), 
+                    "org.apache.isis.applib.commons.internal.reflection.ReflectSampleForTesting$NestedInterface",
+                    "org.apache.isis.applib.commons.internal.reflection.ReflectSampleForTesting$Nested",
+                    "java.lang.Object"),
                 typeSet);
 
     }
@@ -84,10 +83,10 @@ class ReflectTest {
         val typeSet = streamAllMethods(type, true)
                 .map(m->m.toString())
                 .collect(Collectors.toSet());
-        
+
         assertSetContainsAll(_Sets.<String>of(
-                "public abstract void org.apache.isis.core.metamodel.commons.internal.reflection.ReflectSampleForTesting$NestedInterface.sayHello()",
-                "public void org.apache.isis.core.metamodel.commons.internal.reflection.ReflectSampleForTesting$Nested.sayHello()"),
+                "public abstract void org.apache.isis.applib.commons.internal.reflection.ReflectSampleForTesting$NestedInterface.sayHello()",
+                "public void org.apache.isis.applib.commons.internal.reflection.ReflectSampleForTesting$Nested.sayHello()"),
             typeSet);
 
     }
@@ -111,8 +110,8 @@ class ReflectTest {
     static interface I {
         static class B implements I {}
     }
-    
-    
+
+
     @Test
     void typeHierarchyAndInterfaces2() {
 
@@ -132,7 +131,7 @@ class ReflectTest {
 
 
     // -- HELPER
-    
+
     private static void assertSetContainsAll(Set<String> shouldContain, Set<String> actuallyContains) {
         assertTrue(_Sets.minus(shouldContain, actuallyContains).isEmpty());
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
index f10c498..f2f3127 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/MetaModelContext_forTesting.java
@@ -51,6 +51,7 @@ import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.collections._Streams;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
 import org.apache.isis.core.config.IsisConfiguration;
@@ -160,6 +161,9 @@ implements MetaModelContext {
     @Singular
     private List<Object> singletons;
 
+    @Singular
+    private List<_ManagedBeanAdapter> singletonProviders;
+
     // -- SERVICE SUPPORT
 
     @Override
@@ -212,7 +216,7 @@ implements MetaModelContext {
     }
 
     Stream<_ManagedBeanAdapter> streamBeanAdapters() {
-        return Stream.concat(
+        return _Streams.concat(
                 streamSingletons().map(_ManagedBeanAdapter::forTesting),
                 Stream.of(
                     // support for lazy bean providers,
@@ -221,7 +225,8 @@ implements MetaModelContext {
                     _ManagedBeanAdapter.forTestingLazy(JaxbService.class, this::getJaxbService),
                     _ManagedBeanAdapter.forTestingLazy(MenuBarsService.class, this::getMenuBarsService),
                     _ManagedBeanAdapter.forTestingLazy(LayoutService.class, this::getLayoutService)
-                ));
+                ),
+                singletonProviders.stream());
     }
 
     private static IsisSystemEnvironment newIsisSystemEnvironment() {
@@ -380,7 +385,14 @@ implements MetaModelContext {
     private final JaxbService jaxbService = new JaxbService.Simple();
 
     @Getter(lazy = true)
-    private final MenuBarsService menuBarsService = MenuBarsService.forTesting();
+    private final MenuBarsService menuBarsService = createMenuBarsService();
+    private final MenuBarsService createMenuBarsService() {
+        return getSingletonProviders().stream()
+                .filter(provider->provider.isCandidateFor(MenuBarsService.class))
+                .findFirst()
+                .map(provider->(MenuBarsService)provider.getInstance().getFirstOrFail())
+                .orElseGet(MenuBarsService::forTesting);
+    }
 
     @Getter(lazy = true)
     private final GridReaderUsingJaxb gridReader = createGridReader();
diff --git a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/RuntimeServicesTestAbstract.java b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/RuntimeServicesTestAbstract.java
new file mode 100644
index 0000000..a6014ce
--- /dev/null
+++ b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/RuntimeServicesTestAbstract.java
@@ -0,0 +1,81 @@
+package org.apache.isis.core.runtimeservices;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+
+import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.applib.services.menu.MenuBarsLoaderService;
+import org.apache.isis.applib.services.menu.MenuBarsService;
+import org.apache.isis.applib.services.message.MessageService;
+import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
+import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting.MetaModelContext_forTestingBuilder;
+import org.apache.isis.core.metamodel.context.HasMetaModelContext;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault;
+import org.apache.isis.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3;
+
+import lombok.Getter;
+import lombok.val;
+
+public abstract class RuntimeServicesTestAbstract
+implements HasMetaModelContext {
+
+    @Getter(onMethod_ = {@Override})
+    private MetaModelContext metaModelContext;
+
+    @BeforeEach
+    final void setUp() throws Exception {
+        val mmcBuilder = MetaModelContext_forTesting.builder();
+
+        // install runtime services into MMC (extend as needed)
+
+        mmcBuilder.singletonProvider(
+                _ManagedBeanAdapter
+                .forTestingLazy(MenuBarsLoaderService.class, ()->{
+
+                    val jaxbService = getServiceRegistry().lookupServiceElseFail(JaxbService.class);
+                    return new MenuBarsLoaderServiceDefault(
+                            getSystemEnvironment(),
+                            jaxbService,
+                            getConfiguration());
+                }));
+
+
+        mmcBuilder.singletonProvider(
+                _ManagedBeanAdapter
+                .forTestingLazy(MenuBarsService.class, ()->{
+
+                    val messageService = getServiceRegistry().lookupServiceElseFail(MessageService.class);
+                    val jaxbService = getServiceRegistry().lookupServiceElseFail(JaxbService.class);
+                    val menuBarsLoaderService = getServiceRegistry().lookupServiceElseFail(MenuBarsLoaderService.class);
+                    return new MenuBarsServiceBS3(
+                            menuBarsLoaderService,
+                            messageService,
+                            jaxbService,
+                            getSystemEnvironment(),
+                            metaModelContext);
+
+                    }));
+
+        onSetUp(mmcBuilder);
+        metaModelContext = mmcBuilder.build();
+        afterSetUp();
+    }
+
+    @AfterEach
+    final void tearDown() throws Exception {
+        onTearDown();
+        metaModelContext.getSpecificationLoader().disposeMetaModel();
+    }
+
+    protected void onSetUp(MetaModelContext_forTestingBuilder mmcBuilder) {
+    }
+
+    protected void afterSetUp() {
+    }
+
+    protected void onTearDown() {
+    }
+
+}
\ No newline at end of file
diff --git a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3Test.java b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3Test.java
index 2ae56a7..2aea10b 100644
--- a/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3Test.java
+++ b/core/runtimeservices/src/test/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3Test.java
@@ -18,69 +18,41 @@
  */
 package org.apache.isis.core.runtimeservices.menubars.bootstrap3;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import org.apache.isis.applib.services.jaxb.JaxbService;
-import org.apache.isis.applib.services.message.MessageService;
+import org.apache.isis.applib.services.menu.MenuBarsService;
 import org.apache.isis.commons.internal.base._Refs;
-import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
-import org.apache.isis.core.metamodel.context.HasMetaModelContext;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault;
+import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting.MetaModelContext_forTestingBuilder;
+import org.apache.isis.core.runtimeservices.RuntimeServicesTestAbstract;
 
 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 lombok.Getter;
 import lombok.val;
 
 class MenuBarsServiceBS3Test
-implements HasMetaModelContext {
-
-    @Getter(onMethod_ = {@Override})
-    private MetaModelContext metaModelContext;
+extends RuntimeServicesTestAbstract {
 
     private MenuBarsServiceBS3 menuBarsService;
 
-    @BeforeEach
-    void setUp() throws Exception {
-        metaModelContext = MetaModelContext_forTesting
-                .builder()
-                .singleton(new Bar())
-                .build();
+    @Override
+    protected void onSetUp(MetaModelContext_forTestingBuilder mmcBuilder) {
+        mmcBuilder.singleton(new Bar());
+    }
+
+    @Override
+    protected void afterSetUp() {
+        menuBarsService = (MenuBarsServiceBS3) getServiceRegistry().lookupServiceElseFail(MenuBarsService.class);
 
+        // double check, we are all set
         getSpecificationLoader().loadSpecification(Bar.class);
 
         assertTrue(getServiceRegistry().streamRegisteredBeans()
                 .anyMatch(bean->bean.getBeanClass().equals(Bar.class)));
 
-        assertTrue(metaModelContext.streamServiceAdapters()
+        assertTrue(getMetaModelContext().streamServiceAdapters()
                 .anyMatch(domainObject->domainObject.getSpecification().getCorrespondingClass().equals(Bar.class)));
-
-
-        val messageService = getServiceRegistry().lookupServiceElseFail(MessageService.class);
-        val jaxbService = getServiceRegistry().lookupServiceElseFail(JaxbService.class);
-
-        val menuBarsLoaderService = new MenuBarsLoaderServiceDefault(
-                getSystemEnvironment(),
-                jaxbService,
-                getConfiguration());
-
-        menuBarsService = new MenuBarsServiceBS3(
-                menuBarsLoaderService,
-                messageService,
-                jaxbService,
-                getSystemEnvironment(),
-                metaModelContext);
-
-    }
-
-    @AfterEach
-    void tearDown() throws Exception {
-        getSpecificationLoader().disposeMetaModel();
     }
 
     @Test