Skip to content

Commit 1df8b77

Browse files
authored
Work on #1433: tests, minor improvement to handling (#1435)
1 parent 2a1e3f1 commit 1df8b77

File tree

2 files changed

+84
-4
lines changed

2 files changed

+84
-4
lines changed

src/main/java/com/fasterxml/jackson/core/base/ParserBase.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -900,11 +900,9 @@ protected void _parseNumericValue(int expType) throws IOException
900900
// (note: could alternatively see if TextBuffer has aggregated contents, avoid
901901
// exception -- but that might be more confusing)
902902
if (_closed) {
903-
_reportError("Internal error: _parseNumericValue called when parser instance closed");
904-
}
905-
903+
;
906904
// Int or float?
907-
if (_currToken == JsonToken.VALUE_NUMBER_INT) {
905+
} else if (_currToken == JsonToken.VALUE_NUMBER_INT) {
908906
final int len = _intLength;
909907
// First: optimization for simple int
910908
if (len <= 9) {
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package com.fasterxml.jackson.core.read;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import com.fasterxml.jackson.core.JUnit5TestBase;
6+
import com.fasterxml.jackson.core.JsonFactory;
7+
import com.fasterxml.jackson.core.JsonParseException;
8+
import com.fasterxml.jackson.core.JsonParser;
9+
import com.fasterxml.jackson.core.JsonToken;
10+
import com.fasterxml.jackson.core.exc.StreamReadException;
11+
12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
import static org.junit.jupiter.api.Assertions.assertNull;
14+
import static org.junit.jupiter.api.Assertions.fail;
15+
16+
public class NumberParsingGetType1433Test
17+
extends JUnit5TestBase
18+
{
19+
protected JsonFactory jsonFactory() {
20+
return sharedStreamFactory();
21+
}
22+
23+
@Test
24+
void getNumberType() throws Exception
25+
{
26+
_getNumberType(MODE_INPUT_STREAM);
27+
_getNumberType(MODE_INPUT_STREAM_THROTTLED);
28+
_getNumberType(MODE_READER);
29+
_getNumberType(MODE_DATA_INPUT);
30+
}
31+
32+
private void _getNumberType(int mode) throws Exception
33+
{
34+
JsonParser p;
35+
36+
p = createParser(jsonFactory(), mode, " 123 ");
37+
_verifyGetNumberTypeFail(p, "null");
38+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
39+
assertEquals(JsonParser.NumberType.INT, p.getNumberType());
40+
assertNull(p.nextToken());
41+
_verifyGetNumberTypeFail(p, "null");
42+
p.close();
43+
_verifyGetNumberTypeFail(p, "null");
44+
45+
p = createParser(jsonFactory(), mode, " -9 false ");
46+
_verifyGetNumberTypeFail(p, "null");
47+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
48+
assertEquals(JsonParser.NumberType.INT, p.getNumberType());
49+
assertToken(JsonToken.VALUE_FALSE, p.nextToken());
50+
_verifyGetNumberTypeFail(p, "VALUE_FALSE");
51+
assertNull(p.nextToken());
52+
_verifyGetNumberTypeFail(p, "null");
53+
p.close();
54+
_verifyGetNumberTypeFail(p, "null");
55+
56+
p = createParser(jsonFactory(), mode, "[123, true]");
57+
_verifyGetNumberTypeFail(p, "null");
58+
assertToken(JsonToken.START_ARRAY, p.nextToken());
59+
_verifyGetNumberTypeFail(p, "START_ARRAY");
60+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
61+
assertEquals(JsonParser.NumberType.INT, p.getNumberType());
62+
assertToken(JsonToken.VALUE_TRUE, p.nextToken());
63+
_verifyGetNumberTypeFail(p, "VALUE_TRUE");
64+
assertToken(JsonToken.END_ARRAY, p.nextToken());
65+
_verifyGetNumberTypeFail(p, "END_ARRAY");
66+
assertNull(p.nextToken());
67+
_verifyGetNumberTypeFail(p, "null");
68+
p.close();
69+
_verifyGetNumberTypeFail(p, "null");
70+
}
71+
72+
private void _verifyGetNumberTypeFail(JsonParser p, String token) throws Exception
73+
{
74+
try {
75+
p.getNumberType();
76+
fail("Should not pass");
77+
} catch (StreamReadException e) {
78+
verifyException(e, "Current token ("+token+") not numeric, can not use numeric");
79+
}
80+
}
81+
82+
}

0 commit comments

Comments
 (0)