@@ -41,8 +41,11 @@ public void testGetNumberTypeAndValue() throws Exception {
41
41
42
42
Integer intValue = Integer .MAX_VALUE ;
43
43
IonValue ionInt = ion .newInt (intValue );
44
-
45
44
IonParser intParser = ionFactory .createParser (EMPTY_READ_CTXT , ionInt );
45
+
46
+ // initially no current token so:
47
+ _verifyGetNumberTypeFail (intParser , "null" );
48
+
46
49
assertEquals (JsonToken .VALUE_NUMBER_INT , intParser .nextToken ());
47
50
assertEquals (JsonParser .NumberType .INT , intParser .getNumberType ());
48
51
assertEquals (JsonParser .NumberTypeFP .UNKNOWN , intParser .getNumberTypeFP ());
@@ -51,14 +54,17 @@ public void testGetNumberTypeAndValue() throws Exception {
51
54
Long longValue = Long .MAX_VALUE ;
52
55
IonValue ionLong = ion .newInt (longValue );
53
56
IonParser longParser = ionFactory .createParser (EMPTY_READ_CTXT , ionLong );
57
+ _verifyGetNumberTypeFail (longParser , "null" );
54
58
assertEquals (JsonToken .VALUE_NUMBER_INT , longParser .nextToken ());
55
59
assertEquals (JsonParser .NumberType .LONG , longParser .getNumberType ());
56
60
assertEquals (JsonParser .NumberTypeFP .UNKNOWN , intParser .getNumberTypeFP ());
57
61
assertEquals (longValue , longParser .getNumberValue ());
62
+ assertNull (longParser .nextToken ());
58
63
59
64
BigInteger bigIntValue = new BigInteger (Long .MAX_VALUE + "1" );
60
65
IonValue ionBigInt = ion .newInt (bigIntValue );
61
66
IonParser bigIntParser = ionFactory .createParser (EMPTY_READ_CTXT , ionBigInt );
67
+ _verifyGetNumberTypeFail (bigIntParser , "null" );
62
68
assertEquals (JsonToken .VALUE_NUMBER_INT , bigIntParser .nextToken ());
63
69
assertEquals (JsonParser .NumberType .BIG_INTEGER , bigIntParser .getNumberType ());
64
70
assertEquals (JsonParser .NumberTypeFP .UNKNOWN , intParser .getNumberTypeFP ());
@@ -67,6 +73,7 @@ public void testGetNumberTypeAndValue() throws Exception {
67
73
Double decimalValue = Double .MAX_VALUE ;
68
74
IonValue ionDecimal = ion .newDecimal (decimalValue );
69
75
IonParser decimalParser = ionFactory .createParser (EMPTY_READ_CTXT , ionDecimal );
76
+ _verifyGetNumberTypeFail (decimalParser , "null" );
70
77
assertEquals (JsonToken .VALUE_NUMBER_FLOAT , decimalParser .nextToken ());
71
78
assertEquals (JsonParser .NumberType .BIG_DECIMAL , decimalParser .getNumberType ());
72
79
assertEquals (JsonParser .NumberTypeFP .BIG_DECIMAL , decimalParser .getNumberTypeFP ());
@@ -75,6 +82,7 @@ public void testGetNumberTypeAndValue() throws Exception {
75
82
Double floatValue = Double .MAX_VALUE ;
76
83
IonValue ionFloat = ion .newFloat (floatValue );
77
84
IonParser floatParser = ionFactory .createParser (EMPTY_READ_CTXT , ionFloat );
85
+ _verifyGetNumberTypeFail (floatParser , "null" );
78
86
assertEquals (JsonToken .VALUE_NUMBER_FLOAT , floatParser .nextToken ());
79
87
assertEquals (JsonParser .NumberType .DOUBLE , floatParser .getNumberType ());
80
88
// [dataformats-binary#490]: float coerces to double
@@ -84,6 +92,7 @@ public void testGetNumberTypeAndValue() throws Exception {
84
92
BigDecimal bigDecimalValue = new BigDecimal (Double .MAX_VALUE + "1" );
85
93
IonValue ionBigDecimal = ion .newDecimal (bigDecimalValue );
86
94
IonParser bigDecimalParser = ionFactory .createParser (EMPTY_READ_CTXT , ionBigDecimal );
95
+ _verifyGetNumberTypeFail (bigDecimalParser , "null" );
87
96
assertEquals (JsonToken .VALUE_NUMBER_FLOAT , bigDecimalParser .nextToken ());
88
97
assertEquals (JsonParser .NumberType .BIG_DECIMAL , bigDecimalParser .getNumberType ());
89
98
assertEquals (JsonParser .NumberTypeFP .BIG_DECIMAL , bigDecimalParser .getNumberTypeFP ());
@@ -147,9 +156,11 @@ public void testIonExceptionIsWrapped() throws Exception {
147
156
assertThrows (StreamReadException .class , () -> {
148
157
try (IonParser parser = (IonParser ) ionFactory .createParser (EMPTY_READ_CTXT , "[ 12, true ) ]" )) {
149
158
assertEquals (JsonToken .START_ARRAY , parser .nextToken ());
159
+ _verifyGetNumberTypeFail (parser , "START_ARRAY" );
150
160
assertEquals (JsonToken .VALUE_NUMBER_INT , parser .nextValue ());
151
161
assertEquals (12 , parser .getIntValue ());
152
162
assertEquals (JsonToken .VALUE_TRUE , parser .nextValue ());
163
+ _verifyGetNumberTypeFail (parser , "VALUE_TRUE" );
153
164
parser .nextValue ();
154
165
}
155
166
});
@@ -198,4 +209,12 @@ public void testUnknownSymbolExceptionForAnnotationIsWrapped() throws Exception
198
209
}
199
210
});
200
211
}
212
+
213
+ // 30-May-2025, tatu: NOTE: in 3.0 no longer expected to throw exception, just
214
+ // return null (Ion backend did that in 2.x already fwtw, different from
215
+ // other backends)
216
+ private void _verifyGetNumberTypeFail (JsonParser p , String token ) throws Exception
217
+ {
218
+ assertNull (p .getNumberType ());
219
+ }
201
220
}
0 commit comments