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

Reply via email to