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));