This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git


The following commit(s) were added to refs/heads/master by this push:
     new c22aaba  JOHNZON-208 ensure writeKey().write() pattern is valid in 
generator
c22aaba is described below

commit c22aabaafaac2ceedf7a16213e82a6dd9ed83b7d
Author: Romain Manni-Bucau <[email protected]>
AuthorDate: Thu Apr 18 14:01:45 2019 +0200

    JOHNZON-208 ensure writeKey().write() pattern is valid in generator
---
 .../org/apache/johnzon/core/JsonGeneratorImpl.java | 25 +++++++++++-----------
 .../apache/johnzon/core/JsonGeneratorImplTest.java | 24 +++++++++++++++++++++
 2 files changed, 37 insertions(+), 12 deletions(-)

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 ce5e8b7..916542d 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
@@ -230,7 +230,7 @@ class JsonGeneratorImpl implements JsonGenerator, 
JsonChars, Serializable {
     }
 
     private void writeJsonValue(final JsonValue value) {
-        checkArray();
+        checkArrayOrValue();
         //TODO check null handling
         switch (value.getValueType()) {
             case ARRAY:
@@ -374,49 +374,49 @@ class JsonGeneratorImpl implements JsonGenerator, 
JsonChars, Serializable {
 
     @Override
     public JsonGenerator write(final JsonValue value) {
-        checkArray();
+        checkArrayOrValue();
         writeJsonValue(value);
         return this;
     }
 
     @Override
     public JsonGenerator write(final String value) {
-        checkArray();
+        checkArrayOrValue();
         writeValueAsJsonString(value);
         return this;
     }
 
     @Override
     public JsonGenerator write(final BigDecimal value) {
-        checkArray();
+        checkArrayOrValue();
         writeValue(String.valueOf(value));
         return this;
     }
 
     @Override
     public JsonGenerator write(final BigInteger value) {
-        checkArray();
+        checkArrayOrValue();
         writeValue(String.valueOf(value));
         return this;
     }
 
     @Override
     public JsonGenerator write(final int value) {
-        checkArray();
+        checkArrayOrValue();
         writeValue(value);
         return this;
     }
 
     @Override
     public JsonGenerator write(final long value) {
-        checkArray();
+        checkArrayOrValue();
         writeValue(value);
         return this;
     }
 
     @Override
     public JsonGenerator write(final double value) {
-        checkArray();
+        checkArrayOrValue();
         checkDoubleRange(value);
         writeValue(String.valueOf(value));
         return this;
@@ -424,14 +424,14 @@ class JsonGeneratorImpl implements JsonGenerator, 
JsonChars, Serializable {
 
     @Override
     public JsonGenerator write(final boolean value) {
-        checkArray();
+        checkArrayOrValue();
         writeValue(String.valueOf(value));
         return this;
     }
 
     @Override
     public JsonGenerator writeNull() {
-        checkArray();
+        checkArrayOrValue();
         writeValue(NULL);
         return this;
     }
@@ -616,9 +616,10 @@ class JsonGeneratorImpl implements JsonGenerator, 
JsonChars, Serializable {
         }
     }
 
-    private void checkArray() {
+    private void checkArrayOrValue() {
         final GeneratorState currentState = currentState();
-        if (currentState != GeneratorState.IN_ARRAY && currentState != 
GeneratorState.START_ARRAY) {
+        if (currentState != GeneratorState.IN_ARRAY && currentState != 
GeneratorState.START_ARRAY &
+                currentState != GeneratorState.AFTER_KEY) {
             if (currentState != GeneratorState.INITIAL) {
                 throw new JsonGenerationException("write(param) is only valid 
in arrays");
             }
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 b359e20..1795894 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,6 +18,7 @@
  */
 package org.apache.johnzon.core;
 
+import static java.util.Collections.singletonMap;
 import static org.junit.Assert.assertEquals;
 
 import java.io.ByteArrayInputStream;
@@ -42,6 +43,29 @@ import org.junit.Test;
 
 public class JsonGeneratorImplTest {
     @Test
+    public void writeKeyWrite() {
+        final StringWriter writer = new StringWriter();
+        
Json.createGenerator(writer).writeStartObject().writeKey("foo").write("bar").writeEnd().close();
+        assertEquals("{\"foo\":\"bar\"}", writer.toString());
+    }
+
+    @Test
+    public void writeKeyWriteFormatted() {
+        final StringWriter writer = new StringWriter();
+        
Json.createGeneratorFactory(singletonMap(JsonGenerator.PRETTY_PRINTING, 
"true")).createGenerator(writer)
+            
.writeStartObject().writeKey("foo").write("bar").writeEnd().close();
+        assertEquals("{\n  \"foo\":\"bar\"\n}", writer.toString());
+    }
+
+    @Test
+    public void writeKeyWriteNull() {
+        final StringWriter writer = new StringWriter();
+        Json.createGenerator(writer)
+            .writeStartObject().writeKey("foo").writeNull().writeEnd().close();
+        assertEquals("{\"foo\":null}", writer.toString());
+    }
+
+    @Test
     public void closeOnce() throws Throwable {
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
         final JsonGenerator generator = 
Json.createGenerator(baos).writeStartObject().writeEnd();

Reply via email to