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:24:40 UTC
[sling-org-apache-sling-testing-sling-mock] 08/17: 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-1.9.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git
commit 9125ce1e9885d68fc7c3a0d1ff1a3d1e951fa72b
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/branches/testing/mocks/sling-mock-1.x@1772443 13f79535-47bb-0310-9956-ffa450edef68
---
...ingContextCallback.java => CallbackParams.java} | 36 ++++----
.../testing/mock/sling/junit/SlingContext.java | 95 ++++++++++++----------
.../mock/sling/junit/SlingContextBuilder.java | 63 +++++++++-----
.../mock/sling/junit/SlingContextCallback.java | 14 +---
.../testing/mock/sling/junit/package-info.java | 2 +-
.../testing/mock/sling/junit/SlingContextTest.java | 5 +-
6 files changed, 117 insertions(+), 98 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..9201f79 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);
}
/**
@@ -62,7 +60,7 @@ 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.
*/
public SlingContext(final SlingContextCallback afterSetUpCallback) {
- this(afterSetUpCallback, null, null);
+ this(new CallbackParams(afterSetUpCallback), null, null);
}
/**
@@ -71,7 +69,7 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
* @param resourceResolverType Resource resolver type.
*/
public SlingContext(final SlingContextCallback afterSetUpCallback, final ResourceResolverType resourceResolverType) {
- this(afterSetUpCallback, null, resourceResolverType);
+ this(new CallbackParams(afterSetUpCallback), null, resourceResolverType);
}
/**
@@ -81,7 +79,7 @@ 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.
*/
public SlingContext(final SlingContextCallback afterSetUpCallback, final SlingContextCallback beforeTearDownCallback) {
- this(afterSetUpCallback, beforeTearDownCallback, null);
+ this(new CallbackParams(afterSetUpCallback, beforeTearDownCallback), null, null);
}
/**
@@ -92,27 +90,20 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
*/
public SlingContext(final SlingContextCallback afterSetUpCallback, final SlingContextCallback 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,44 +132,60 @@ public final class SlingContext extends SlingContextImpl implements TestRule {
return this.delegate.apply(base, description);
}
+ @SuppressWarnings("unchecked")
private void executeBeforeSetUpCallback() {
- if (this.beforeSetUpCallback != null) {
- try {
- this.beforeSetUpCallback.execute(this);
- } catch (Throwable ex) {
- throw new RuntimeException("Before setup failed: " + ex.getMessage(), ex);
- }
+ if (callbackParams.beforeSetUpCallback != null) {
+ try {
+ 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) {
- try {
- this.afterSetUpCallback.execute(this);
- } catch (Throwable ex) {
- throw new RuntimeException("After setup failed: " + ex.getMessage(), ex);
- }
+ if (callbackParams.afterSetUpCallback != null) {
+ try {
+ 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) {
- try {
- this.beforeTearDownCallback.execute(this);
- } catch (Throwable ex) {
- throw new RuntimeException("Before teardown failed: " + ex.getMessage(), ex);
- }
+ if (callbackParams.beforeTearDownCallback != null) {
+ try {
+ 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) {
- try {
- this.afterTearDownCallback.execute(this);
- } catch (Throwable ex) {
- throw new RuntimeException("After teardown failed: " + ex.getMessage(), ex);
- }
+ if (callbackParams.afterTearDownCallback != null) {
+ try {
+ 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..3fd870f 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,39 +55,61 @@ public final class SlingContextBuilder {
}
/**
- * @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.
* @return this
*/
- public SlingContextBuilder beforeSetUp(SlingContextCallback beforeSetUpCallback) {
- this.beforeSetUpCallback = beforeSetUpCallback;
- return this;
+ public SlingContextBuilder setUp(ContextCallback... afterSetUpCallback) {
+ return afterSetUp(afterSetUpCallback);
}
/**
- * @param afterSetUpCallback Allows the application to register an own callback function that is called after the built-in setup rules are executed.
+ * @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 afterSetUp(SlingContextCallback afterSetUpCallback) {
- this.afterSetUpCallback = afterSetUpCallback;
- return this;
+ public SlingContextBuilder beforeSetUp(ContextCallback... beforeSetUpCallback) {
+ callbackParams.beforeSetUpCallback = beforeSetUpCallback;
+ return this;
}
/**
- * @param beforeTearDownCallback Allows the application to register an own callback function that is called before the built-in teardown 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.
* @return this
*/
- public SlingContextBuilder beforeTearDown(SlingContextCallback beforeTearDownCallback) {
- this.beforeTearDownCallback = beforeTearDownCallback;
- return this;
+ public SlingContextBuilder afterSetUp(ContextCallback... afterSetUpCallback) {
+ callbackParams.afterSetUpCallback = afterSetUpCallback;
+ return this;
}
/**
- * @param afterTearDownCallback Allows the application to register an own callback function that is after before the built-in teardown 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.
* @return this
*/
- public SlingContextBuilder afterTearDown(SlingContextCallback afterTearDownCallback) {
- this.afterTearDownCallback = afterTearDownCallback;
- return this;
+ 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;
+ }
+
+ /**
+ * @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(ContextCallback... afterTearDownCallback) {
+ callbackParams.afterTearDownCallback = afterTearDownCallback;
+ return this;
}
/**
@@ -106,8 +126,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 72cb53a..f8109b3 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.
*/
-@aQute.bnd.annotation.Version("3.3")
+@aQute.bnd.annotation.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 d99ed80..d186c92 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,9 +24,6 @@ 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.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
@@ -63,7 +60,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>.