1212
1313import static org .junit .jupiter .api .Assertions .assertEquals ;
1414import static org .junit .jupiter .api .Assertions .assertNull ;
15+ import static org .junit .jupiter .api .Assertions .assertTrue ;
1516
1617// for [dataformat-binary#93]
1718public class UndefinedValueTest extends CBORTestBase
1819{
19- private final static byte BYTE_UNDEFINED = (byte ) 0xF7 ;
20+ private final static byte BYTE_UNDEFINED = (byte ) CBORConstants .SIMPLE_VALUE_UNDEFINED ;
21+
22+ private final CBORFactory CBOR_F = cborFactory ();
2023
2124 @ Test
2225 public void testUndefinedLiteralStreaming () throws Exception
2326 {
24- JsonParser p = cborParser (new byte [] { BYTE_UNDEFINED });
25- assertEquals (JsonToken .VALUE_NULL , p .nextToken ());
27+ try (CBORParser p = cborParser (new byte [] { BYTE_UNDEFINED })) {
28+ assertEquals (JsonToken .VALUE_NULL , p .nextToken ());
29+ assertTrue (p .isUndefined ());
30+ assertNull (p .nextToken ());
31+ }
32+ }
33+
34+ // @since 2.20 [jackson-dataformats-binary/137]
35+ @ Test
36+ public void testUndefinedLiteralAsEmbeddedObject () throws Exception {
37+ CBORFactory f = CBORFactory .builder ()
38+ .enable (CBORReadFeature .HANDLE_UNDEFINED_AS_EMBEDDED_OBJECT )
39+ .build ();
40+ CBORParser p = cborParser (f , new byte [] { BYTE_UNDEFINED });
41+
42+ assertEquals (JsonToken .VALUE_EMBEDDED_OBJECT , p .nextToken ());
43+ assertTrue (p .isUndefined ());
2644 assertNull (p .nextToken ());
2745 p .close ();
2846 }
@@ -34,9 +52,30 @@ public void testUndefinedInArray() throws Exception
3452 out .write (CBORConstants .BYTE_ARRAY_INDEFINITE );
3553 out .write (BYTE_UNDEFINED );
3654 out .write (CBORConstants .BYTE_BREAK );
37- JsonParser p = cborParser (out .toByteArray ());
55+ try (CBORParser p = cborParser (CBOR_F , out .toByteArray ())) {
56+ assertEquals (JsonToken .START_ARRAY , p .nextToken ());
57+ assertEquals (JsonToken .VALUE_NULL , p .nextToken ());
58+ assertTrue (p .isUndefined ());
59+ assertEquals (JsonToken .END_ARRAY , p .nextToken ());
60+ assertNull (p .nextToken ());
61+ }
62+ }
63+
64+ // @since 2.20 [jackson-dataformats-binary/137]
65+ @ Test
66+ public void testUndefinedInArrayAsEmbeddedObject () throws Exception {
67+ CBORFactory f = CBORFactory .builder ()
68+ .enable (CBORReadFeature .HANDLE_UNDEFINED_AS_EMBEDDED_OBJECT )
69+ .build ();
70+
71+ ByteArrayOutputStream out = new ByteArrayOutputStream ();
72+ out .write (CBORConstants .BYTE_ARRAY_INDEFINITE );
73+ out .write (BYTE_UNDEFINED );
74+ out .write (CBORConstants .BYTE_BREAK );
75+ CBORParser p = cborParser (f , out .toByteArray ());
3876 assertEquals (JsonToken .START_ARRAY , p .nextToken ());
39- assertEquals (JsonToken .VALUE_NULL , p .nextToken ());
77+ assertEquals (JsonToken .VALUE_EMBEDDED_OBJECT , p .nextToken ());
78+ assertTrue (p .isUndefined ());
4079 assertEquals (JsonToken .END_ARRAY , p .nextToken ());
4180 assertNull (p .nextToken ());
4281 p .close ();
@@ -57,11 +96,42 @@ public void testUndefinedInObject() throws Exception
5796 // assume we use end marker for Object, so
5897 doc [doc .length -2 ] = BYTE_UNDEFINED ;
5998
60- JsonParser p = cborParser (doc );
99+ try (CBORParser p = cborParser (CBOR_F , doc )) {
100+ assertEquals (JsonToken .START_OBJECT , p .nextToken ());
101+ assertEquals (JsonToken .PROPERTY_NAME , p .nextToken ());
102+ assertEquals ("bar" , p .currentName ());
103+ assertEquals (JsonToken .VALUE_NULL , p .nextToken ());
104+ assertTrue (p .isUndefined ());
105+ assertEquals (JsonToken .END_OBJECT , p .nextToken ());
106+ assertNull (p .nextToken ());
107+ }
108+ }
109+
110+ // @since 2.20 [jackson-dataformats-binary/137]
111+ @ Test
112+ public void testUndefinedInObjectAsEmbeddedObject () throws Exception {
113+ CBORFactory f = CBORFactory .builder ()
114+ .enable (CBORReadFeature .HANDLE_UNDEFINED_AS_EMBEDDED_OBJECT )
115+ .build ();
116+
117+ ByteArrayOutputStream out = new ByteArrayOutputStream ();
118+ CBORGenerator g = cborGenerator (out );
119+ g .writeStartObject ();
120+ g .writeName ("bar" );
121+ g .writeBoolean (true );
122+ g .writeEndObject ();
123+ g .close ();
124+
125+ byte [] doc = out .toByteArray ();
126+ // assume we use end marker for Object, so
127+ doc [doc .length - 2 ] = BYTE_UNDEFINED ;
128+
129+ CBORParser p = cborParser (f , doc );
61130 assertEquals (JsonToken .START_OBJECT , p .nextToken ());
62131 assertEquals (JsonToken .PROPERTY_NAME , p .nextToken ());
63132 assertEquals ("bar" , p .currentName ());
64- assertEquals (JsonToken .VALUE_NULL , p .nextToken ());
133+ assertEquals (JsonToken .VALUE_EMBEDDED_OBJECT , p .nextToken ());
134+ assertTrue (p .isUndefined ());
65135 assertEquals (JsonToken .END_OBJECT , p .nextToken ());
66136 assertNull (p .nextToken ());
67137 p .close ();
0 commit comments