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 2018/07/18 06:00:52 UTC

[isis] 03/09: ISIS-1954: adds BootstrappingGlueAbstract for BDD tests on Junit 5

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

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

commit 3aee989ea4c4e76bca08af07b52c6a118f8a199f
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jul 17 07:13:31 2018 +0100

    ISIS-1954: adds BootstrappingGlueAbstract for BDD tests on Junit 5
    
    calls ModuleBuilder to set up additional services.
    
    Also removed the Util class that was acting as a wrapper for ModuleBuilder and also TransactionRule support.
---
 .../integtestsupport/IntegrationTestAbstract3.java | 19 +++---
 .../integtestsupport/IntegrationTestJupiter.java   | 17 +++---
 .../isis/core/integtestsupport/ModuleBuilder.java  | 67 ++++++++++++++++++++++
 .../{Util.java => TransactionRuleAbstract.java}    | 51 +---------------
 ...java => HeadlessTransactionSupportDefault.java} |  2 +-
 .../HeadlessWithBootstrappingAbstract.java         | 15 ++---
 .../bdd/specglue/BootstrappingGlue.java            |  4 +-
 ...ingGlue.java => BootstrappingGlueAbstract.java} | 25 +++-----
 8 files changed, 106 insertions(+), 94 deletions(-)

diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract3.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract3.java
index d5a94a3..7dfb208 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract3.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract3.java
@@ -18,12 +18,6 @@
  */
 package org.apache.isis.core.integtestsupport;
 
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.applib.Module;
-import org.apache.isis.core.runtime.headless.HeadlessTransactionSupport;
-import org.apache.isis.core.runtime.headless.HeadlessWithBootstrappingAbstract;
-import org.apache.isis.core.runtime.headless.IsisSystem;
-import org.apache.isis.core.runtime.headless.logging.LogConfig;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -33,6 +27,13 @@ import org.junit.runners.model.FrameworkMethod;
 import org.junit.runners.model.Statement;
 import org.slf4j.event.Level;
 
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.Module;
+import org.apache.isis.core.runtime.headless.HeadlessTransactionSupport;
+import org.apache.isis.core.runtime.headless.HeadlessWithBootstrappingAbstract;
+import org.apache.isis.core.runtime.headless.IsisSystem;
+import org.apache.isis.core.runtime.headless.logging.LogConfig;
+
 /**
  * Reworked base class for integration tests, uses a {@link Module} to bootstrap, rather than an {@link AppManifest}.
  */
@@ -50,7 +51,7 @@ public abstract class IntegrationTestAbstract3 extends HeadlessWithBootstrapping
     @Rule
     public IntegrationTestAbstract3.IsisTransactionRule isisTransactionRule = new IntegrationTestAbstract3.IsisTransactionRule();
 
