JOHNZON-96 add test + logic for ArrayBuilder ft of JSONP-1.1
Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/a2a1a047 Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/a2a1a047 Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/a2a1a047 Branch: refs/heads/master Commit: a2a1a047bd16b5976027ba2400ee0b925a1a0bb4 Parents: 525da3d Author: Mark Struberg <[email protected]> Authored: Fri Feb 24 00:21:06 2017 +0100 Committer: Mark Struberg <[email protected]> Committed: Fri Feb 24 00:21:06 2017 +0100 ---------------------------------------------------------------------- .../johnzon/core/JsonArrayBuilderImpl.java | 35 +++++++++++++++++++- .../johnzon/core/JsonBuilderFactoryImpl.java | 6 ++++ .../apache/johnzon/core/JsonProviderImpl.java | 9 +++++ .../johnzon/core/JsonArrayBuilderImplTest.java | 35 ++++++++++++++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/a2a1a047/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java index b8ff582..0936e22 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java @@ -20,12 +20,14 @@ package org.apache.johnzon.core; import javax.json.JsonArray; import javax.json.JsonArrayBuilder; +import javax.json.JsonException; import javax.json.JsonObjectBuilder; import javax.json.JsonValue; import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -39,7 +41,38 @@ class JsonArrayBuilderImpl implements JsonArrayBuilder, Serializable { tmpList = new ArrayList<>(initialData); } - @Override + public JsonArrayBuilderImpl(Collection<Object> initialData) { + tmpList = new ArrayList<>(); + for (Object initialValue : initialData) { + add(initialValue); + } + } + + public JsonArrayBuilder add(final Object value) { + if (value instanceof JsonValue) { + add((JsonValue) value); + } else if (value instanceof BigDecimal) { + add((BigDecimal) value); + } else if (value instanceof BigInteger) { + add((BigInteger) value); + } else if (value instanceof Boolean) { + add((boolean) value); + } else if (value instanceof Double) { + add((double) value); + } else if (value instanceof Integer) { + add((int) value); + } else if (value instanceof Long) { + add((long) value); + } else if (value instanceof String) { + add((String) value); + } else { + throw new JsonException("Illegal JSON type! type=" + value.getClass()); + } + + return this; + } + + @Override public JsonArrayBuilder add(final JsonValue value) { addValue(value); return this; http://git-wip-us.apache.org/repos/asf/johnzon/blob/a2a1a047/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java index 6f1f9ba..c6062a7 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java @@ -19,6 +19,7 @@ package org.apache.johnzon.core; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -73,6 +74,10 @@ class JsonBuilderFactoryImpl implements JsonBuilderFactory { return new JsonArrayBuilderImpl(initialData); } + public JsonArrayBuilder createArrayBuilder(Collection<Object> initialData) { + return new JsonArrayBuilderImpl(initialData); + } + @Override public Map<String, ?> getConfigInUse() { return Collections.unmodifiableMap(internalConfig); @@ -81,4 +86,5 @@ class JsonBuilderFactoryImpl implements JsonBuilderFactory { public JsonObjectBuilder createObjectBuilder(Map<String, Object> initialValues) { return new JsonObjectBuilderImpl(initialValues); } + } http://git-wip-us.apache.org/repos/asf/johnzon/blob/a2a1a047/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java index de18839..5fd5074 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java @@ -302,6 +302,15 @@ public class JsonProviderImpl extends JsonProvider implements Serializable { } @Override + public JsonArrayBuilder createArrayBuilder(JsonArray initialData) { + return builderFactory.createArrayBuilder(initialData); + } + + public JsonArrayBuilder createArrayBuilder(Collection<Object> initialData) { + return builderFactory.createArrayBuilder(initialData); + } + + @Override public JsonBuilderFactory createBuilderFactory(final Map<String, ?> config) { return (config == null || config.isEmpty()) ? builderFactory : new JsonBuilderFactoryImpl(config); } http://git-wip-us.apache.org/repos/asf/johnzon/blob/a2a1a047/johnzon-core/src/test/java/org/apache/johnzon/core/JsonArrayBuilderImplTest.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonArrayBuilderImplTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonArrayBuilderImplTest.java index df7a1af..85d14eb 100644 --- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonArrayBuilderImplTest.java +++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonArrayBuilderImplTest.java @@ -22,12 +22,16 @@ import static org.junit.Assert.assertEquals; import java.math.BigDecimal; import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Collection; import javax.json.Json; +import javax.json.JsonArray; import javax.json.JsonArrayBuilder; import javax.json.JsonObjectBuilder; import javax.json.JsonValue; +import org.junit.Assert; import org.junit.Test; public class JsonArrayBuilderImplTest { @@ -167,4 +171,35 @@ public class JsonArrayBuilderImplTest { final JsonArrayBuilder builder = Json.createArrayBuilder(); builder.add((double) Double.NEGATIVE_INFINITY); } + + + @Test + public void testCreateArrayBuilderWithJsonArrayInitialData() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add("a"); + builder.add("b"); + builder.add("c"); + JsonArray jsonArray = builder.build(); + + JsonArrayBuilder otherBuilder = Json.createArrayBuilder(jsonArray); + otherBuilder.add("d"); + + JsonArray jsonArray2 = otherBuilder.build(); + Assert.assertEquals("[\"a\",\"b\",\"c\",\"d\"]", jsonArray2.toString()); + } + + @Test + public void testCreateArrayBuilderWithCollectionInitialData() { + //X TODO should be Collection<String>, but the current Json API is not nice enough... + Collection<Object> initialData = new ArrayList<>(); + initialData.add("a"); + initialData.add("b"); + initialData.add("c"); + + JsonArrayBuilder otherBuilder = Json.createArrayBuilder(initialData); + otherBuilder.add("d"); + + JsonArray jsonArray2 = otherBuilder.build(); + Assert.assertEquals("[\"a\",\"b\",\"c\",\"d\"]", jsonArray2.toString()); + } }
