11package  com .fasterxml .jackson .dataformat .ion .ionvalue ;
22
3- import  java .io .IOException ;
4- import  java .util .*;
5- 
6- import  com .amazon .ion .*;
3+ import  com .amazon .ion .IonSystem ;
4+ import  com .amazon .ion .IonValue ;
5+ import  com .amazon .ion .IonStruct ;
76import  com .amazon .ion .system .IonSystemBuilder ;
8- import  org . junit . jupiter . api . Test ;
9- 
10- import  com .fasterxml .jackson .annotation .* ;
7+ import  com . fasterxml . jackson . annotation . JsonAnyGetter ;
8+ import   com . fasterxml . jackson . annotation . JsonAnySetter ; 
9+ import  com .fasterxml .jackson .annotation .JsonProperty ;
1110import  com .fasterxml .jackson .databind .util .AccessPattern ;
1211import  com .fasterxml .jackson .dataformat .ion .IonObjectMapper ;
12+ import  com .fasterxml .jackson .dataformat .ion .IonParser ;
13+ 
14+ 
15+ import  java .io .IOException ;
16+ import  java .util .HashMap ;
17+ import  java .util .Map ;
18+ import  java .util .Objects ;
19+ 
20+ import  org .junit .jupiter .api .Test ;
1321
1422import  static  com .fasterxml .jackson .databind .PropertyNamingStrategies .SNAKE_CASE ;
1523import  static  org .junit .jupiter .api .Assertions .assertEquals ;
@@ -65,7 +73,7 @@ static class IonValueData extends Data<IonValue> {
6573    }
6674
6775    private  static  final  IonSystem  SYSTEM  = IonSystemBuilder .standard ().build ();
68-     private  static   final  IonValueMapper  ION_VALUE_MAPPER  = new  IonValueMapper (SYSTEM , SNAKE_CASE );
76+     private  final  IonValueMapper  ION_VALUE_MAPPER  = new  IonValueMapper (SYSTEM , SNAKE_CASE );
6977
7078    @ Test 
7179    public  void  shouldBeAbleToDeserialize () throws  Exception  {
@@ -92,23 +100,49 @@ public void shouldBeAbleToDeserializeIncludingNullList() throws Exception {
92100    }
93101
94102    @ Test 
95-     public  void  shouldBeAbleToDeserializeNullList () throws  Exception  {
96-         IonValue  ion  = ion ("{c:null.list}" );
97- 
98-         IonValueData  data  = ION_VALUE_MAPPER .readValue (ion , IonValueData .class );
103+     public  void  shouldBeAbleToDeserializeNullToIonNull () throws  Exception  {
104+         String  ion  = "{c:null}" ;
105+         verifyNullDeserialization (ion , SYSTEM .newNull ());
106+         ION_VALUE_MAPPER .disable (IonParser .Feature .READ_NULL_AS_IONVALUE );
107+         verifyNullDeserialization (ion , null );
108+     }
99109
100-         assertEquals (1 , data .getAllData ().size ());
101-         assertEquals (SYSTEM .newNullList (), data .getAllData ().get ("c" ));
110+     @ Test 
111+     public  void  shouldBeAbleToDeserializeNullList () throws  Exception  {
112+         String  ion  = "{c:null.list}" ;
113+         verifyNullDeserialization (ion , SYSTEM .newNullList ());
114+         ION_VALUE_MAPPER .disable (IonParser .Feature .READ_NULL_AS_IONVALUE );
115+         verifyNullDeserialization (ion , SYSTEM .newNullList ());
102116    }
103117
104118    @ Test 
105119    public  void  shouldBeAbleToDeserializeNullStruct () throws  Exception  {
106-         IonValue  ion  = ion ("{c:null.struct}" );
120+         String  ion  = "{c:null.struct}" ;
121+         verifyNullDeserialization (ion , SYSTEM .newNullStruct ());
122+         ION_VALUE_MAPPER .disable (IonParser .Feature .READ_NULL_AS_IONVALUE );
123+         verifyNullDeserialization (ion , SYSTEM .newNullStruct ());
124+     }
107125
108-         IonValueData  data  = ION_VALUE_MAPPER .readValue (ion , IonValueData .class );
126+     @ Test 
127+     public  void  shouldBeAbleToDeserializeNullSexp () throws  Exception  {
128+         String  ion  = "{c:null.sexp}" ;
129+         verifyNullDeserialization (ion , SYSTEM .newNullSexp ());
130+         ION_VALUE_MAPPER .disable (IonParser .Feature .READ_NULL_AS_IONVALUE );
131+         verifyNullDeserialization (ion , SYSTEM .newNullSexp ());
132+     }
133+ 
134+     private  void  verifyNullDeserialization (String  ionString , IonValue  expected ) throws  Exception  {
135+ 
136+         IonValueData  data  = ION_VALUE_MAPPER .readValue (ionString , IonValueData .class );
137+ 
138+         assertEquals (1 , data .getAllData ().size ());
139+         assertEquals (expected , data .getAllData ().get ("c" ));
140+ 
141+         IonValue  ion  = ion (ionString );
142+         data  = ION_VALUE_MAPPER .readValue (ion , IonValueData .class );
109143
110144        assertEquals (1 , data .getAllData ().size ());
111-         assertEquals (SYSTEM . newNullStruct () , data .getAllData ().get ("c" ));
145+         assertEquals (expected , data .getAllData ().get ("c" ));
112146    }
113147
114148    @ Test 
@@ -162,7 +196,17 @@ public void shouldBeAbleToSerializeAndDeserializeStringData() throws Exception {
162196
163197        IonValue  data  = ION_VALUE_MAPPER .writeValueAsIonValue (source );
164198        StringData  result  = ION_VALUE_MAPPER .parse (data , StringData .class );
199+         assertEquals (source , result );
200+     }
201+ 
202+     @ Test 
203+     public  void  shouldBeAbleToSerializeAndDeserializeStringDataAsString () throws  Exception  {
204+         StringData  source  = new  StringData ();
205+         source .put ("a" , "1" );
206+         source .put ("b" , null );
165207
208+         String  data  = ION_VALUE_MAPPER .writeValueAsString (source );
209+         StringData  result  = ION_VALUE_MAPPER .readValue (data , StringData .class );
166210        assertEquals (source , result );
167211    }
168212
0 commit comments