SLING-7380 - Querying maps with Integer keys returns null
* corrected object property resolution in org.apache.sling.scripting.sightly.render.AbstractRuntimeObjectModel#resolveProperty
and org.apache.sling.scripting.sightly.render.AbstractRuntimeObjectModel#getProperty
(closes #1)
diff --git a/pom.xml b/pom.xml
index 6ae0363..2d3de5a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -159,7 +159,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.scripting.sightly.compiler</artifactId>
- <version>1.0.14</version>
+ <version>1.0.17-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
diff --git a/src/main/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModel.java b/src/main/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModel.java
index 3518f55..7235cfa 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModel.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModel.java
@@ -73,10 +73,11 @@
@Override
public Object resolveProperty(Object target, Object property) {
- Object resolved;
+ Object resolved = null;
if (property instanceof Number) {
resolved = ObjectModel.getIndex(target, ((Number) property).intValue());
- } else {
+ }
+ if (resolved == null) {
resolved = getProperty(target, property);
}
return resolved;
@@ -138,7 +139,7 @@
result = ((Record) target).getProperty(property);
}
if (result == null) {
- result = ObjectModel.resolveProperty(target, property);
+ result = ObjectModel.resolveProperty(target, propertyObj);
}
return result;
}
diff --git a/src/test/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModelTest.java b/src/test/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModelTest.java
index 1cc988c..12bd65c 100644
--- a/src/test/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModelTest.java
+++ b/src/test/java/org/apache/sling/scripting/sightly/render/AbstractRuntimeObjectModelTest.java
@@ -16,6 +16,12 @@
******************************************************************************/
package org.apache.sling.scripting.sightly.render;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.junit.Test;
import static org.junit.Assert.*;
@@ -25,10 +31,33 @@
private AbstractRuntimeObjectModel runtimeObjectModel = new AbstractRuntimeObjectModel() {};
@Test
- public void testResolveProperty_ArrayLength() throws Exception {
+ public void testResolveProperty() {
+ assertEquals(0, runtimeObjectModel.resolveProperty(Collections.EMPTY_LIST, "size"));
+ assertNull(runtimeObjectModel.resolveProperty(null, null));
int[] ints = new int[] {1, 2, 3};
- Integer[] integers = new Integer[] {1, 2, 3};
assertEquals(ints.length, runtimeObjectModel.resolveProperty(ints, "length"));
- assertEquals(integers.length, runtimeObjectModel.resolveProperty(integers, "length"));
+ Integer[] testArray = new Integer[] {1, 2, 3};
+ assertEquals(testArray.length, runtimeObjectModel.resolveProperty(testArray, "length"));
+ assertEquals(2, runtimeObjectModel.resolveProperty(testArray, 1));
+ assertNull(runtimeObjectModel.resolveProperty(testArray, 3));
+ assertNull(runtimeObjectModel.resolveProperty(testArray, -1));
+ List<Integer> testList = Arrays.asList(testArray);
+ assertEquals(2, runtimeObjectModel.resolveProperty(testList, 1));
+ assertNull(runtimeObjectModel.resolveProperty(testList, 3));
+ assertNull(runtimeObjectModel.resolveProperty(testList, -1));
+ Map<String, Integer> map = new HashMap<String, Integer>() {{
+ put("one", 1);
+ put("two", 2);
+ }};
+ assertEquals(1, runtimeObjectModel.resolveProperty(map, "one"));
+ assertNull(runtimeObjectModel.resolveProperty(map, null));
+ assertNull(runtimeObjectModel.resolveProperty(map, ""));
+ Map<Integer, String> stringMap = new HashMap<Integer, String>(){{
+ put(1, "one");
+ put(2, "two");
+ }};
+ assertEquals("one", runtimeObjectModel.resolveProperty(stringMap, 1));
+ assertEquals("two", runtimeObjectModel.resolveProperty(stringMap, 2));
}
+
}