Hi guys, can you have a quick look to the exceptions, I changed a few to handle the related ticket and i'm not sure the previous tests were right or if we need to not use hasNext() in next() to handle it.
---------- Forwarded message --------- From: <[email protected]> Date: mar. 31 juil. 2018 à 15:22 Subject: johnzon git commit: JOHNZON-183 JsonParser#hasNext() returns true even when input is completely empty To: <[email protected]> Repository: johnzon Updated Branches: refs/heads/master f41430773 -> 4e8b6524a JOHNZON-183 JsonParser#hasNext() returns true even when input is completely empty Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/4e8b6524 Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/4e8b6524 Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/4e8b6524 Branch: refs/heads/master Commit: 4e8b6524a010de3efbe5e54eec9dd6fa2140f510 Parents: f414307 Author: Romain Manni-Bucau <[email protected]> Authored: Tue Jul 31 15:22:33 2018 +0200 Committer: Romain Manni-Bucau <[email protected]> Committed: Tue Jul 31 15:22:33 2018 +0200 ---------------------------------------------------------------------- .../johnzon/core/JsonStreamParserImpl.java | 23 ++++++++++++++------ .../org/apache/johnzon/core/JsonParserTest.java | 17 ++++++++++----- 2 files changed, 28 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/4e8b6524/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 4d0571a..cd6022e 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 @@ -198,13 +198,17 @@ public class JsonStreamParserImpl extends JohnzonJsonParserImpl implements JsonC @Override public final boolean hasNext() { - - if (currentStructureElement != null || - (previousEvent != END_ARRAY && previousEvent != END_OBJECT && - previousEvent != VALUE_STRING && previousEvent != VALUE_FALSE && previousEvent != VALUE_TRUE && - previousEvent != VALUE_NULL && previousEvent != VALUE_NUMBER) || - previousEvent == 0) { - + if (currentStructureElement != null || previousEvent == 0) { + return true; + } + if (previousEvent != END_ARRAY && previousEvent != END_OBJECT && + previousEvent != VALUE_STRING && previousEvent != VALUE_FALSE && previousEvent != VALUE_TRUE && + previousEvent != VALUE_NULL && previousEvent != VALUE_NUMBER) { + if (bufferPos == Integer.MIN_VALUE) { // check we don't have an empty string to parse + final char c = readNextChar(); + bufferPos--; + return c != EOF; + } return true; } @@ -357,6 +361,11 @@ public class JsonStreamParserImpl extends JohnzonJsonParserImpl implements JsonC //main entry, make decision how to handle the current character in the stream if (!hasNext()) { + final char c = readNextChar(); + bufferPos--; + if (c != EOF) { + throw uexc("No available event"); + } throw new NoSuchElementException(); } http://git-wip-us.apache.org/repos/asf/johnzon/blob/4e8b6524/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 9436e5a..fb84307 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 @@ -67,6 +67,13 @@ public class JsonParserTest { } @Test + public void emptyObject() { + final JsonParser parser = Json.createParser(new StringReader("")); + assertFalse(parser.hasNext()); + parser.close(); + } + + @Test public void testParseGetObject() throws Exception { String json = "{\"a\":1,\"b\":2 }"; JsonParser parser = Json.createParser(new StringReader(json)); @@ -991,14 +998,14 @@ public class JsonParserTest { Json.createReader(new ByteArrayInputStream("{\"z\":nulll}".getBytes())).read(); } - @Test(expected = JsonException.class) + @Test(expected = IllegalStateException.class) public void zeroByteInput() { // using a reader as wrapper of parser Json.createReader(new ByteArrayInputStream(new byte[]{})).read(); } - @Test(expected = JsonParsingException.class) + @Test(expected = IllegalStateException.class) public void zeroCharInput() { // using a reader as wrapper of parser @@ -1142,13 +1149,13 @@ public class JsonParserTest { try { parser.next(); fail(); - } catch (JsonParsingException e) { + } catch (NoSuchElementException e) { //expected } } - @Test(expected=JsonParsingException.class) + @Test(expected=NoSuchElementException.class) public void testBinaryNullStream() { ByteArrayInputStream bin = new ByteArrayInputStream("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0".getBytes(UTF_8)); JsonParser parser = Json.createParser(bin); @@ -1327,7 +1334,7 @@ public class JsonParserTest { JsonParser parser = Json.createParser(new ByteArrayInputStream("[]".getBytes())); assertEquals(Event.START_ARRAY, parser.next()); assertEquals(Event.END_ARRAY, parser.next()); - assertEquals(false, parser.hasNext()); + assertFalse(parser.hasNext()); try { parser.next(); fail("Should have thrown a NoSuchElementException");
