You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2020/04/14 11:51:48 UTC

[felix-dev] branch master updated: Fix array conversion and enable all test cases

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/felix-dev.git


The following commit(s) were added to refs/heads/master by this push:
     new 2fbd4ed  Fix array conversion and enable all test cases
2fbd4ed is described below

commit 2fbd4edd9906370adbb9645695f905f32b40bc12
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue Apr 14 13:51:36 2020 +0200

    Fix array conversion and enable all test cases
---
 .../org/apache/felix/cm/json/impl/JsonSupport.java | 29 +++++++++++++---------
 .../apache/felix/cm/json/impl/JsonSupportTest.java | 13 +++++++---
 .../felix/cm/json/impl/TypeConverterTest.java      | 10 ++++++--
 3 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/cm.json/src/main/java/org/apache/felix/cm/json/impl/JsonSupport.java b/cm.json/src/main/java/org/apache/felix/cm/json/impl/JsonSupport.java
index 5b72c96..8668856 100644
--- a/cm.json/src/main/java/org/apache/felix/cm/json/impl/JsonSupport.java
+++ b/cm.json/src/main/java/org/apache/felix/cm/json/impl/JsonSupport.java
@@ -40,6 +40,7 @@ import javax.json.JsonValue;
 import javax.json.JsonValue.ValueType;
 
 import org.apache.felix.cm.json.Configurations;