-    private static class IsisTransactionRule implements MethodRule {
+    private static class IsisTransactionRule extends TransactionRuleAbstract implements MethodRule {
 
         @Override
         public Statement apply(final Statement base, final FrameworkMethod method, final Object target) {
@@ -66,7 +67,7 @@ public abstract class IntegrationTestAbstract3 extends HeadlessWithBootstrapping
                         final IsisSystem isft = IsisSystem.get();
                         isft.getService(HeadlessTransactionSupport.class).endTransaction();
                     } catch(final Exception e) {
-                        Util.handleTransactionContextException(e);
+                        handleTransactionContextException(e);
                     }
                 }
 
@@ -82,7 +83,7 @@ public abstract class IntegrationTestAbstract3 extends HeadlessWithBootstrapping
             final LogConfig logConfig,
             final Module module) {
         super(logConfig,
-                Util.moduleBuilder(module)
+                ModuleBuilder.create(module)
                 .withHeadlessTransactionSupport()
                 .withIntegrationTestConfigFallback()
                 .build() );
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestJupiter.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestJupiter.java
index 5c05fb5..5745398 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestJupiter.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestJupiter.java
@@ -18,17 +18,18 @@
  */
 package org.apache.isis.core.integtestsupport;
 
+import org.junit.jupiter.api.extension.AfterEachCallback;
+import org.junit.jupiter.api.extension.BeforeEachCallback;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.slf4j.event.Level;
+
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.Module;
 import org.apache.isis.core.runtime.headless.HeadlessTransactionSupport;
 import org.apache.isis.core.runtime.headless.HeadlessWithBootstrappingAbstract;
 import org.apache.isis.core.runtime.headless.IsisSystem;
 import org.apache.isis.core.runtime.headless.logging.LogConfig;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.slf4j.event.Level;
 
 /**
  * Base class for integration tests for the JUnit 5 Jupiter Engine,
@@ -39,7 +40,7 @@ import org.slf4j.event.Level;
 @ExtendWith(IntegrationTestJupiter.HeadlessTransactionRule.class)
 public abstract class IntegrationTestJupiter extends HeadlessWithBootstrappingAbstract {
 
-    public static class HeadlessTransactionRule implements AfterEachCallback, BeforeEachCallback {
+    public static class HeadlessTransactionRule extends TransactionRuleAbstract implements AfterEachCallback, BeforeEachCallback {
 
         @Override
         public void beforeEach(ExtensionContext context) throws Exception {
@@ -54,7 +55,7 @@ public abstract class IntegrationTestJupiter extends HeadlessWithBootstrappingAb
                 final IsisSystem isft = IsisSystem.get();
                 isft.getService(HeadlessTransactionSupport.class).endTransaction();
             } catch(final Exception e) {
-                Util.handleTransactionContextException(e);
+                handleTransactionContextException(e);
             } finally {
                 final IntegrationTestJupiter testInstance = testInstance(context);
                 testInstance.tearDownAllModules();
@@ -77,7 +78,7 @@ public abstract class IntegrationTestJupiter extends HeadlessWithBootstrappingAb
             final LogConfig logConfig,
             final Module module) {
         super(logConfig,
-                Util.moduleBuilder(module)
+                ModuleBuilder.create(module)
                 .withHeadlessTransactionSupport()
                 .withIntegrationTestConfigFallback()
                 .build() );
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/ModuleBuilder.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/ModuleBuilder.java
new file mode 100644
index 0000000..561db04
--- /dev/null
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/ModuleBuilder.java
@@ -0,0 +1,67 @@
+/*
+ *  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.integtestsupport;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.Module;
+import org.apache.isis.core.integtestsupport.components.HeadlessTransactionSupportDefault;
+
+/**
+ * Provides the ability to wrap or extend a {@link Module} with additional services/configuration to allow the
+ * Module be used for bootstrapping integration tests.
+ */
+public class ModuleBuilder {
+
+    public static ModuleBuilder create(Module module) {
+        return new ModuleBuilder(module);
+    }
+
+    final Module module;
+    ModuleBuilder(Module module) {
+        this.module = module;
+    }
+
+    public Module build() {
+        return module;
+    }
+
+    /**
+     * Registers HeadlessTransactionSupportDefault as an additional service.
+     */
+    public ModuleBuilder withHeadlessTransactionSupport() {
+        module.getAdditionalServices().add(HeadlessTransactionSupportDefault.class);
+        return this;
+    }
+    /**
+     * Adds default fallback configuration values for integration tests,
+     * without overriding any existing key value pairs.
+     */
+    public ModuleBuilder withIntegrationTestConfigFallback() {
+        final Map<String, String> integrationTestDefaultConfig = new HashMap<>();
+        AppManifest.Util.withJavaxJdoRunInMemoryProperties(integrationTestDefaultConfig);
+        AppManifest.Util.withDataNucleusProperties(integrationTestDefaultConfig);
+        AppManifest.Util.withIsisIntegTestProperties(integrationTestDefaultConfig);
+
+        integrationTestDefaultConfig.forEach((k, v)-> module.getFallbackConfigProps().putIfAbsent(k, v));
+        return this;
+    }
+}
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/Util.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/TransactionRuleAbstract.java
similarity index 68%
rename from core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/Util.java
rename to core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/TransactionRuleAbstract.java
index edd5201..970e043 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/Util.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/TransactionRuleAbstract.java
@@ -19,63 +19,18 @@
 
 package org.apache.isis.core.integtestsupport;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.applib.Module;
 import org.apache.isis.applib.NonRecoverableException;
 import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.services.jdosupport.IsisJdoSupport;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.integtestsupport.components.DefaultHeadlessTransactionSupport;
 import org.apache.isis.core.runtime.headless.IsisSystem;
 
-class Util {
+public abstract class TransactionRuleAbstract {
 
-    // -- MODULE BUILDER
-
-    public static class ModuleBuilder {
-        final Module module;
-        private ModuleBuilder(Module module) {
-            this.module = module;
-        }
-        public Module build() {
-            return module;
-        }
-        /**
-         * Registers DefaultHeadlessTransactionSupport as an additional service.
-         */
-        public ModuleBuilder withHeadlessTransactionSupport() {
-            module.getAdditionalServices().add(DefaultHeadlessTransactionSupport.class);
-            return this;
-        }
-        /**
-         * Adds default fallback configuration values for integration tests,
-         * without overriding any existing key value pairs.
-         */
-        public ModuleBuilder withIntegrationTestConfigFallback() {
-            final Map<String, String> integrationTestDefaultConfig = new HashMap<>();
-            AppManifest.Util.withJavaxJdoRunInMemoryProperties(integrationTestDefaultConfig);
-            AppManifest.Util.withDataNucleusProperties(integrationTestDefaultConfig);
-            AppManifest.Util.withIsisIntegTestProperties(integrationTestDefaultConfig);
-
-            integrationTestDefaultConfig.forEach((k, v)->{
-                module.getFallbackConfigProps().computeIfAbsent(k, __->v);
-            });
-            return this;
-        }
-    }
-
-    public static ModuleBuilder moduleBuilder(Module module) {
-        return new ModuleBuilder(module);
-    }
-
-    // -- HANDLING EXCEPTIONS
-
-    public static void handleTransactionContextException(Exception e) throws Exception {
+    void handleTransactionContextException(Exception e) throws Exception {
         // determine if underlying cause is an applib-defined exception,
         final RecoverableException recoverableException =
                 determineIfRecoverableException(e);
@@ -149,6 +104,4 @@ class Util {
     }
 
 
-
-
 }
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/DefaultHeadlessTransactionSupport.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/HeadlessTransactionSupportDefault.java
similarity index 99%
rename from core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/DefaultHeadlessTransactionSupport.java
rename to core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/HeadlessTransactionSupportDefault.java
index 2706a50..6003e2f 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/DefaultHeadlessTransactionSupport.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/HeadlessTransactionSupportDefault.java
@@ -33,7 +33,7 @@ import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.core.runtime.system.transaction.IsisTransaction.State;
 
 @DomainService(nature=NatureOfService.DOMAIN)
-public class DefaultHeadlessTransactionSupport implements HeadlessTransactionSupport {
+public class HeadlessTransactionSupportDefault implements HeadlessTransactionSupport {
 
     @Override
     public void beginTransaction() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/HeadlessWithBootstrappingAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/HeadlessWithBootstrappingAbstract.java
index d693998..d764749 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/HeadlessWithBootstrappingAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/HeadlessWithBootstrappingAbstract.java
@@ -20,19 +20,20 @@ package org.apache.isis.core.runtime.headless;
 
 import java.io.PrintStream;
 
-import org.apache.isis.applib.Module;
-import org.apache.isis.applib.clock.Clock;
-import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.core.commons.factory.InstanceUtil;
-import org.apache.isis.core.runtime.headless.logging.LogConfig;
-import org.apache.isis.core.runtime.headless.logging.LogStream;
+import com.google.common.base.Strings;
+
 import org.apache.log4j.PropertyConfigurator;
 import org.joda.time.LocalDate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.event.Level;
 
-import com.google.common.base.Strings;
+import org.apache.isis.applib.Module;
+import org.apache.isis.applib.clock.Clock;
+import org.apache.isis.applib.services.xactn.TransactionService;
+import org.apache.isis.core.commons.factory.InstanceUtil;
+import org.apache.isis.core.runtime.headless.logging.LogConfig;
+import org.apache.isis.core.runtime.headless.logging.LogStream;
 
 /**
  * Provides headless access to the system, first bootstrapping the system if required.
diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java
index 654d555..c896845 100644
--- a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java
@@ -16,13 +16,11 @@ O *  Licensed to the Apache Software Foundation (ASF) under one or more
  */
 package domainapp.application.bdd.specglue;
 
-import org.apache.isis.core.runtime.headless.HeadlessWithBootstrappingAbstract;
-
 import cucumber.api.java.After;
 import cucumber.api.java.Before;
 import domainapp.application.DomainAppApplicationModule;
 
-public class BootstrappingGlue extends HeadlessWithBootstrappingAbstract {
+public class BootstrappingGlue extends BootstrappingGlueAbstract {
 
     @Before(order=100)
     public void beforeScenario() {
diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlueAbstract.java
similarity index 65%
copy from example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java
copy to example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlueAbstract.java
index 654d555..92e9eb8 100644
--- a/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlue.java
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/bdd/specglue/BootstrappingGlueAbstract.java
@@ -16,26 +16,17 @@ O *  Licensed to the Apache Software Foundation (ASF) under one or more
  */
 package domainapp.application.bdd.specglue;
 
+import org.apache.isis.applib.Module;
+import org.apache.isis.core.integtestsupport.ModuleBuilder;
 import org.apache.isis.core.runtime.headless.HeadlessWithBootstrappingAbstract;
 
-import cucumber.api.java.After;
-import cucumber.api.java.Before;
-import domainapp.application.DomainAppApplicationModule;
+public class BootstrappingGlueAbstract extends HeadlessWithBootstrappingAbstract {
 
-public class BootstrappingGlue extends HeadlessWithBootstrappingAbstract {
-
-    @Before(order=100)
-    public void beforeScenario() {
-        super.bootstrapAndSetupIfRequired();
-    }
-
-    @After
-    public void afterScenario(cucumber.api.Scenario sc) {
-        super.tearDownAllModules();
-    }
-
-    public BootstrappingGlue() {
-        super(new DomainAppApplicationModule());
+    public BootstrappingGlueAbstract(final Module module) {
+        super(ModuleBuilder.create(module)
+                .withHeadlessTransactionSupport()
+                .withIntegrationTestConfigFallback()
+                .build());
     }
 
 }