Repository: incubator-johnzon Updated Branches: refs/heads/master ba4235ca4 -> 18d8d372e
JOHNZON-82 more prettification tests for arrays Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/18d8d372 Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/18d8d372 Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/18d8d372 Branch: refs/heads/master Commit: 18d8d372ee13441c9c57539c47b66d0a16396723 Parents: ba4235c Author: Romain manni-Bucau <[email protected]> Authored: Fri Jun 3 16:07:05 2016 +0200 Committer: Romain manni-Bucau <[email protected]> Committed: Fri Jun 3 16:07:05 2016 +0200 ---------------------------------------------------------------------- .../apache/johnzon/core/JsonGeneratorImpl.java | 43 +++++++--- .../johnzon/core/JsonGeneratorImplTest.java | 84 +++++++++++++++++--- 2 files changed, 105 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/18d8d372/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java index d6a789e..e1371e5 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java @@ -18,6 +18,14 @@ */ package org.apache.johnzon.core; +import javax.json.JsonArray; +import javax.json.JsonException; +import javax.json.JsonNumber; +import javax.json.JsonObject; +import javax.json.JsonString; +import javax.json.JsonValue; +import javax.json.stream.JsonGenerationException; +import javax.json.stream.JsonGenerator; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -30,15 +38,6 @@ import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentMap; -import javax.json.JsonArray; -import javax.json.JsonException; -import javax.json.JsonNumber; -import javax.json.JsonObject; -import javax.json.JsonString; -import javax.json.JsonValue; -import javax.json.stream.JsonGenerationException; -import javax.json.stream.JsonGenerator; - class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable { private static final Charset UTF8_CHARSET = Charset.forName("UTF-8"); @@ -60,7 +59,7 @@ class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable { private final boolean acceptsKey; private final boolean acceptsValue; - private GeneratorState(final boolean acceptsKey, final boolean acceptsValue) { + GeneratorState(final boolean acceptsKey, final boolean acceptsValue) { this.acceptsKey = acceptsKey; this.acceptsValue = acceptsValue; } @@ -156,10 +155,10 @@ class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable { @Override public JsonGenerator writeStartArray() { prepareValue(); - state.push(GeneratorState.START_ARRAY); - depth++; writeIndent(); + state.push(GeneratorState.START_ARRAY); justWrite(START_ARRAY_CHAR); + depth++; writeEol(); return this; } @@ -354,7 +353,9 @@ class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable { checkArrayOrObject(false); final GeneratorState last = state.pop(); depth--; - writeEol(); + if (last != GeneratorState.START_ARRAY) { + writeEol(); + } writeIndent(); if (last == GeneratorState.IN_ARRAY || last == GeneratorState.START_ARRAY) { justWrite(END_ARRAY_CHAR); @@ -667,6 +668,10 @@ class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable { private void writeValueAsJsonString(final String value) { prepareValue(); + final GeneratorState peek = state.peek(); + if (peek == GeneratorState.START_ARRAY || peek == GeneratorState.IN_ARRAY) { + writeIndent(); + } justWrite(QUOTE_CHAR); writeEscaped0(value); justWrite(QUOTE_CHAR); @@ -675,18 +680,30 @@ class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable { private void writeValue(final String value) { prepareValue(); + final GeneratorState peek = state.peek(); + if (peek == GeneratorState.START_ARRAY || peek == GeneratorState.IN_ARRAY) { + writeIndent(); + } justWrite(String.valueOf(value)); alignState(); } private void writeValue(final int value) { prepareValue(); + final GeneratorState peek = state.peek(); + if (peek == GeneratorState.START_ARRAY || peek == GeneratorState.IN_ARRAY) { + writeIndent(); + } writeInt0(value); alignState(); } private void writeValue(final long value) { prepareValue(); + final GeneratorState peek = state.peek(); + if (peek == GeneratorState.START_ARRAY || peek == GeneratorState.IN_ARRAY) { + writeIndent(); + } writeLong0(value); alignState(); } http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/18d8d372/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java index e2f5202..797cca5 100644 --- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java +++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java @@ -18,14 +18,7 @@ */ package org.apache.johnzon.core; -import static org.junit.Assert.assertEquals; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.StringWriter; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.util.HashMap; +import org.junit.Test; import javax.json.Json; import javax.json.JsonReader; @@ -34,8 +27,14 @@ import javax.json.JsonWriter; import javax.json.JsonWriterFactory; import javax.json.stream.JsonGenerationException; import javax.json.stream.JsonGenerator; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.StringWriter; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.HashMap; -import org.junit.Test; +import static org.junit.Assert.assertEquals; public class JsonGeneratorImplTest { @Test @@ -283,6 +282,73 @@ public class JsonGeneratorImplTest { " ]\n" + "}", new String(baos.toByteArray())); } + + @Test + public void prettyArray() { + { // root + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final JsonGenerator generator = Json.createGeneratorFactory(new HashMap<String, Object>() {{ + put(JsonGenerator.PRETTY_PRINTING, true); + }}).createGenerator(baos); + generator.writeStartArray().write("a").write("b").write(1).writeEnd().close(); + assertEquals("[\n" + + " \"a\",\n" + + " \"b\",\n" + + " 1\n" + + "]", new String(baos.toByteArray())); + } + { // nested + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final JsonGenerator generator = Json.createGeneratorFactory(new HashMap<String, Object>() {{ + put(JsonGenerator.PRETTY_PRINTING, true); + }}).createGenerator(baos); + generator.writeStartArray().writeStartArray().write("a").write("b").writeEnd().writeStartArray().writeEnd().writeEnd().close(); + assertEquals("[\n" + + " [\n" + + " \"a\",\n" + + " \"b\"\n" + + " ],\n" + + " [\n" + + " ]\n" + + "]", new String(baos.toByteArray())); + } + { // empty + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final JsonGenerator generator = Json.createGeneratorFactory(new HashMap<String, Object>() {{ + put(JsonGenerator.PRETTY_PRINTING, true); + }}).createGenerator(baos); + generator.writeStartArray().writeEnd().close(); + assertEquals("[\n]", new String(baos.toByteArray())); + } + { // empty nested + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final JsonGenerator generator = Json.createGeneratorFactory(new HashMap<String, Object>() {{ + put(JsonGenerator.PRETTY_PRINTING, true); + }}).createGenerator(baos); + generator.writeStartArray().writeStartArray().writeEnd().writeStartArray().writeEnd().writeEnd().close(); + assertEquals("[\n" + + " [\n" + + " ],\n" + + " [\n" + + " ]\n" + + "]", new String(baos.toByteArray())); + } + { // nested in object + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final JsonGenerator generator = Json.createGeneratorFactory(new HashMap<String, Object>() {{ + put(JsonGenerator.PRETTY_PRINTING, true); + }}).createGenerator(baos); + generator.writeStartObject().writeStartArray("foo").writeStartArray().writeEnd().writeStartArray().writeEnd().writeEnd().writeEnd().close(); + assertEquals("{\n" + + " \"foo\":[\n" + + " [\n" + + " ],\n" + + " [\n" + + " ]\n" + + " ]\n" + + "}", new String(baos.toByteArray())); + } + } @Test public void prettySimple() {
