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());
}
}