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() {