You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2018/01/19 14:00:01 UTC
[sling-org-apache-sling-scripting-sightly-compiler-java] branch
master updated: SLING-7404 - ObjectModel and similar classes need
consistent null checks
This is an automated email from the ASF dual-hosted git repository.
radu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-compiler-java.git
The following commit(s) were added to refs/heads/master by this push:
new e9bdb14 SLING-7404 - ObjectModel and similar classes need consistent null checks
e9bdb14 is described below
commit e9bdb1462fa7eeeae62a8d16990485dd77f8b6e5
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Fri Jan 19 14:37:18 2018 +0100
SLING-7404 - ObjectModel and similar classes need consistent null checks
(closes #2)
---
.../sightly/render/AbstractRuntimeObjectModel.java | 9 ++
.../render/AbstractRuntimeObjectModelTest.java | 116 +++++++++++++++++++++
2 files changed, 125 insertions(+)
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 7235cfa..2e77d46 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,6 +73,9 @@ public abstract class AbstractRuntimeObjectModel implements RuntimeObjectModel {
@Override
public Object resolveProperty(Object target, Object property) {
+ if (target == null || property == null) {
+ return null;
+ }
Object resolved = null;
if (property instanceof Number) {
resolved = ObjectModel.getIndex(target, ((Number) property).intValue());
@@ -133,6 +136,9 @@ public abstract class AbstractRuntimeObjectModel implements RuntimeObjectModel {
}
protected Object getProperty(Object target, Object propertyObj) {
+ if (target == null || propertyObj == null) {
+ return null;
+ }
String property = ObjectModel.toString(propertyObj);
Object result = null;
if (target instanceof Record) {
@@ -205,6 +211,9 @@ public abstract class AbstractRuntimeObjectModel implements RuntimeObjectModel {
*/
@Deprecated
protected Object getMapProperty(Map map, String property) {
+ if (map == null) {
+ return null;
+ }
return map.get(property);
}
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 12bd65c..87f14a0 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
@@ -17,11 +17,16 @@
package org.apache.sling.scripting.sightly.render;
import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
import java.util.Collections;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import org.apache.sling.scripting.sightly.Record;
import org.junit.Test;
import static org.junit.Assert.*;
@@ -32,6 +37,9 @@ public class AbstractRuntimeObjectModelTest {
@Test
public void testResolveProperty() {
+ assertNull(runtimeObjectModel.resolveProperty(null, null));
+ assertNull(runtimeObjectModel.resolveProperty(this, null));
+ assertNull(runtimeObjectModel.resolveProperty(this, ""));
assertEquals(0, runtimeObjectModel.resolveProperty(Collections.EMPTY_LIST, "size"));
assertNull(runtimeObjectModel.resolveProperty(null, null));
int[] ints = new int[] {1, 2, 3};
@@ -58,6 +66,114 @@ public class AbstractRuntimeObjectModelTest {
}};
assertEquals("one", runtimeObjectModel.resolveProperty(stringMap, 1));
assertEquals("two", runtimeObjectModel.resolveProperty(stringMap, 2));
+ Map<String, String> strings = new HashMap<String, String>(){{
+ put("a", "one");
+ put("b", "two");
+ }};
+ Record<String> record = new Record<String>() {
+ @Override
+ public String getProperty(String name) {
+ return strings.get(name);
+ }
+
+ @Override
+ public Set<String> getPropertyNames() {
+ return strings.keySet();
+ }
+ };
+ assertEquals("one", runtimeObjectModel.resolveProperty(record, "a"));
+ }
+
+ @Test
+ public void testGetMapProperty() {
+ assertNull(runtimeObjectModel.getMapProperty(null, null));
+ Map<String, Integer> map = new HashMap<String, Integer>() {{
+ put("one", 1);
+ put("two", 2);
+ }};
+ assertEquals(1, runtimeObjectModel.getMapProperty(map, "one"));
+ assertNull(runtimeObjectModel.getMapProperty(map, null));
+ }
+
+ @Test
+ public void testToDate() {
+ assertNull(runtimeObjectModel.toDate(null));
+ Date testDate = new Date();
+ assertEquals(testDate, runtimeObjectModel.toDate(testDate));
+ Calendar testCalendar = Calendar.getInstance();
+ assertEquals(testCalendar.getTime(), runtimeObjectModel.toDate(testCalendar));
+ }
+
+ @Test
+ public void testGetPropertyNullChecks() {
+ assertNull(runtimeObjectModel.getProperty(null, null));
+ assertNull(runtimeObjectModel.getProperty(this, null));
+ assertNull(runtimeObjectModel.getProperty(this, ""));
+ }
+
+ @Test
+ public void testIsDate() {
+ assertFalse(runtimeObjectModel.isDate(null));
+ assertTrue(runtimeObjectModel.isDate(new Date()));
+ assertTrue(runtimeObjectModel.isDate(Calendar.getInstance()));
+ }
+
+ @Test
+ public void testIsNumber() {
+ assertFalse(runtimeObjectModel.isNumber(null));
+ assertFalse(runtimeObjectModel.isNumber(""));
+ assertTrue(runtimeObjectModel.isNumber(0));
+ assertTrue(runtimeObjectModel.isNumber(0.5));
+ assertTrue(runtimeObjectModel.isNumber("0"));
+ assertTrue(runtimeObjectModel.isNumber("0.5"));
+ }
+
+ @Test
+ public void testToCollection() {
+ assertTrue(runtimeObjectModel.toCollection(null).isEmpty());
+ Record<String> record = new Record<String>() {
+
+ private Map<String, String> properties = new HashMap<String, String>() {{
+ put("a", "1");
+ put("b", "2");
+ }};
+
+ @Override
+ public String getProperty(String name) {
+ return properties.get(name);
+ }
+
+ @Override
+ public Set<String> getPropertyNames() {
+ return properties.keySet();
+ }
+ };
+ Collection testCollection = runtimeObjectModel.toCollection(record);
+ assertEquals(2, testCollection.size());
+ assertTrue(testCollection.contains("a"));
+ assertTrue(testCollection.contains("b"));
+ }
+
+ @Test
+ public void testToMap() {
+ final Map<String, String> properties = new HashMap<String, String>() {{
+ put("a", "1");
+ put("b", "2");
+ }};
+ assertEquals(properties, runtimeObjectModel.toMap(properties));
+ Record<String> record = new Record<String>() {
+ @Override
+ public String getProperty(String name) {
+ return properties.get(name);
+ }
+
+ @Override
+ public Set<String> getPropertyNames() {
+ return properties.keySet();
+ }
+ };
+ assertEquals(properties, runtimeObjectModel.toMap(record));
+ assertTrue(runtimeObjectModel.toMap(null).isEmpty());
}
}
--
To stop receiving notification emails like this one, please contact
['"commits@sling.apache.org" <co...@sling.apache.org>'].