Repository: johnzon Updated Branches: refs/heads/master 31fe53aad -> e6d79e356
Fix JsonParser.getValue() Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/e66503c7 Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/e66503c7 Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/e66503c7 Branch: refs/heads/master Commit: e66503c75c67d480966b879a02a566f6524c1812 Parents: f784faf Author: leadpony <[email protected]> Authored: Wed Jul 18 18:27:00 2018 +0900 Committer: leadpony <[email protected]> Committed: Wed Jul 18 18:27:00 2018 +0900 ---------------------------------------------------------------------- .../johnzon/core/JohnzonJsonParserImpl.java | 27 +++++++++-- .../org/apache/johnzon/core/JsonParserTest.java | 49 ++++++++++++++++++++ 2 files changed, 71 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/e66503c7/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParserImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParserImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParserImpl.java index 5fa051a..1a0cc3d 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParserImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JohnzonJsonParserImpl.java @@ -61,12 +61,29 @@ public abstract class JohnzonJsonParserImpl implements JohnzonJsonParser { @Override public JsonValue getValue() { Event current = current(); - if (current != Event.START_ARRAY && current != Event.START_OBJECT) { - throw new IllegalStateException(current + " doesn't support getArray()"); + switch (current) { + case START_ARRAY: + case START_OBJECT: + JsonReaderImpl jsonReader = new JsonReaderImpl(this, true); + return jsonReader.readValue(); + case VALUE_TRUE: + return JsonValue.TRUE; + case VALUE_FALSE: + return JsonValue.FALSE; + case VALUE_NULL: + return JsonValue.NULL; + case VALUE_STRING: + case KEY_NAME: + return new JsonStringImpl(getString()); + case VALUE_NUMBER: + if (isIntegralNumber()) { + return new JsonLongImpl(getLong()); + } else { + return new JsonNumberImpl(getBigDecimal()); + } + default: + throw new IllegalStateException(current + " doesn't support getValue()"); } - - JsonReaderImpl jsonReader = new JsonReaderImpl(this, true); - return jsonReader.readValue(); } @Override http://git-wip-us.apache.org/repos/asf/johnzon/blob/e66503c7/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 c4147a9..9436e5a 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 @@ -42,6 +42,7 @@ import javax.json.JsonException; import javax.json.JsonObject; 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; @@ -72,6 +73,54 @@ public class JsonParserTest { JsonObject jsonObject = parser.getObject(); Assert.assertNotNull(jsonObject); } + + @Test + public void testGetValueOfStringType() { + String json = "\"abc\""; + JsonParser parser = Json.createParser(new StringReader(json)); + JsonValue jsonValue = parser.getValue(); + assertEquals(Json.createValue("abc"), jsonValue); + } + + @Test + public void testGetValueOfNumberType() { + String json = "3.14"; + JsonParser parser = Json.createParser(new StringReader(json)); + JsonValue jsonValue = parser.getValue(); + assertEquals(Json.createValue(new BigDecimal("3.14")), jsonValue); + } + + @Test + public void testGetValueOfIntegerType() { + String json = "42"; + JsonParser parser = Json.createParser(new StringReader(json)); + JsonValue jsonValue = parser.getValue(); + assertEquals(Json.createValue(42), jsonValue); + } + + @Test + public void testGetValueOfTrueType() { + String json = "true"; + JsonParser parser = Json.createParser(new StringReader(json)); + JsonValue jsonValue = parser.getValue(); + assertEquals(JsonValue.TRUE, jsonValue); + } + + @Test + public void testGetValueOfFalseType() { + String json = "false"; + JsonParser parser = Json.createParser(new StringReader(json)); + JsonValue jsonValue = parser.getValue(); + assertEquals(JsonValue.FALSE, jsonValue); + } + + @Test + public void testGetValueOfNullType() { + String json = "null"; + JsonParser parser = Json.createParser(new StringReader(json)); + JsonValue jsonValue = parser.getValue(); + assertEquals(JsonValue.NULL, jsonValue); + } private void assertSimple(final JsonParser parser) { {
