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