You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2022/02/04 14:45:14 UTC

[sling-org-apache-sling-api] branch master updated: SLING-11123 : Multiple puts with same key are not handled correctly

This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-api.git


The following commit(s) were added to refs/heads/master by this push:
     new 9232ef9  SLING-11123 : Multiple puts with same key are not handled correctly
9232ef9 is described below

commit 9232ef9b6a4f025f58622d2d2c3b41fa5c29fb18
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Fri Feb 4 15:45:04 2022 +0100

    SLING-11123 : Multiple puts with same key are not handled correctly
---
 .../org/apache/sling/api/scripting/LazyBindings.java     |  4 +++-
 .../org/apache/sling/api/scripting/LazyBindingsTest.java | 16 +++++++++++++++-
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/api/scripting/LazyBindings.java b/src/main/java/org/apache/sling/api/scripting/LazyBindings.java
index 4acb4e5..d44acd2 100644
--- a/src/main/java/org/apache/sling/api/scripting/LazyBindings.java
+++ b/src/main/java/org/apache/sling/api/scripting/LazyBindings.java
@@ -74,11 +74,13 @@ public class LazyBindings extends HashMap<String, Object> implements Bindings {
 
     @Override
     public Object put(String key, Object value) {
-        Object previous = super.get(key);
+        Object previous = this.get(key);
         if (value instanceof LazyBindings.Supplier) {
             suppliers.put(key, (LazyBindings.Supplier) value);
+            super.remove(key);
         } else {
             super.put(key, value);
+            suppliers.remove(key);
         }
         return previous;
     }
diff --git a/src/test/java/org/apache/sling/api/scripting/LazyBindingsTest.java b/src/test/java/org/apache/sling/api/scripting/LazyBindingsTest.java
index 65a65bf..a50b45c 100644
--- a/src/test/java/org/apache/sling/api/scripting/LazyBindingsTest.java
+++ b/src/test/java/org/apache/sling/api/scripting/LazyBindingsTest.java
@@ -84,7 +84,7 @@ public class LazyBindingsTest {
     public void testPut() {
         assertFalse(usedSuppliers.contains(THE_QUESTION));
         Object supplierProvidedValueReplacement = lazyBindings.put(THE_QUESTION, 43);
-        assertNull(supplierProvidedValueReplacement);
+        assertEquals(42, supplierProvidedValueReplacement);
         assertEquals(43, lazyBindings.get(THE_QUESTION));
 
         lazyBindings.put("putSupplier", (LazyBindings.Supplier) () -> {
@@ -206,6 +206,20 @@ public class LazyBindingsTest {
         assertFalse(usedSuppliers.contains(supplierName));
     }
 
+    @Test
+    public void testMultiplePuts() {
+        final LazyBindings bindings = new LazyBindings();
+        bindings.put("foo", "bar");
+        bindings.put("foo", new LazyBindings.Supplier() {
+
+            @Override
+            public Object get() {
+                return "lazybar";
+            }
+        });
+        assertEquals("lazybar", bindings.get("foo"));
+    }
+
     private class TestSupplier implements LazyBindings.Supplier {
 
         private final String name;