You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by sa...@apache.org on 2015/07/27 23:36:02 UTC
incubator-johnzon git commit: implemented a lot of jsr 374 stuff. may
not compile
Repository: incubator-johnzon
Updated Branches:
refs/heads/jsr374_367 01b412b80 -> 6b5d4bb4e
implemented a lot of jsr 374 stuff. may not compile
Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/6b5d4bb4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/6b5d4bb4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/6b5d4bb4
Branch: refs/heads/jsr374_367
Commit: 6b5d4bb4eb20334ccbebd1fc60ea50d448513de4
Parents: 01b412b
Author: Hendrik Saly <he...@gmail.com>
Authored: Mon Jul 27 23:35:55 2015 +0200
Committer: Hendrik Saly <he...@gmail.com>
Committed: Mon Jul 27 23:35:55 2015 +0200
----------------------------------------------------------------------
.../johnzon/core/JsonArrayBuilderImpl.java | 98 +++----
.../johnzon/core/JsonBuilderFactoryImpl.java | 6 +-
.../apache/johnzon/core/JsonGeneratorImpl.java | 4 +-
.../johnzon/core/JsonObjectBuilderImpl.java | 27 +-
.../apache/johnzon/core/JsonProviderImpl.java | 94 ++++++-
.../org/apache/johnzon/core/JsonReaderImpl.java | 11 +-
.../johnzon/core/JsonStreamParserImpl.java | 254 +++++++++++++++++--
.../org/apache/johnzon/core/JsonWriterImpl.java | 5 +-
.../johnzon/core/JsonGeneratorImplTest.java | 45 ++++
.../org/apache/johnzon/core/JsonParserTest.java | 220 ++++++++++++++++
.../apache/johnzon/core/JsonPointerTest.java | 95 +++++++
.../apache/johnzon/core/JsonWriterImplTest.java | 28 ++
12 files changed, 800 insertions(+), 87 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
index 6110249..60ede7e 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObjectBuilder;
@@ -130,145 +131,146 @@ class JsonArrayBuilderImpl implements JsonArrayBuilder, Serializable {
@Override
public JsonArrayBuilder addAll(JsonArrayBuilder builder) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.addAll(builder.build()); //TODO is it ok to call build() here and destry the builder?
+ return this;
}
@Override
public JsonArrayBuilder add(int index, JsonValue value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, value);
+ return this;
+
}
@Override
public JsonArrayBuilder add(int index, String value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder add(int index, BigDecimal value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder add(int index, BigInteger value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder add(int index, int value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder add(int index, long value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder add(int index, double value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder add(int index, boolean value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, value?JsonValue.TRUE:JsonValue.FALSE);
+ return this;
}
@Override
public JsonArrayBuilder addNull(int index) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, JsonValue.NULL);
+ return this;
}
@Override
public JsonArrayBuilder add(int index, JsonObjectBuilder builder) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, builder.build()); //TODO ok to call build()?
+ return this;
}
@Override
public JsonArrayBuilder add(int index, JsonArrayBuilder builder) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.add(index, builder.build()); //TODO ok to call build()?
+ return this;
}
@Override
public JsonArrayBuilder set(int index, JsonValue value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, value);
+ return this;
}
@Override
public JsonArrayBuilder set(int index, String value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder set(int index, BigDecimal value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder set(int index, BigInteger value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder set(int index, int value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder set(int index, long value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder set(int index, double value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, Json.createValue(value));
+ return this;
}
@Override
public JsonArrayBuilder set(int index, boolean value) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, value?JsonValue.TRUE:JsonValue.FALSE);
+ return this;
}
@Override
public JsonArrayBuilder setNull(int index) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, JsonValue.NULL);
+ return this;
}
@Override
public JsonArrayBuilder set(int index, JsonObjectBuilder builder) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, builder.build()); //TODO ok here to call build?
+ return this;
}
@Override
public JsonArrayBuilder set(int index, JsonArrayBuilder builder) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.set(index, builder.build()); //TODO ok here to call build?
+ return this;
}
@Override
public JsonArrayBuilder remove(int index) {
- // TODO Auto-generated method stub
- return null;
+ tmpList.remove(index);
+ return this;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
index 21b45ce..2744def 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
@@ -69,13 +69,11 @@ class JsonBuilderFactoryImpl implements JsonBuilderFactory {
@Override
public JsonObjectBuilder createObjectBuilder(JsonObject object) {
- // TODO Auto-generated method stub
- return null;
+ return new JsonObjectBuilderImpl().addAll(object);
}
@Override
public JsonArrayBuilder createArrayBuilder(JsonArray array) {
- // TODO Auto-generated method stub
- return null;
+ return new JsonArrayBuilderImpl().add(array);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/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 7545da4..776512c 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
@@ -734,8 +734,10 @@ class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable {
}
private void checkArray() {
- if (currentStructureElement == null || !currentStructureElement.isArray) {
+ if (currentStructureElement != null && !currentStructureElement.isArray) {
throw new JsonGenerationException("write(param) is only valid in arrays");
+ } else {
+ valid = true;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
index 68677c4..671dc56 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
@@ -99,14 +99,18 @@ class JsonObjectBuilderImpl implements JsonObjectBuilder, Serializable {
return this;
}
+ private void ensureMapCreated() {
+ if(tmpMap==null){
+ tmpMap=new LinkedHashMap<String, JsonValue>();
+ }
+ }
+
private void putValue(String name, JsonValue value){
if(name == null || value == null) {
throw npe();
}
- if(tmpMap==null){
- tmpMap=new LinkedHashMap<String, JsonValue>();
- }
+ ensureMapCreated();
tmpMap.put(name, value);
}
@@ -131,13 +135,22 @@ class JsonObjectBuilderImpl implements JsonObjectBuilder, Serializable {
@Override
public JsonObjectBuilder addAll(JsonObjectBuilder builder) {
- // TODO Auto-generated method stub
- return null;
+ ensureMapCreated();
+ tmpMap.putAll(builder.build()); //TODO is it ok to build() here and destroy the builder?
+ return this;
+ }
+
+ JsonObjectBuilder addAll(JsonObject object) {
+ ensureMapCreated();
+ tmpMap.putAll(object); //TODO missing in spec?
+ return this;
}
@Override
public JsonObjectBuilder remove(String name) {
- // TODO Auto-generated method stub
- return null;
+ if(tmpMap != null) {
+ tmpMap.remove(name);
+ }
+ return this;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
index d1bbec6..15013c1 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
@@ -23,13 +23,19 @@ import java.io.OutputStream;
import java.io.Reader;
import java.io.Serializable;
import java.io.Writer;
+import java.math.BigDecimal;
+import java.math.BigInteger;
import java.util.Map;
+import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import javax.json.JsonBuilderFactory;
+import javax.json.JsonNumber;
+import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonReader;
import javax.json.JsonReaderFactory;
+import javax.json.JsonString;
import javax.json.JsonWriter;
import javax.json.JsonWriterFactory;
import javax.json.spi.JsonProvider;
@@ -115,8 +121,52 @@ public class JsonProviderImpl extends JsonProvider implements Serializable {
public JsonBuilderFactory createBuilderFactory(final Map<String, ?> stringMap) {
return DELEGATE.createBuilderFactory(stringMap);
}
+
+
- static class JsonProviderDelegate extends JsonProvider {
+ @Override
+ public JsonObjectBuilder createObjectBuilder(JsonObject object) {
+ return DELEGATE.createObjectBuilder(object);
+ }
+
+ @Override
+ public JsonArrayBuilder createArrayBuilder(JsonArray array) {
+ return DELEGATE.createArrayBuilder(array);
+ }
+
+ @Override
+ public JsonString createValue(String value) {
+ return DELEGATE.createValue(value);
+ }
+
+ @Override
+ public JsonNumber createValue(int value) {
+ return DELEGATE.createValue(value);
+ }
+
+ @Override
+ public JsonNumber createValue(long value) {
+ return DELEGATE.createValue(value);
+ }
+
+ @Override
+ public JsonNumber createValue(double value) {
+ return DELEGATE.createValue(value);
+ }
+
+ @Override
+ public JsonNumber createValue(BigDecimal value) {
+ return DELEGATE.createValue(value);
+ }
+
+ @Override
+ public JsonNumber createValue(BigInteger value) {
+ return DELEGATE.createValue(value);
+ }
+
+
+
+ static class JsonProviderDelegate extends JsonProvider {
private final JsonReaderFactory readerFactory = new JsonReaderFactoryImpl(null);
private final JsonParserFactory parserFactory = new JsonParserFactoryImpl(null);
private final JsonGeneratorFactory generatorFactory = new JsonGeneratorFactoryImpl(null);
@@ -197,5 +247,47 @@ public class JsonProviderImpl extends JsonProvider implements Serializable {
public JsonBuilderFactory createBuilderFactory(final Map<String, ?> config) {
return (config == null || config.isEmpty()) ? builderFactory : new JsonBuilderFactoryImpl(config);
}
+
+ @Override
+ public JsonObjectBuilder createObjectBuilder(JsonObject object) {
+ return builderFactory.createObjectBuilder(object);
+ }
+
+ @Override
+ public JsonArrayBuilder createArrayBuilder(JsonArray array) {
+ return builderFactory.createArrayBuilder(array);
+ }
+
+ @Override
+ public JsonString createValue(String value) {
+ return new JsonStringImpl(value);
+ }
+
+ @Override
+ public JsonNumber createValue(int value) {
+ return new JsonLongImpl(value);
+ }
+
+ @Override
+ public JsonNumber createValue(long value) {
+ return new JsonLongImpl(value);
+ }
+
+ @Override
+ public JsonNumber createValue(double value) {
+ return new JsonDoubleImpl(value);
+ }
+
+ @Override
+ public JsonNumber createValue(BigDecimal value) {
+ return new JsonNumberImpl(value);
+ }
+
+ @Override
+ public JsonNumber createValue(BigInteger value) {
+ return new JsonNumberImpl(new BigDecimal(value));
+ }
+
+
}
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
index 86d7708..fa54d07 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
@@ -30,9 +30,16 @@ import javax.json.stream.JsonParsingException;
class JsonReaderImpl implements JsonReader {
private final JsonParser parser;
private boolean closed = false;
+ private final boolean readUntiltheEnd;
JsonReaderImpl(final JsonParser parser) {
this.parser = parser;
+ this.readUntiltheEnd = true;
+ }
+
+ JsonReaderImpl(final JsonParser parser, boolean readUntiltheEnd) {
+ this.parser = parser;
+ this.readUntiltheEnd = readUntiltheEnd;
}
@Override
@@ -47,7 +54,7 @@ class JsonReaderImpl implements JsonReader {
case START_OBJECT:
final JsonObjectBuilder objectBuilder = new JsonObjectBuilderImpl();
parseObject(objectBuilder);
- if (parser.hasNext()) {
+ if (readUntiltheEnd && parser.hasNext()) {
throw new JsonParsingException("Expected end of file", parser.getLocation());
}
close();
@@ -55,7 +62,7 @@ class JsonReaderImpl implements JsonReader {
case START_ARRAY:
final JsonArrayBuilder arrayBuilder = new JsonArrayBuilderImpl();
parseArray(arrayBuilder);
- if (parser.hasNext()) {
+ if (readUntiltheEnd && parser.hasNext()) {
throw new JsonParsingException("Expected end of file", parser.getLocation());
}
close();
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
index 3778b3b..b209378 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
@@ -24,12 +24,25 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.math.BigDecimal;
import java.nio.charset.Charset;
+import java.util.Map.Entry;
+import java.util.AbstractMap;
import java.util.NoSuchElementException;
-
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+import javax.json.Json;
+import javax.json.JsonArray;
import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonReaderFactory;
+import javax.json.JsonValue;
import javax.json.stream.JsonLocation;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParsingException;
+import javax.json.stream.JsonParser.Event;
//This class represents either the Json tokenizer and the Json parser.
public class JsonStreamParserImpl implements JsonChars, JsonParser{
@@ -65,7 +78,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
//we use a byte here, because comparing bytes
//is more efficient than comparing enums
//Additionally we handle internally two more event: COMMA_EVENT and KEY_SEPARATOR_EVENT
- private byte previousEvent;
+ private byte previousEvent = -1;
//this buffer is used to store current String or Number value in case that
//within the value a buffer boundary is crossed or the string contains escaped characters
@@ -105,6 +118,14 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
this.previous = previous;
this.isArray = isArray;
}
+
+ int getDepth() {
+ if(previous == null) {
+ return 1;
+ } else {
+ return previous.getDepth()+1;
+ }
+ }
}
//detect charset according to RFC 4627
@@ -139,6 +160,10 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
if (fallBackCopyBuffer.length < maxStringLength) {
throw cust("Size of value buffer cannot be smaller than maximum string length");
}
+
+ if(reader == null && inputStream == null) {
+ throw new NullPointerException("input must not be null");
+ }
if (reader != null) {
this.in = reader;
@@ -176,21 +201,15 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
startOfValueInBuffer = endOfValueInBuffer = -1;
}
-
- @Override
- public final boolean hasNext() {
-
- if (currentStructureElement != null || (previousEvent != END_ARRAY && previousEvent != END_OBJECT) || previousEvent == 0) {
- return true;
- }
-
- //detect garbage at the end of the file after last object or array is closed
- if (bufferPos < availableCharsInBuffer - 2) {
+
+ private void scanForTrailingGarbage(int offset) {
+ //detect garbage at the end of the file after last object or array is closed
+ if (bufferPos < availableCharsInBuffer - offset) {
final char c = readNextNonWhitespaceChar(readNextChar());
if (c == EOF) {
- return false;
+ return;
}
if (bufferPos < availableCharsInBuffer) {
@@ -198,6 +217,25 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
}
}
+ }
+
+ @Override
+ public final boolean hasNext() {
+
+ if(currentStructureElement == null && (previousEvent == VALUE_FALSE
+ || previousEvent == VALUE_TRUE
+ || previousEvent == VALUE_NULL
+ || previousEvent == VALUE_NUMBER
+ || previousEvent == VALUE_STRING)) {
+ scanForTrailingGarbage(0);
+ return false;
+ }
+
+ if (currentStructureElement != null || previousEvent == -1) {
+ return true;
+ }
+
+ scanForTrailingGarbage(2);
return false;
@@ -326,10 +364,6 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
throw new NoSuchElementException();
}
- if (previousEvent != 0 && currentStructureElement == null) {
- throw uexc("Unexpected end of structure");
- }
-
final char c = readNextNonWhitespaceChar(readNextChar());
if (c == COMMA_CHAR) {
@@ -426,7 +460,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
private Event handleStartObject() {
//last event must one of the following-> : , [
- if (previousEvent != 0 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
+ if (previousEvent != -1 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
throw uexc("Expected : , [");
}
@@ -463,7 +497,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
private Event handleStartArray() {
//last event must one of the following-> : , [
- if (previousEvent != 0 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
+ if (previousEvent != -1 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
throw uexc("Expected : , [");
}
@@ -625,7 +659,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
//always the beginning quote of a key or value
//last event must one of the following-> : { [ ,
- if (previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_OBJECT && previousEvent != START_ARRAY
+ if (previousEvent != -1 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_OBJECT && previousEvent != START_ARRAY
&& previousEvent != COMMA_EVENT) {
throw uexc("Expected : { [ ,");
}
@@ -634,7 +668,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
//end quote already consumed
//make the decision if its an key or value
- if (previousEvent == KEY_SEPARATOR_EVENT) {
+ if (previousEvent == KEY_SEPARATOR_EVENT || previousEvent == -1) {
//must be value
if (currentStructureElement != null && currentStructureElement.isArray) {
@@ -770,7 +804,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
private Event handleLiteral() {
//last event must one of the following-> : , [
- if (previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
+ if (previousEvent != -1 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
throw uexc("Expected : , [");
}
@@ -982,5 +1016,181 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
final JsonLocation location = createLocation();
return new JsonParsingException("General exception on " + location + ". Reason is [[" + message + "]]", location);
}
+
+ private IllegalStateException is(final String message) {
+ final JsonLocation location = createLocation();
+ return new IllegalStateException("Illegal parser state exception on " + location + ". Reason is [[" + message + "]]");
+ }
+
+ @Override
+ public JsonObject getObject() {
+ JsonReaderImpl reader = new JsonReaderImpl(this, false);
+ JsonObject obj;
+ try {
+ obj = reader.readObject();
+ } catch (JsonParsingException e) {
+ throw is(e.getMessage());
+ } finally {
+ reader.close();
+ }
+
+ return obj;
+ }
+
+ @Override
+ public JsonValue getValue() {
+ if(previousEvent == VALUE_TRUE) {
+ return JsonValue.TRUE;
+ }
+
+ if(previousEvent == VALUE_FALSE) {
+ return JsonValue.FALSE;
+ }
+
+ if(previousEvent == VALUE_NULL) {
+ return JsonValue.NULL;
+ }
+
+ if(previousEvent == VALUE_NUMBER) {
+ if (isCurrentNumberIntegral && currentIntegralNumber != Integer.MIN_VALUE) {
+ return Json.createValue(currentIntegralNumber);
+ } else if (isCurrentNumberIntegral) {
+ return Json.createValue(getLong());
+ } else {
+ return Json.createValue(getBigDecimal());
+ }
+ }
+
+ if(previousEvent == VALUE_STRING) {
+ return Json.createValue(getString());
+ }
+
+ //never happen
+ return null;
+ }
+
+ @Override
+ public JsonArray getArray() {
+ JsonReaderImpl reader = new JsonReaderImpl(this, false);
+ JsonArray ar;
+ try {
+ ar = reader.readArray();
+ } catch (JsonParsingException e) {
+ throw is(e.getMessage());
+ } finally {
+ reader.close();
+ }
+
+ return ar;
+ }
+
+ @Override
+ public Stream<JsonValue> getArrayStream() {
+ //TODO check for beginning of an array
+ Spliterator<JsonValue> spliterator = new Spliterators.AbstractSpliterator<JsonValue>(Long.MAX_VALUE, Spliterator.ORDERED) {
+ @Override
+ public Spliterator<JsonValue> trySplit() {
+ return null;
+ }
+ @Override
+ public boolean tryAdvance(Consumer<? super JsonValue> action) {
+ if (action == null) {
+ throw new NullPointerException();
+ }
+ if (!hasNext()) {
+ return false;
+ }
+ if (next() == Event.END_ARRAY) {
+ return false;
+ }
+ action.accept(getValue());
+ return true;
+ }
+ };
+
+ return StreamSupport.stream(spliterator, false);
+ }
+
+ @Override
+ public Stream<Entry<String, JsonValue>> getObjectStream() {
+ //TODO check for beginning of an object
+ Spliterator<Entry<String, JsonValue>> spliterator = new Spliterators.AbstractSpliterator<Entry<String, JsonValue>>(Long.MAX_VALUE, Spliterator.ORDERED) {
+ @Override
+ public Spliterator<Entry<String, JsonValue>> trySplit() {
+ return null;
+ }
+ @Override
+ public boolean tryAdvance(Consumer<? super Entry<String, JsonValue>> action) {
+ if (action == null) {
+ throw new NullPointerException();
+ }
+ if (!hasNext()) {
+ return false;
+ }
+ Event event = next();
+ if (event == Event.END_OBJECT) {
+ return false;
+ }
+ if (event != Event.KEY_NAME) {
+ throw new JsonException("error generating stream, key name token expected");
+ }
+ String key = getString();
+ if (!hasNext()) {
+ throw new JsonException("error generating stream, more tokens expected");
+ }
+ next();
+ JsonValue value = getValue();
+ action.accept(new AbstractMap.SimpleImmutableEntry<String, JsonValue>(key, value));
+ return true;
+ }
+ };
+
+ return StreamSupport.stream(spliterator, false);
+ }
+
+ @Override
+ public Stream<JsonValue> getValueStream() {
+ //TODO check for value
+ Spliterator<JsonValue> spliterator = new Spliterators.AbstractSpliterator<JsonValue>(Long.MAX_VALUE, Spliterator.ORDERED) {
+ @Override
+ public Spliterator<JsonValue> trySplit() {
+ return null;
+ }
+ @Override
+ public boolean tryAdvance(Consumer<? super JsonValue> action) {
+ if (action == null) {
+ throw new NullPointerException();
+ }
+ if (!hasNext()) {
+ return false;
+ }
+ next();
+ action.accept(getValue());
+ return true;
+ }
+ };
+
+ return StreamSupport.stream(spliterator, false);
+ }
+
+ @Override
+ public void skipArray() {
+ if(currentStructureElement != null && currentStructureElement.isArray) {
+ int depth = currentStructureElement.getDepth();
+ while(next() != Event.END_ARRAY || currentStructureElement.getDepth() != depth);
+ }
+ }
+
+ @Override
+ public void skipObject() {
+ if(currentStructureElement != null && !currentStructureElement.isArray) {
+ int depth = currentStructureElement.getDepth();
+ while(next() != Event.END_OBJECT || currentStructureElement.getDepth() != depth);
+ }
+ }
+
+ //1.1
+
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
index 5c14b3f..9578258 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
@@ -74,7 +74,8 @@ class JsonWriterImpl implements JsonWriter, Serializable{
@Override
public void write(JsonValue value) {
- // TODO Auto-generated method stub
-
+ checkClosed();
+ generator.write(value);
+ close();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/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 4f73aaa..d202047 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
@@ -278,4 +278,49 @@ public class JsonGeneratorImplTest {
" ]\n" +
"}", new String(baos.toByteArray()));
}
+
+ @Test
+ public void testSimpleNumber() {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ Json.createGenerator(baos)
+ .write(1)
+ .close();
+ assertEquals("1", new String(baos.toByteArray()));
+ }
+
+ @Test
+ public void testSimpleNumberAsJsonValue() {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ Json.createGenerator(baos)
+ .write(Json.createValue(1))
+ .close();
+ assertEquals("1", new String(baos.toByteArray()));
+ }
+
+ @Test
+ public void testSimpleString() {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ Json.createGenerator(baos)
+ .write("a string")
+ .close();
+ assertEquals("\"a string\"", new String(baos.toByteArray()));
+ }
+
+ @Test
+ public void testSimpleStringAsJsonValue() {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ Json.createGenerator(baos)
+ .write(Json.createValue("a string"))
+ .close();
+ assertEquals("\"a string\"", new String(baos.toByteArray()));
+ }
+
+ @Test
+ public void testSimpleTrue() {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ Json.createGenerator(baos)
+ .write(JsonValue.TRUE)
+ .close();
+ assertEquals("true", new String(baos.toByteArray()));
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
index 87146f2..451e182 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
@@ -41,6 +41,7 @@ import javax.json.JsonArrayBuilder;
import javax.json.JsonException;
import javax.json.JsonObjectBuilder;
import javax.json.JsonReader;
+import javax.json.JsonValue;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParser.Event;
import javax.json.stream.JsonParsingException;
@@ -1637,6 +1638,225 @@ public class JsonParserTest {
}
}
+ @Test
+ public void simpleValueTrue() {
+ final JsonParser parser = Json.createParser(new StringReader(" true"));
+ assertNotNull(parser);
+ assertTrue(parser.hasNext());
+ final JsonParser.Event event = parser.next();
+ assertNotNull(event);
+ assertEquals(JsonParser.Event.VALUE_TRUE, event);
+ assertEquals(JsonValue.TRUE, parser.getValue());
+ assertFalse(parser.hasNext());
+ }
+
+ @Test
+ public void simpleValueFalse() {
+ final JsonParser parser = Json.createParser(new StringReader(" false "));
+ assertNotNull(parser);
+ assertTrue(parser.hasNext());
+ final JsonParser.Event event = parser.next();
+ assertNotNull(event);
+ assertEquals(JsonParser.Event.VALUE_FALSE, event);
+ assertEquals(JsonValue.FALSE, parser.getValue());
+ assertFalse(parser.hasNext());
+ }
+
+ @Test
+ public void simpleValueNumber() {
+ final JsonParser parser = Json.createParser(new StringReader(" 2.162 "));
+ assertNotNull(parser);
+ assertTrue(parser.hasNext());
+ final JsonParser.Event event = parser.next();
+ assertNotNull(event);
+ assertEquals(JsonParser.Event.VALUE_NUMBER, event);
+ assertEquals(Json.createValue(2.162), parser.getValue());
+ assertFalse(parser.hasNext());
+ }
+
+ @Test
+ public void simpleValueString() {
+ final JsonParser parser = Json.createParser(new StringReader("\"astring\""));
+ assertNotNull(parser);
+ assertTrue(parser.hasNext());
+ final JsonParser.Event event = parser.next();
+ assertNotNull(event);
+ assertEquals(JsonParser.Event.VALUE_STRING, event);
+ assertEquals(Json.createValue("astring"), parser.getValue());
+ assertFalse(parser.hasNext());
+ }
+
+ @Test
+ public void simpleValueNull() {
+ final JsonParser parser = Json.createParser(new StringReader("\t\tnull"));
+ assertNotNull(parser);
+ assertTrue(parser.hasNext());
+ final JsonParser.Event event = parser.next();
+ assertNotNull(event);
+ assertEquals(JsonParser.Event.VALUE_NULL, event);
+ assertEquals(JsonValue.NULL, parser.getValue());
+ assertFalse(parser.hasNext());
+ }
+
+ @Test(expected=JsonParsingException.class)
+ public void simpleValueWrongLiteral() {
+ final JsonParser parser = Json.createParser(new StringReader("nuull"));
+ assertNotNull(parser);
+ while(parser.hasNext()) {
+ parser.next();
+ }
+ }
+
+ @Test(expected=JsonParsingException.class)
+ public void simpleValuePlusGarbage() {
+ final JsonParser parser = Json.createParser(new StringReader("null,"));
+ assertNotNull(parser);
+ while(parser.hasNext()) {
+ parser.next();
+ }
+ }
+
+ @Test(expected=JsonParsingException.class)
+ public void simpleValuePlusGarbage1() {
+ final JsonParser parser = Json.createParser(new StringReader("null:"));
+ assertNotNull(parser);
+ while(parser.hasNext()) {
+ parser.next();
+ }
+ }
+
+ @Test(expected=JsonParsingException.class)
+ public void simpleValuePlusMoreGarbage() {
+ final JsonParser parser = Json.createParser(new StringReader("null[1,2,3]"));
+ assertNotNull(parser);
+ while(parser.hasNext()) {
+ parser.next();
+ }
+ }
+
+ @Test(expected=JsonParsingException.class)
+ public void simpleValuePlusMoreGarbage2() {
+ final JsonParser parser = Json.createParser(new StringReader("null,[1,2,3]"));
+ assertNotNull(parser);
+ while(parser.hasNext()) {
+ parser.next();
+ }
+ }
+
+ @Test(expected=JsonParsingException.class)
+ public void simpleValuePlusMoreGarbage3() {
+ final JsonParser parser = Json.createParser(new StringReader("12{\"a\":5}"));
+ assertNotNull(parser);
+ while(parser.hasNext()) {
+ parser.next();
+ }
+ }
+
+ @Test(expected=JsonParsingException.class)
+ public void simpleValuePlusMoreGarbage4() {
+ final JsonParser parser = Json.createParser(new StringReader("12 true"));
+ assertNotNull(parser);
+ while(parser.hasNext()) {
+ parser.next();
+ }
+ }
+
+ @Test
+ public void getObjectFromParser() {
+ final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, \"b\":{\"c\":9, \"d\":10}, \"z\":8"));
+ assertNotNull(parser);
+ parser.next();
+ parser.next();
+ parser.next();
+ parser.next();
+ assertEquals("{\"c\":9,\"d\":10}", parser.getObject().toString());
+ assertTrue(parser.next() == Event.KEY_NAME);
+ }
+
+ @Test
+ public void getObjectFromParserNested() {
+ final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, \"b\":{\"c\":9, \"d\":10, \"r\":{\"q\":19, \"s\":144}}, \"z\":8"));
+ assertNotNull(parser);
+ parser.next();
+ parser.next();
+ parser.next();
+ parser.next();
+ assertEquals("{\"c\":9,\"d\":10,\"r\":{\"q\":19,\"s\":144}}", parser.getObject().toString());
+ assertTrue(parser.next() == Event.KEY_NAME);
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void getObjectFromParserWrongState() {
+ final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, \"b\":{\"c\":9, \"d\":10}, \"z\":8"));
+ assertNotNull(parser);
+ parser.next();
+ parser.next();
+ parser.next();
+ assertEquals("{\"c\":9,\"d\":10}", parser.getObject().toString());
+ assertTrue(parser.next() == Event.KEY_NAME);
+ }
+
+ @Test
+ public void getArrayFromParser() {
+ final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, [1,2,3,4,5], \"z\":8"));
+ assertNotNull(parser);
+ parser.next();
+ parser.next();
+ parser.next();
+ assertEquals("[1,2,3,4,5]", parser.getArray().toString());
+ assertTrue(parser.next() == Event.KEY_NAME);
+ }
+
+ @Test
+ public void getArrayFromParserNested() {
+ final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, [1,2,3,4,5,[2,2,3,4,5]], \"z\":8"));
+ assertNotNull(parser);
+ parser.next();
+ parser.next();
+ parser.next();
+ assertEquals("[1,2,3,4,5,[2,2,3,4,5]]", parser.getArray().toString());
+ assertTrue(parser.next() == Event.KEY_NAME);
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void getArrayFromParserWrogState() {
+ final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, [1,2,3,4,5,[2,2,3,4,5]], \"z\":8"));
+ assertNotNull(parser);
+ parser.next();
+ parser.next();
+ assertEquals("[1,2,3,4,5,[2,2,3,4,5]]", parser.getArray().toString());
+ assertTrue(parser.next() == Event.KEY_NAME);
+ }
+
+ @Test
+ public void skipObject() {
+ final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, \"b\":{\"c\":9, \"d\":10, \"r\":{\"q\":19, \"s\":144}}, \"z\":8"));
+ assertNotNull(parser);
+ parser.next();
+ parser.next();
+ parser.next();
+ parser.next();
+ parser.next();
+ parser.skipObject();
+ parser.next();
+ assertEquals(Event.KEY_NAME, parser.next());
+ assertEquals("z",parser.getString());
+ }
+
+ @Test
+ public void skipArray() {
+ final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, [1,2,3,4,5,[2,2,3,4,5]], \"z\":8"));
+ assertNotNull(parser);
+ parser.next();
+ parser.next();
+ parser.next();
+ parser.next();
+ parser.skipArray();
+ parser.next();
+ assertTrue(parser.next() == Event.KEY_NAME);
+ assertEquals("z",parser.getString());
+ }
+
class AttemptingInputStream extends ByteArrayInputStream {
public AttemptingInputStream(byte[] buf) {
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java
new file mode 100644
index 0000000..21a5063
--- /dev/null
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java
@@ -0,0 +1,95 @@
+package org.apache.johnzon.core;
+
+import static org.junit.Assert.*;
+
+import javax.json.Json;
+import javax.json.JsonException;
+import javax.json.JsonNumber;
+import javax.json.JsonObject;
+import javax.json.JsonPointer;
+import javax.json.JsonReader;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+import javax.json.JsonValue.ValueType;
+import javax.json.spi.JsonProvider;
+
+import org.junit.Test;
+
+public class JsonPointerTest {
+
+ @Test
+ public void testEmptyJsonPointer() {
+ final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+ assertNotNull(loadInMemReader);
+ JsonObject obj = loadInMemReader.readObject();
+ assertEquals(obj, new JsonPointer("").getValue(obj));
+ }
+
+ @Test
+ public void testSimpleJsonPointer() {
+ final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+ assertNotNull(loadInMemReader);
+ JsonObject obj = loadInMemReader.readObject();
+ JsonValue result = new JsonPointer("/a").getValue(obj);
+ assertNotNull(result);
+ assertEquals("b", ((JsonString) result).getString());
+ }
+
+ @Test
+ public void testJsonPointer1() {
+ final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+ assertNotNull(loadInMemReader);
+ JsonObject obj = loadInMemReader.readObject();
+ JsonValue result = new JsonPointer("/c/d/0").getValue(obj);
+ assertNotNull(result);
+ assertEquals(1, ((JsonNumber) result).intValueExact());
+ }
+
+ @Test(expected=JsonException.class)
+ public void testNonExistentJsonPointer() {
+ final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+ assertNotNull(loadInMemReader);
+ JsonObject obj = loadInMemReader.readObject();
+ new JsonPointer("/c/d/11").getValue(obj);
+ }
+
+ @Test(expected=JsonException.class)
+ public void testNonExistentJsonPointer2() {
+ final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+ assertNotNull(loadInMemReader);
+ JsonObject obj = loadInMemReader.readObject();
+ new JsonPointer("/c/q/0").getValue(obj);
+ }
+
+ @Test(expected=JsonException.class)
+ public void testInvalidPointerNoSlash() {
+ new JsonPointer("a/c/g");
+ }
+
+ @Test(expected=JsonException.class)
+ public void testInvalidPointerBadEscape() {
+ new JsonPointer("/~2");
+ }
+
+ @Test(expected=JsonException.class)
+ public void testInvalidPointerBadEscape2() {
+ new JsonPointer("/~v");
+ }
+
+ @Test
+ public void testTrailingSlash() {
+ new JsonPointer("/a/c/g/");
+ }
+
+ //@Test
+ public void testaddJsonPointer1() {
+ final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+ assertNotNull(loadInMemReader);
+ JsonObject obj = loadInMemReader.readObject();
+ JsonObject result = new JsonPointer("/c/new").add(obj, Json.createValue("newval"));
+ System.out.println("res "+result);
+ JsonValue newVal = new JsonPointer("/c/new").getValue(result);
+ assertNotNull(newVal);
+ assertEquals("newval", ((JsonString) newVal).getString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java
index d9b2ecd..323e64c 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java
@@ -24,6 +24,7 @@ import java.io.ByteArrayOutputStream;
import javax.json.Json;
import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
import javax.json.JsonWriter;
import org.junit.Test;
@@ -39,4 +40,31 @@ public class JsonWriterImplTest {
writer.close();
assertEquals("{\"a\":\"b\"}", new String(out.toByteArray()));
}
+
+ @Test
+ public void writerSimpleNumber() {
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
+ final JsonWriter writer = Json.createWriter(out);
+ writer.write(Json.createValue(1));
+ writer.close();
+ assertEquals("1", new String(out.toByteArray()));
+ }
+
+ @Test
+ public void writerSimpleString() {
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
+ final JsonWriter writer = Json.createWriter(out);
+ writer.write(Json.createValue("simple string"));
+ writer.close();
+ assertEquals("\"simple string\"", new String(out.toByteArray()));
+ }
+
+ @Test
+ public void writerSimpleTrue() {
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
+ final JsonWriter writer = Json.createWriter(out);
+ writer.write(JsonValue.TRUE);
+ writer.close();
+ assertEquals("true", new String(out.toByteArray()));
+ }
}