@@ -217,6 +217,73 @@ public void testArrayWithDefaultTyping() throws Exception
217
217
assertEquals (2 , obj .path ("a" ).asInt ());
218
218
}
219
219
220
+ // [databind#2145]
221
+ @ Test
222
+ public void testOptionalAccessorOnArray () throws Exception {
223
+ ArrayNode arrayNode = MAPPER .createArrayNode ();
224
+ arrayNode .add ("firstElement" );
225
+ assertTrue (arrayNode .optional (0 ).isPresent ());
226
+ assertEquals ("firstElement" , arrayNode .optional (0 ).get ().asText ());
227
+ assertFalse (arrayNode .optional (1 ).isPresent ());
228
+ assertFalse (arrayNode .optional (-1 ).isPresent ());
229
+ assertFalse (arrayNode .optional (999 ).isPresent ());
230
+ assertFalse (arrayNode .optional ("anyField" ).isPresent ());
231
+ }
232
+
233
+ @ Test
234
+ public void testOptionalAccessorOnObject () throws Exception {
235
+ ObjectNode objectNode = MAPPER .createObjectNode ();
236
+ objectNode .put ("existingField" , "value" );
237
+ assertTrue (objectNode .optional ("existingField" ).isPresent ());
238
+ assertEquals ("value" , objectNode .optional ("existingField" ).get ().asText ());
239
+ assertFalse (objectNode .optional ("missingField" ).isPresent ());
240
+ assertFalse (objectNode .optional (0 ).isPresent ());
241
+ assertFalse (objectNode .optional (-1 ).isPresent ());
242
+ }
243
+
244
+ @ Test
245
+ public void testOptionalAccessorOnNumbers () throws Exception
246
+ {
247
+ // Test IntNode
248
+ IntNode intNode = IntNode .valueOf (42 );
249
+ assertFalse (intNode .optional ("anyField" ).isPresent ());
250
+ assertFalse (intNode .optional (0 ).isPresent ());
251
+
252
+ // Test LongNode
253
+ LongNode longNode = LongNode .valueOf (123456789L );
254
+ assertFalse (longNode .optional ("anyField" ).isPresent ());
255
+ assertFalse (longNode .optional (0 ).isPresent ());
256
+
257
+ // Test DoubleNode
258
+ DoubleNode doubleNode = DoubleNode .valueOf (3.14 );
259
+ assertFalse (doubleNode .optional ("anyField" ).isPresent ());
260
+ assertFalse (doubleNode .optional (0 ).isPresent ());
261
+
262
+ // Test DecimalNode
263
+ DecimalNode decimalNode = DecimalNode .valueOf (new java .math .BigDecimal ("12345.6789" ));
264
+ assertFalse (decimalNode .optional ("anyField" ).isPresent ());
265
+ assertFalse (decimalNode .optional (0 ).isPresent ());
266
+ }
267
+
268
+ @ Test
269
+ public void testOptionalAccessorOnOtherTypes () throws Exception
270
+ {
271
+ // Test TextNode
272
+ TextNode textNode = TextNode .valueOf ("sampleText" );
273
+ assertFalse (textNode .optional ("anyField" ).isPresent ());
274
+ assertFalse (textNode .optional (0 ).isPresent ());
275
+
276
+ // Test NullNode
277
+ NullNode nullNode = NullNode .getInstance ();
278
+ assertFalse (nullNode .optional ("anyField" ).isPresent ());
279
+ assertFalse (nullNode .optional (0 ).isPresent ());
280
+
281
+ // Test BooleanNode
282
+ BooleanNode booleanNode = BooleanNode .TRUE ;
283
+ assertFalse (booleanNode .optional ("anyField" ).isPresent ());
284
+ assertFalse (booleanNode .optional (0 ).isPresent ());
285
+ }
286
+
220
287
// [databind#4867]
221
288
@ Test
222
289
public void testAsOptional () {
0 commit comments