Skip to content

Commit

Permalink
Minor fixes to issue related to #700 (current name access via getText…
Browse files Browse the repository at this point in the history
…() should work)
  • Loading branch information
cowtowncoder committed Jul 20, 2021
1 parent 2176981 commit d10ac69
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -865,11 +865,44 @@ public JsonParser skipChildren() throws IOException
/**********************************************************
*/

@Override public String getText() throws IOException { return delegate.getText(); }
@Override public boolean hasTextCharacters() { return delegate.hasTextCharacters(); }
@Override public char[] getTextCharacters() throws IOException { return delegate.getTextCharacters(); }
@Override public int getTextLength() throws IOException { return delegate.getTextLength(); }
@Override public int getTextOffset() throws IOException { return delegate.getTextOffset(); }
// 19-Jul-2021, tatu: Cannot quite just delegate these methods due to oddity
// of property name token, which may be buffered.

@Override public String getText() throws IOException {
if (_currToken == JsonToken.FIELD_NAME) {
return currentName();
}
return delegate.getText();
}

@Override public boolean hasTextCharacters() {
if (_currToken == JsonToken.FIELD_NAME) {
return false;
}
return delegate.hasTextCharacters();
}

@Override public char[] getTextCharacters() throws IOException {
// Not optimal but is correct, unlike delegating (as underlying stream
// may point to something else due to buffering)
if (_currToken == JsonToken.FIELD_NAME) {
return currentName().toCharArray();
}
return delegate.getTextCharacters();
}

@Override public int getTextLength() throws IOException {
if (_currToken == JsonToken.FIELD_NAME) {
return currentName().length();
}
return delegate.getTextLength();
}
@Override public int getTextOffset() throws IOException {
if (_currToken == JsonToken.FIELD_NAME) {
return 0;
}
return delegate.getTextOffset();
}

/*
/**********************************************************
Expand Down Expand Up @@ -924,9 +957,20 @@ public JsonParser skipChildren() throws IOException
@Override public double getValueAsDouble(double defaultValue) throws IOException { return delegate.getValueAsDouble(defaultValue); }
@Override public boolean getValueAsBoolean() throws IOException { return delegate.getValueAsBoolean(); }
@Override public boolean getValueAsBoolean(boolean defaultValue) throws IOException { return delegate.getValueAsBoolean(defaultValue); }
@Override public String getValueAsString() throws IOException { return delegate.getValueAsString(); }
@Override public String getValueAsString(String defaultValue) throws IOException { return delegate.getValueAsString(defaultValue); }


@Override public String getValueAsString() throws IOException {
if (_currToken == JsonToken.FIELD_NAME) {
return currentName();
}
return delegate.getValueAsString();
}
@Override public String getValueAsString(String defaultValue) throws IOException {
if (_currToken == JsonToken.FIELD_NAME) {
return currentName();
}
return delegate.getValueAsString(defaultValue);
}

/*
/**********************************************************
/* Public API, access to token values, other
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ public void testSkippingRootLevel() throws Exception

assertToken(JsonToken.FIELD_NAME, p.nextToken());
assertEquals("value", p.currentName());
// 19-Jul-2021, tatu: while not ideal, existing contract is that "getText()"
// ought to return property name as well...
assertEquals("value", p.getText());

assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(12, p.getIntValue());

Expand All @@ -70,10 +74,13 @@ public void testSkippingOneNested() throws Exception

assertToken(JsonToken.FIELD_NAME, p.nextToken());
assertEquals("value", p.currentName());
// as earlier, this needs to hold true too
assertEquals("value", p.getText());

assertToken(JsonToken.START_OBJECT, p.nextToken());
assertToken(JsonToken.FIELD_NAME, p.nextToken());
assertEquals("a", p.currentName());
assertEquals("a", p.getText());
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(12, p.getIntValue());
assertEquals(JsonToken.END_OBJECT, p.nextToken());
Expand Down Expand Up @@ -104,21 +111,29 @@ private void _testSkippingForSingleWithPath(boolean useNextName) throws Exceptio
);

assertToken(JsonToken.START_OBJECT, p.nextToken());
assertTrue(p.isExpectedStartObjectToken());

if (useNextName) {
assertEquals("value", p.nextFieldName());
// as earlier, this needs to hold true too
assertEquals("value", p.getText());
assertToken(JsonToken.START_OBJECT, p.nextToken());
assertTrue(p.isExpectedStartObjectToken());
assertEquals("a", p.nextFieldName());
assertEquals("a", p.getText());
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(99, p.getIntValue());
assertNull(p.nextFieldName());
assertEquals(JsonToken.END_OBJECT, p.currentToken());
} else {
assertToken(JsonToken.FIELD_NAME, p.nextToken());
assertEquals("value", p.currentName());
assertEquals("value", p.getText());
assertToken(JsonToken.START_OBJECT, p.nextToken());
assertTrue(p.isExpectedStartObjectToken());
assertToken(JsonToken.FIELD_NAME, p.nextToken());
assertEquals("a", p.currentName());
assertEquals("a", p.getText());
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
assertEquals(99, p.getIntValue());
assertEquals(JsonToken.END_OBJECT, p.nextToken());
Expand Down

0 comments on commit d10ac69

Please sign in to comment.