Repository: incubator-fleece Updated Branches: refs/heads/master 6d20b92f9 -> 8a1d4c5e2
FLEECE-1 thanks Hendrik Saly for this patch adding sanity checks in JsonArrayBuilder Project: http://git-wip-us.apache.org/repos/asf/incubator-fleece/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-fleece/commit/8a1d4c5e Tree: http://git-wip-us.apache.org/repos/asf/incubator-fleece/tree/8a1d4c5e Diff: http://git-wip-us.apache.org/repos/asf/incubator-fleece/diff/8a1d4c5e Branch: refs/heads/master Commit: 8a1d4c5e227eecef6123abee1bd27b1a850f8838 Parents: 6d20b92 Author: Romain Manni-Bucau <rmannibu...@gmail.com> Authored: Fri Jun 27 19:20:37 2014 +0200 Committer: Romain Manni-Bucau <rmannibu...@gmail.com> Committed: Fri Jun 27 19:20:37 2014 +0200 ---------------------------------------------------------------------- .../fleece/core/JsonArrayBuilderImpl.java | 14 ++++ .../org/apache/fleece/core/JsonArrayImpl.java | 4 +- .../fleece/core/JsonArrayBuilderImplTest.java | 86 ++++++++++++++++++++ 3 files changed, 103 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-fleece/blob/8a1d4c5e/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayBuilderImpl.java ---------------------------------------------------------------------- diff --git a/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayBuilderImpl.java b/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayBuilderImpl.java index 0b01aeb..4281deb 100644 --- a/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayBuilderImpl.java +++ b/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayBuilderImpl.java @@ -22,6 +22,7 @@ import javax.json.JsonArray; import javax.json.JsonArrayBuilder; import javax.json.JsonObjectBuilder; import javax.json.JsonValue; + import java.math.BigDecimal; import java.math.BigInteger; @@ -30,24 +31,28 @@ public class JsonArrayBuilderImpl implements JsonArrayBuilder { @Override public JsonArrayBuilder add(final JsonValue value) { + if(value == null) npe(); array.addInternal(value); return this; } @Override public JsonArrayBuilder add(final String value) { + if(value == null) npe(); array.addInternal(new JsonStringImpl(value)); return this; } @Override public JsonArrayBuilder add(final BigDecimal value) { + if(value == null) npe(); array.addInternal(new JsonNumberImpl(value)); return this; } @Override public JsonArrayBuilder add(final BigInteger value) { + if(value == null) npe(); array.addInternal(new JsonNumberImpl(new BigDecimal(value))); return this; } @@ -66,6 +71,9 @@ public class JsonArrayBuilderImpl implements JsonArrayBuilder { @Override public JsonArrayBuilder add(final double value) { + Double valueObject = Double.valueOf(value); + if(valueObject.isInfinite()) throw new NumberFormatException("value must not be infinite"); + if(valueObject.isNaN()) throw new NumberFormatException("value must not be NaN"); array.addInternal(new JsonDoubleImpl(value)); return this; } @@ -84,12 +92,14 @@ public class JsonArrayBuilderImpl implements JsonArrayBuilder { @Override public JsonArrayBuilder add(final JsonObjectBuilder builder) { + if(builder == null) throw new NullPointerException("builder must not be null"); array.addInternal(builder.build()); return this; } @Override public JsonArrayBuilder add(final JsonArrayBuilder builder) { + if(builder == null) throw new NullPointerException("builder must not be null"); array.addInternal(builder.build()); return this; } @@ -98,4 +108,8 @@ public class JsonArrayBuilderImpl implements JsonArrayBuilder { public JsonArray build() { return array; } + + private static NullPointerException npe() { + throw new NullPointerException("value must not be null"); + } } http://git-wip-us.apache.org/repos/asf/incubator-fleece/blob/8a1d4c5e/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayImpl.java ---------------------------------------------------------------------- diff --git a/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayImpl.java b/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayImpl.java index a2fb350..3424f67 100644 --- a/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayImpl.java +++ b/fleece-core/src/main/java/org/apache/fleece/core/JsonArrayImpl.java @@ -140,7 +140,9 @@ public class JsonArrayImpl extends LinkedList<JsonValue> implements JsonArray { return JsonArray.class.isInstance(obj) && super.equals(obj); } - public void addInternal(final JsonValue value) { + //make protected if class is supposed to be subclassed + //make package private otherwise + protected void addInternal(final JsonValue value) { super.add(value); } http://git-wip-us.apache.org/repos/asf/incubator-fleece/blob/8a1d4c5e/fleece-core/src/test/java/org/apache/fleece/core/JsonArrayBuilderImplTest.java ---------------------------------------------------------------------- diff --git a/fleece-core/src/test/java/org/apache/fleece/core/JsonArrayBuilderImplTest.java b/fleece-core/src/test/java/org/apache/fleece/core/JsonArrayBuilderImplTest.java index 42717c6..65244c3 100644 --- a/fleece-core/src/test/java/org/apache/fleece/core/JsonArrayBuilderImplTest.java +++ b/fleece-core/src/test/java/org/apache/fleece/core/JsonArrayBuilderImplTest.java @@ -18,10 +18,15 @@ */ package org.apache.fleece.core; +import java.math.BigDecimal; +import java.math.BigInteger; + import org.junit.Test; import javax.json.Json; import javax.json.JsonArrayBuilder; +import javax.json.JsonObjectBuilder; +import javax.json.JsonValue; import static org.junit.Assert.assertEquals; @@ -32,4 +37,85 @@ public class JsonArrayBuilderImplTest { builder.add("a").add("b"); assertEquals("[\"a\",\"b\"]", builder.build().toString()); } + + @Test + public void emptyArray() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + assertEquals("[]", builder.build().toString()); + } + + @Test + public void nullArray() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.addNull().addNull(); + assertEquals("[null,null]", builder.build().toString()); + } + + @Test + public void nullJsonValueArray() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add(JsonValue.NULL).add(JsonValue.NULL); + assertEquals("[null,null]", builder.build().toString()); + } + + @Test + public void boolJsonValueArray() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add(JsonValue.TRUE).add(JsonValue.FALSE); + assertEquals("[true,false]", builder.build().toString()); + } + + @Test(expected=NullPointerException.class) + public void addStringNpeIfNull() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add((String) null); + } + + @Test(expected=NullPointerException.class) + public void addJVNpeIfNull() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add((JsonValue) null); + } + + @Test(expected=NullPointerException.class) + public void addBDNpeIfNull() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add((BigDecimal) null); + } + + @Test(expected=NullPointerException.class) + public void addBINpeIfNull() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add((BigInteger) null); + } + + @Test(expected=NullPointerException.class) + public void addJABuilderNpeIfNull() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add((JsonArrayBuilder) null); + } + + @Test(expected=NullPointerException.class) + public void addJOBuilderNpeIfNull() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add((JsonObjectBuilder) null); + } + + @Test(expected=NumberFormatException.class) + public void addDoubleNpeIfNaN() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add((double) Double.NaN); + } + + @Test(expected=NumberFormatException.class) + public void addDoubleNpeIfPosInfinite() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add((double) Double.POSITIVE_INFINITY); + } + + @Test(expected=NumberFormatException.class) + public void addDoubleNpeIfNegIfinite() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add((double) Double.NEGATIVE_INFINITY); + } }