44
55import org .junit .jupiter .api .Test ;
66
7- import com .fasterxml .jackson .core .JsonParser ;
87import com .fasterxml .jackson .core .JsonToken ;
98import com .fasterxml .jackson .dataformat .cbor .*;
109
1110import static org .junit .jupiter .api .Assertions .assertEquals ;
1211import static org .junit .jupiter .api .Assertions .assertNull ;
12+ import static org .junit .jupiter .api .Assertions .assertTrue ;
1313
1414// for [dataformat-binary#93]
1515public class UndefinedValueTest extends CBORTestBase
1616{
17- private final static byte BYTE_UNDEFINED = (byte ) 0xF7 ;
17+ private final static byte BYTE_UNDEFINED = (byte ) CBORConstants . SIMPLE_VALUE_UNDEFINED ;
1818
1919 private final CBORFactory CBOR_F = cborFactory ();
2020
2121 @ Test
2222 public void testUndefinedLiteralStreaming () throws Exception
2323 {
24- JsonParser p = cborParser (CBOR_F , new byte [] { BYTE_UNDEFINED });
24+ CBORParser p = cborParser (CBOR_F , new byte [] { BYTE_UNDEFINED });
2525 assertEquals (JsonToken .VALUE_NULL , p .nextToken ());
26+ assertTrue (p .isUndefined ());
27+ assertNull (p .nextToken ());
28+ p .close ();
29+ }
30+
31+ // @since 2.20 [jackson-dataformats-binary/137]
32+ @ Test
33+ public void testUndefinedLiteralAsEmbeddedObject () throws Exception {
34+ CBORFactory f = CBORFactory .builder ()
35+ .enable (CBORParser .Feature .HANDLE_UNDEFINED_AS_EMBEDDED_OBJECT )
36+ .build ();
37+ CBORParser p = cborParser (f , new byte [] { BYTE_UNDEFINED });
38+
39+ assertEquals (JsonToken .VALUE_EMBEDDED_OBJECT , p .nextToken ());
40+ assertTrue (p .isUndefined ());
2641 assertNull (p .nextToken ());
2742 p .close ();
2843 }
@@ -34,9 +49,30 @@ public void testUndefinedInArray() throws Exception
3449 out .write (CBORConstants .BYTE_ARRAY_INDEFINITE );
3550 out .write (BYTE_UNDEFINED );
3651 out .write (CBORConstants .BYTE_BREAK );
37- JsonParser p = cborParser (CBOR_F , out .toByteArray ());
52+ CBORParser p = cborParser (CBOR_F , out .toByteArray ());
3853 assertEquals (JsonToken .START_ARRAY , p .nextToken ());
3954 assertEquals (JsonToken .VALUE_NULL , p .nextToken ());
55+ assertTrue (p .isUndefined ());
56+ assertEquals (JsonToken .END_ARRAY , p .nextToken ());
57+ assertNull (p .nextToken ());
58+ p .close ();
59+ }
60+
61+ // @since 2.20 [jackson-dataformats-binary/137]
62+ @ Test
63+ public void testUndefinedInArrayAsEmbeddedObject () throws Exception {
64+ CBORFactory f = CBORFactory .builder ()
65+ .enable (CBORParser .Feature .HANDLE_UNDEFINED_AS_EMBEDDED_OBJECT )
66+ .build ();
67+
68+ ByteArrayOutputStream out = new ByteArrayOutputStream ();
69+ out .write (CBORConstants .BYTE_ARRAY_INDEFINITE );
70+ out .write (BYTE_UNDEFINED );
71+ out .write (CBORConstants .BYTE_BREAK );
72+ CBORParser p = cborParser (f , out .toByteArray ());
73+ assertEquals (JsonToken .START_ARRAY , p .nextToken ());
74+ assertEquals (JsonToken .VALUE_EMBEDDED_OBJECT , p .nextToken ());
75+ assertTrue (p .isUndefined ());
4076 assertEquals (JsonToken .END_ARRAY , p .nextToken ());
4177 assertNull (p .nextToken ());
4278 p .close ();
@@ -57,11 +93,42 @@ public void testUndefinedInObject() throws Exception
5793 // assume we use end marker for Object, so
5894 doc [doc .length -2 ] = BYTE_UNDEFINED ;
5995
60- JsonParser p = cborParser (CBOR_F , doc );
96+ CBORParser p = cborParser (CBOR_F , doc );
6197 assertEquals (JsonToken .START_OBJECT , p .nextToken ());
6298 assertEquals (JsonToken .FIELD_NAME , p .nextToken ());
6399 assertEquals ("bar" , p .currentName ());
64100 assertEquals (JsonToken .VALUE_NULL , p .nextToken ());
101+ assertTrue (p .isUndefined ());
102+ assertEquals (JsonToken .END_OBJECT , p .nextToken ());
103+ assertNull (p .nextToken ());
104+ p .close ();
105+ }
106+
107+ // @since 2.20 [jackson-dataformats-binary/137]
108+ @ Test
109+ public void testUndefinedInObjectAsEmbeddedObject () throws Exception {
110+ CBORFactory f = CBORFactory .builder ()
111+ .enable (CBORParser .Feature .HANDLE_UNDEFINED_AS_EMBEDDED_OBJECT )
112+ .build ();
113+
114+ ByteArrayOutputStream out = new ByteArrayOutputStream ();
115+ CBORGenerator g = cborGenerator (out );
116+ g .writeStartObject ();
117+ g .writeFieldName ("bar" );
118+ g .writeBoolean (true );
119+ g .writeEndObject ();
120+ g .close ();
121+
122+ byte [] doc = out .toByteArray ();
123+ // assume we use end marker for Object, so
124+ doc [doc .length - 2 ] = BYTE_UNDEFINED ;
125+
126+ CBORParser p = cborParser (f , doc );
127+ assertEquals (JsonToken .START_OBJECT , p .nextToken ());
128+ assertEquals (JsonToken .FIELD_NAME , p .nextToken ());
129+ assertEquals ("bar" , p .currentName ());
130+ assertEquals (JsonToken .VALUE_EMBEDDED_OBJECT , p .nextToken ());
131+ assertTrue (p .isUndefined ());
65132 assertEquals (JsonToken .END_OBJECT , p .nextToken ());
66133 assertNull (p .nextToken ());
67134 p .close ();
0 commit comments