You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:26:13 UTC
[sling-org-apache-sling-testing-sling-mock] 06/13: SLING-6359
osgi-mock, sling-mock: Make ContextCallback and ContextBuilder more flexible
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.testing.sling-mock-2.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git
commit 02a5370304b2263e28bac41b14785f64c495b042
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Sat Dec 3 10:01:00 2016 +0000
SLING-6359 osgi-mock, sling-mock: Make ContextCallback and ContextBuilder more flexible
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/sling-mock@1772443 13f79535-47bb-0310-9956-ffa450edef68
---
...ingContextCallback.java => CallbackParams.java} | 36 ++++++------
.../testing/mock/sling/junit/SlingContext.java | 67 +++++++++++-----------
.../mock/sling/junit/SlingContextBuilder.java | 41 ++++++++-----
.../mock/sling/junit/SlingContextCallback.java | 14 +----
.../testing/mock/sling/junit/package-info.java | 2 +-
.../testing/mock/sling/junit/SlingContextTest.java | 5 +-
6 files changed, 87 insertions(+), 78 deletions(-)
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/CallbackParams.java
similarity index 53%
copy from src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
copy to src/main/java/org/apache/sling/testing/mock/sling/junit/CallbackParams.java
index 247185b..680ce04 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/CallbackParams.java
@@ -18,22 +18,26 @@
*/
package org.apache.sling.testing.mock.sling.junit;
-import java.io.IOException;
+import org.apache.sling.testing.mock.osgi.junit.ContextCallback;
-import org.apache.sling.api.resource.PersistenceException;
-
-/**
- * Callback-interface for application-specific setup and teardown operations to
- * customize the {@link SlingContext} JUnit rule.
- */
-public interface SlingContextCallback {
-
- /**
- * Execute callback action
- * @param context Sling context
- * @throws IOException I/O exception
- * @throws PersistenceException Persistence exception
- */
- void execute(SlingContext context) throws IOException, PersistenceException;
+final class CallbackParams {
+ ContextCallback[] beforeSetUpCallback;
+ ContextCallback[] afterSetUpCallback;
+ ContextCallback[] beforeTearDownCallback;
+ ContextCallback[] afterTearDownCallback;
+
+ CallbackParams() {
+ // no callbacks
+ }
+
+ CallbackParams(ContextCallback afterSetUpCallback) {
+ this.afterSetUpCallback = new ContextCallback[] { afterSetUpCallback };
+ }
+
+ CallbackParams(ContextCallback afterSetUpCallback, ContextCallback beforeTearDownCallback) {
+ this.afterSetUpCallback = new ContextCallback[] { afterSetUpCallback };
+ this.beforeTearDownCallback = new ContextCallback[] { beforeTearDownCallback };
+ }
+
}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java
index 9dcd712..37cfdcf 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java
@@ -20,6 +20,7 @@ package org.apache.sling.testing.mock.sling.junit;
import java.util.Map;
+import org.apache.sling.testing.mock.osgi.junit.ContextCallback;
import org.apache.sling.testing.mock.sling.ResourceResolverType;
import org.apache.sling.testing.mock.sling.context.SlingContextImpl;
import org.junit.rules.ExternalResource;
@@ -34,10 +35,7 @@ import org.junit.runners.model.Statement;
*/
public final class SlingContext extends SlingContextImpl implements TestRule {
- private final SlingContextCallback beforeSetUpCallback;
- private final SlingContextCallback afterSetUpCallback;
- private final SlingContextCallback beforeTearDownCallback;
- private final SlingContextCallback afterTearDownCallback;
+ private final CallbackParams callbackParams;
private final TestRule delegate;
/**
@@ -45,7 +43,7 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
* {@link org.apache.sling.testing.mock.sling.MockSling#DEFAULT_RESOURCERESOLVER_TYPE}.
*/
public SlingContext() {
- this(null, null, null);
+ this(new CallbackParams(), null, null);
}
/**
@@ -53,7 +51,7 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
* @param resourceResolverType Resource resolver type.
*/
public SlingContext(final ResourceResolverType resourceResolverType) {
- this(null, null, resourceResolverType);
+ this(new CallbackParams(), null, resourceResolverType);
}
/**
@@ -61,8 +59,8 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
* {@link org.apache.sling.testing.mock.sling.MockSling#DEFAULT_RESOURCERESOLVER_TYPE}.
* @param afterSetUpCallback Allows the application to register an own callback function that is called after the built-in setup rules are executed.
*/
- public SlingContext(final SlingContextCallback afterSetUpCallback) {
- this(afterSetUpCallback, null, null);
+ public SlingContext(final ContextCallback<?> afterSetUpCallback) {
+ this(new CallbackParams(afterSetUpCallback), null, null);
}
/**
@@ -70,8 +68,8 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
* @param afterSetUpCallback Allows the application to register an own callback function that is called after the built-in setup rules are executed.
* @param resourceResolverType Resource resolver type.
*/
- public SlingContext(final SlingContextCallback afterSetUpCallback, final ResourceResolverType resourceResolverType) {
- this(afterSetUpCallback, null, resourceResolverType);
+ public SlingContext(final ContextCallback<?> afterSetUpCallback, final ResourceResolverType resourceResolverType) {
+ this(new CallbackParams(afterSetUpCallback), null, resourceResolverType);
}
/**
@@ -80,8 +78,8 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
* @param afterSetUpCallback Allows the application to register an own callback function that is called after the built-in setup rules are executed.
* @param beforeTearDownCallback Allows the application to register an own callback function that is called before the built-in teardown rules are executed.
*/
- public SlingContext(final SlingContextCallback afterSetUpCallback, final SlingContextCallback beforeTearDownCallback) {
- this(afterSetUpCallback, beforeTearDownCallback, null);
+ public SlingContext(final ContextCallback<?> afterSetUpCallback, final ContextCallback<?> beforeTearDownCallback) {
+ this(new CallbackParams(afterSetUpCallback, beforeTearDownCallback), null, null);
}
/**
@@ -90,29 +88,22 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
* @param beforeTearDownCallback Allows the application to register an own callback function that is called before the built-in teardown rules are executed.
* @param resourceResolverType Resource resolver type.
*/
- public SlingContext(final SlingContextCallback afterSetUpCallback, final SlingContextCallback beforeTearDownCallback,
+ public SlingContext(final ContextCallback<?> afterSetUpCallback, final ContextCallback<?> beforeTearDownCallback,
final ResourceResolverType resourceResolverType) {
- this(null, afterSetUpCallback, beforeTearDownCallback, null, null, resourceResolverType);
+ this(new CallbackParams(afterSetUpCallback, beforeTearDownCallback), null, resourceResolverType);
}
/**
* Initialize Sling context with resource resolver type.
- * @param beforeSetUpCallback Allows the application to register an own callback function that is called before the built-in setup rules are executed.
- * @param afterSetUpCallback Allows the application to register an own callback function that is called after the built-in setup rules are executed.
- * @param beforeTearDownCallback Allows the application to register an own callback function that is called before the built-in teardown rules are executed.
- * @param afterTearDownCallback Allows the application to register an own callback function that is after before the built-in teardown rules are executed.
+ * @param callbackParams Callback parameters
* @param resourceResolverFactoryActivatorProps Allows to override OSGi configuration parameters for the Resource Resolver Factory Activator service.
* @param resourceResolverType Resource resolver type.
*/
- SlingContext(final SlingContextCallback beforeSetUpCallback, final SlingContextCallback afterSetUpCallback,
- final SlingContextCallback beforeTearDownCallback, final SlingContextCallback afterTearDownCallback,
+ SlingContext(final CallbackParams callbackParams,
final Map<String, Object> resourceResolverFactoryActivatorProps,
final ResourceResolverType resourceResolverType) {
- this.beforeSetUpCallback = beforeSetUpCallback;
- this.afterSetUpCallback = afterSetUpCallback;
- this.beforeTearDownCallback = beforeTearDownCallback;
- this.afterTearDownCallback = afterTearDownCallback;
+ this.callbackParams = callbackParams;
setResourceResolverFactoryActivatorProps(resourceResolverFactoryActivatorProps);
// set resource resolver type in parent context
@@ -141,40 +132,52 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
return this.delegate.apply(base, description);
}
+ @SuppressWarnings("unchecked")
private void executeBeforeSetUpCallback() {
- if (this.beforeSetUpCallback != null) {
+ if (callbackParams.beforeSetUpCallback != null) {
try {
- this.beforeSetUpCallback.execute(this);
+ for (ContextCallback callback : callbackParams.beforeSetUpCallback) {
+ callback.execute(this);
+ }
} catch (Throwable ex) {
throw new RuntimeException("Before setup failed: " + ex.getMessage(), ex);
}
}
}
+ @SuppressWarnings("unchecked")
private void executeAfterSetUpCallback() {
- if (this.afterSetUpCallback != null) {
+ if (callbackParams.afterSetUpCallback != null) {
try {
- this.afterSetUpCallback.execute(this);
+ for (ContextCallback callback : callbackParams.afterSetUpCallback) {
+ callback.execute(this);
+ }
} catch (Throwable ex) {
throw new RuntimeException("After setup failed: " + ex.getMessage(), ex);
}
}
}
+ @SuppressWarnings("unchecked")
private void executeBeforeTearDownCallback() {
- if (this.beforeTearDownCallback != null) {
+ if (callbackParams.beforeTearDownCallback != null) {
try {
- this.beforeTearDownCallback.execute(this);
+ for (ContextCallback callback : callbackParams.beforeTearDownCallback) {
+ callback.execute(this);
+ }
} catch (Throwable ex) {
throw new RuntimeException("Before teardown failed: " + ex.getMessage(), ex);
}
}
}
+ @SuppressWarnings("unchecked")
private void executeAfterTearDownCallback() {
- if (this.afterTearDownCallback != null) {
+ if (callbackParams.afterTearDownCallback != null) {
try {
- this.afterTearDownCallback.execute(this);
+ for (ContextCallback callback : callbackParams.afterTearDownCallback) {
+ callback.execute(this);
+ }
} catch (Throwable ex) {
throw new RuntimeException("After teardown failed: " + ex.getMessage(), ex);
}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java
index 62080fa..38adb2c 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java
@@ -20,6 +20,7 @@ package org.apache.sling.testing.mock.sling.junit;
import java.util.Map;
+import org.apache.sling.testing.mock.osgi.junit.ContextCallback;
import org.apache.sling.testing.mock.sling.ResourceResolverType;
/**
@@ -27,11 +28,8 @@ import org.apache.sling.testing.mock.sling.ResourceResolverType;
*/
public final class SlingContextBuilder {
+ private final CallbackParams callbackParams = new CallbackParams();
private ResourceResolverType resourceResolverType;
- private SlingContextCallback beforeSetUpCallback;
- private SlingContextCallback afterSetUpCallback;
- private SlingContextCallback beforeTearDownCallback;
- private SlingContextCallback afterTearDownCallback;
private Map<String, Object> resourceResolverFactoryActivatorProps;
/**
@@ -57,11 +55,19 @@ public final class SlingContextBuilder {
}
/**
+ * @param afterSetUpCallback Allows the application to register an own callback function that is called after the built-in setup rules are executed.
+ * @return this
+ */
+ public SlingContextBuilder setUp(ContextCallback... afterSetUpCallback) {
+ return afterSetUp(afterSetUpCallback);
+ }
+
+ /**
* @param beforeSetUpCallback Allows the application to register an own callback function that is called before the built-in setup rules are executed.
* @return this
*/
- public SlingContextBuilder beforeSetUp(SlingContextCallback beforeSetUpCallback) {
- this.beforeSetUpCallback = beforeSetUpCallback;
+ public SlingContextBuilder beforeSetUp(ContextCallback... beforeSetUpCallback) {
+ callbackParams.beforeSetUpCallback = beforeSetUpCallback;
return this;
}
@@ -69,8 +75,8 @@ public final class SlingContextBuilder {
* @param afterSetUpCallback Allows the application to register an own callback function that is called after the built-in setup rules are executed.
* @return this
*/
- public SlingContextBuilder afterSetUp(SlingContextCallback afterSetUpCallback) {
- this.afterSetUpCallback = afterSetUpCallback;
+ public SlingContextBuilder afterSetUp(ContextCallback... afterSetUpCallback) {
+ callbackParams.afterSetUpCallback = afterSetUpCallback;
return this;
}
@@ -78,8 +84,16 @@ public final class SlingContextBuilder {
* @param beforeTearDownCallback Allows the application to register an own callback function that is called before the built-in teardown rules are executed.
* @return this
*/
- public SlingContextBuilder beforeTearDown(SlingContextCallback beforeTearDownCallback) {
- this.beforeTearDownCallback = beforeTearDownCallback;
+ public SlingContextBuilder tearDown(ContextCallback... beforeTearDownCallback) {
+ return beforeTearDown(beforeTearDownCallback);
+ }
+
+ /**
+ * @param beforeTearDownCallback Allows the application to register an own callback function that is called before the built-in teardown rules are executed.
+ * @return this
+ */
+ public SlingContextBuilder beforeTearDown(ContextCallback... beforeTearDownCallback) {
+ callbackParams.beforeTearDownCallback = beforeTearDownCallback;
return this;
}
@@ -87,8 +101,8 @@ public final class SlingContextBuilder {
* @param afterTearDownCallback Allows the application to register an own callback function that is after before the built-in teardown rules are executed.
* @return this
*/
- public SlingContextBuilder afterTearDown(SlingContextCallback afterTearDownCallback) {
- this.afterTearDownCallback = afterTearDownCallback;
+ public SlingContextBuilder afterTearDown(ContextCallback... afterTearDownCallback) {
+ callbackParams.afterTearDownCallback = afterTearDownCallback;
return this;
}
@@ -106,8 +120,7 @@ public final class SlingContextBuilder {
* @return Build {@link SlingContext} instance.
*/
public SlingContext build() {
- return new SlingContext(this.beforeSetUpCallback, this.afterSetUpCallback,
- this.beforeTearDownCallback, this.afterTearDownCallback,
+ return new SlingContext(this.callbackParams,
this.resourceResolverFactoryActivatorProps,
this.resourceResolverType);
}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
index 247185b..4efdf44 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
@@ -18,22 +18,14 @@
*/
package org.apache.sling.testing.mock.sling.junit;
-import java.io.IOException;
-
-import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.testing.mock.osgi.junit.ContextCallback;
/**
* Callback-interface for application-specific setup and teardown operations to
* customize the {@link SlingContext} JUnit rule.
*/
-public interface SlingContextCallback {
+public interface SlingContextCallback extends ContextCallback<SlingContext> {
- /**
- * Execute callback action
- * @param context Sling context
- * @throws IOException I/O exception
- * @throws PersistenceException Persistence exception
- */
- void execute(SlingContext context) throws IOException, PersistenceException;
+ // specialized version of ContextCallback
}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java
index 93bf32e..3225203 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java
@@ -19,5 +19,5 @@
/**
* Rule for providing easy access to Sling context in JUnit tests.
*/
-@org.osgi.annotation.versioning.Version("3.3")
+@org.osgi.annotation.versioning.Version("4.0")
package org.apache.sling.testing.mock.sling.junit;
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java b/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
index 71e9352..52b73d0 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
@@ -24,11 +24,8 @@ import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
-import java.io.IOException;
-
import org.apache.sling.api.adapter.AdapterFactory;
import org.apache.sling.api.adapter.SlingAdaptable;
-import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.testing.mock.sling.ResourceResolverType;
@@ -64,7 +61,7 @@ public class SlingContextTest {
.build();
@Before
- public void setUp() throws IOException, PersistenceException {
+ public void setUp() throws Exception {
verify(contextBeforeSetup).execute(context);
verify(contextAfterSetup).execute(context);
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.