You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2016/06/03 14:07:19 UTC

incubator-johnzon git commit: JOHNZON-82 more prettification tests for arrays

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 <rm...@gmail.com>
Authored: Fri Jun 3 16:07:05 2016 +0200
Committer: Romain manni-Bucau <rm...@gmail.com>
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() {