SLING-10944 sling-mock: Tear down MockSlingBindings on context tear down
diff --git a/core/src/main/java/org/apache/sling/testing/mock/sling/context/MockSlingBindings.java b/core/src/main/java/org/apache/sling/testing/mock/sling/context/MockSlingBindings.java
index 3aea292..e177da5 100644
--- a/core/src/main/java/org/apache/sling/testing/mock/sling/context/MockSlingBindings.java
+++ b/core/src/main/java/org/apache/sling/testing/mock/sling/context/MockSlingBindings.java
@@ -48,7 +48,7 @@
*/
static final String SERVICE_PROPERTY_MOCK_SLING_BINDINGS_IGNORE = "MockSlingBindings-ignore";
- private final SlingContextImpl context;
+ private volatile SlingContextImpl context;
public MockSlingBindings(SlingContextImpl context) {
this.context = context;
@@ -57,6 +57,9 @@
@Override
public Object get(Object key) {
+ if (this.context == null) {
+ return null;
+ }
if (key instanceof String) {
Object result = context.resolveSlingBindingProperty((String)key, context.request());
if (result != null) {
@@ -81,6 +84,9 @@
@Override
public void handleEvent(Event event) {
+ if (this.context == null) {
+ return;
+ }
// is triggered by OSGi events fired by {@link org.apache.sling.scripting.core.impl.BindingsValuesProvidersByContextImpl}
// whenever a new bindings value provider is added or removed
populateFromBindingsValuesProvider();
@@ -126,4 +132,8 @@
return null;
}
+ public void tearDown() {
+ this.context = null;
+ }
+
}
diff --git a/core/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java b/core/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
index 10b67df..a8b0b48 100644
--- a/core/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
+++ b/core/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
@@ -119,6 +119,7 @@
/**
* Setup actions before test method execution
*/
+ @Override
protected void setUp() {
super.setUp();
MockSling.setAdapterManagerBundleContext(bundleContext());
@@ -212,8 +213,16 @@
/**
* Teardown actions after test method execution
*/
+ @Override
protected void tearDown() {
+ if (this.request != null) {
+ MockSlingBindings slingBindings = (MockSlingBindings)this.request.getAttribute(SlingBindings.class.getName());
+ if (slingBindings != null) {
+ slingBindings.tearDown();
+ }
+ }
+
if (this.resourceResolver != null) {
// revert potential unsaved changes in resource resolver/JCR session