+import org.osgi.util.converter.Converters;
 
 public class JsonSupport {
 
@@ -81,16 +82,26 @@ public class JsonSupport {
             if (arrayType == ValueType.FALSE || arrayType == ValueType.TRUE) {
                 objArray = new Boolean[array.size()];
             } else if (arrayType == ValueType.NUMBER) {
-                final boolean isLong = ((JsonNumber) array.get(0)).isIntegral();
-                objArray = isLong ? new Long[array.size()] : new Double[array.size()];
-            } else if (arrayType == ValueType.STRING) {
+                objArray = new Object[array.size()];
+            } else if (arrayType == ValueType.STRING || arrayType == ValueType.OBJECT) {
                 objArray = new String[array.size()];
             } else {
-                objArray = null;
+            	objArray = null;
             }
             if (objArray != null) {
+                boolean isLong = true;
                 for (int i = 0; i < array.size(); i++) {
                     objArray[i] = convertToObject(array.get(i));
+                    if ( arrayType == ValueType.NUMBER && !(objArray[i] instanceof Long) ) {
+                        isLong = false;
+                    }
+                }
+                if ( arrayType == ValueType.NUMBER ) {
+                    if ( isLong ) {
+                        return Converters.standardConverter().convert(objArray).to(Long[].class);
+                    } else {
+                        return Converters.standardConverter().convert(objArray).to(Double[].class);
+                    }
                 }
                 return objArray;
             }
@@ -104,7 +115,7 @@ public class JsonSupport {
 
     /**
      * Detect the value type of a json array. If all elements in the array have the
-     * same type, this type is returned. Otherwise {@code ValueType#OBJECT} is
+     * same type, this type is returned. Otherwise {@code null} is
      * returned. For an empty array {@code ValueType#STRING} is returned.
      *
      * @param array The array
@@ -115,24 +126,18 @@ public class JsonSupport {
             return ValueType.STRING;
         }
         final ValueType vt = array.get(0).getValueType();
-        final boolean isLong = vt == ValueType.NUMBER && ((JsonNumber) array.get(0)).isIntegral();
         for (int i = 1; i < array.size(); i++) {
             final ValueType ct = array.get(i).getValueType();
             boolean isSame = false;
             if (ct == vt) {
                 isSame = true;
-                if (vt == ValueType.NUMBER) {
-                    if (isLong != ((JsonNumber) array.get(i)).isIntegral()) {
-                        isSame = false;
-                    }
-                }
             } else if (vt == ValueType.TRUE && ct == ValueType.FALSE) {
                 isSame = true;
             } else if (vt == ValueType.FALSE && ct == ValueType.TRUE) {
                 isSame = true;
             }
             if (!isSame) {
-                return ValueType.OBJECT;
+                return null;
             }
         }
         return vt;
diff --git a/cm.json/src/test/java/org/apache/felix/cm/json/impl/JsonSupportTest.java b/cm.json/src/test/java/org/apache/felix/cm/json/impl/JsonSupportTest.java
index 71a192d..56e6cc6 100644
--- a/cm.json/src/test/java/org/apache/felix/cm/json/impl/JsonSupportTest.java
+++ b/cm.json/src/test/java/org/apache/felix/cm/json/impl/JsonSupportTest.java
@@ -96,9 +96,10 @@ public class JsonSupportTest {
 
         assertArrayEquals(new Long[] { 5L, 3L }, (Long[]) Configurations.convertToObject(lBuilder.build()));
         assertArrayEquals(new Double[] { 5.7, 3.7 }, (Double[]) Configurations.convertToObject(dBuilder.build()));
-        assertEquals("[5.7,3]", Configurations.convertToObject(mBuilder.build()));
+        assertArrayEquals(new Double[] { 5.7, 3d }, (Double[]) Configurations.convertToObject(mBuilder.build()));
     }
 
+    @Test
     public void testConvertStringArrayToObject() {
         final JsonArrayBuilder sBuilder = Json.createArrayBuilder();
         sBuilder.add("hello");
@@ -114,6 +115,7 @@ public class JsonSupportTest {
         assertArrayEquals(new String[] { "hello", "3" }, (String[]) Configurations.convertToObject(mBuilder.build()));
     }
 
+    @Test
     public void testConvertObjectArrayToObject() {
         final JsonArrayBuilder sBuilder = Json.createArrayBuilder();
         final JsonObjectBuilder o1 = Json.createObjectBuilder();
@@ -141,7 +143,8 @@ public class JsonSupportTest {
         }
     }
 
-    @Test public void testLineCommentTop() throws IOException {
+    @Test
+    public void testLineCommentTop() throws IOException {
         final String input = "// Some comment\n" +
                              "{\n"
                              + "  \"a\" : 1,\n"
@@ -155,7 +158,8 @@ public class JsonSupportTest {
                 + "}\n", parse(input));
     }
 
-    @Test public void testLineComment() throws IOException {
+    @Test
+    public void testLineComment() throws IOException {
         final String input = "{\n"
                              + "  \"a\" : 1,\n"
                              + "  // another comment\n"
@@ -169,7 +173,8 @@ public class JsonSupportTest {
                 + "}\n", parse(input));
     }
 
-    @Test public void testSeveralComments() throws IOException {
+    @Test
+    public void testSeveralComments() throws IOException {
         final String input = "// Some comment\n" +
                              "{\n"
                              + "  \"a\" : 1,\n"
diff --git a/cm.json/src/test/java/org/apache/felix/cm/json/impl/TypeConverterTest.java b/cm.json/src/test/java/org/apache/felix/cm/json/impl/TypeConverterTest.java
index 787d21d..36bc5fb 100644
--- a/cm.json/src/test/java/org/apache/felix/cm/json/impl/TypeConverterTest.java
+++ b/cm.json/src/test/java/org/apache/felix/cm/json/impl/TypeConverterTest.java
@@ -113,10 +113,12 @@ public class TypeConverterTest {
         assertEquals(3.1, TypeConverter.convertObjectToType(Json.createValue(3.1), null));
     }
 
+    @Test
     public void testConvertStringToObjectNoTypeInfo() {
         assertEquals("hello world", TypeConverter.convertObjectToType(Json.createValue("hello world"), null));
     }
 
+    @Test
     public void testConvertObjectToObjectNoTypeInfo() {
         final JsonObjectBuilder builder = Json.createObjectBuilder();
         builder.add("hello", "world");
@@ -151,9 +153,11 @@ public class TypeConverterTest {
         assertArrayEquals(new Long[] { 5L, 3L }, (Long[]) TypeConverter.convertObjectToType(lBuilder.build(), null));
         assertArrayEquals(new Double[] { 5.7, 3.7 },
                 (Double[]) TypeConverter.convertObjectToType(dBuilder.build(), null));
-        assertEquals("[5.7,3]", TypeConverter.convertObjectToType(mBuilder.build(), null));
+        assertArrayEquals(new Double[] { 5.7, 3d },
+                (Double[]) TypeConverter.convertObjectToType(mBuilder.build(), null));
     }
 
+    @Test
     public void testConvertStringArrayToObjectNoTypeInfo() {
         final JsonArrayBuilder sBuilder = Json.createArrayBuilder();
         sBuilder.add("hello");
@@ -169,6 +173,7 @@ public class TypeConverterTest {
         assertArrayEquals(new String[] { "hello", "3" }, (String[]) TypeConverter.convertObjectToType(mBuilder.build(), null));
     }
 
+    @Test
     public void testConvertObjectArrayToObjectNoTypeInfo() {
         final JsonArrayBuilder sBuilder = Json.createArrayBuilder();
         final JsonObjectBuilder o1 = Json.createObjectBuilder();
@@ -538,7 +543,8 @@ public class TypeConverterTest {
         assertEquals(jsonValue, entry.getValue());
     }
 
-    @Test public void testConvertScalarsToJson() throws Exception {
+    @Test
+    public void testConvertScalarsToJson() throws Exception {
          // null
         assertEntry(TypeConverter.NO_TYPE_INFO, JsonValue.NULL,
                 TypeConverter.convertObjectToTypedJsonValue(null));