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 <[email protected]> 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. */ [email protected]("3.3") [email protected]("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 "[email protected]" <[email protected]>.
