1616import org .apache .parquet .schema .LogicalTypeAnnotation ;
1717import org .apache .parquet .schema .MessageType ;
1818import org .apache .parquet .schema .PrimitiveType ;
19- import org .junit .Assert ;
2019import org .junit .Test ;
2120
2221import java .util .ArrayList ;
@@ -81,13 +80,11 @@ public void shouldSetMapFieldIfStringMapPassed() {
8180 inputMap .put ("b" , "456" );
8281
8382 DynamicMessage .Builder returnedBuilder = mapHandler .transformToProtoBuilder (builder , inputMap );
84- List <MapEntry > entries = (List <MapEntry >) returnedBuilder .getField (mapFieldDescriptor );
83+ List <DynamicMessage > entries = (List <DynamicMessage >) returnedBuilder .getField (mapFieldDescriptor );
8584
8685 assertEquals (2 , entries .size ());
87- assertEquals ("a" , entries .get (0 ).getAllFields ().values ().toArray ()[0 ]);
88- assertEquals ("123" , entries .get (0 ).getAllFields ().values ().toArray ()[1 ]);
89- assertEquals ("b" , entries .get (1 ).getAllFields ().values ().toArray ()[0 ]);
90- assertEquals ("456" , entries .get (1 ).getAllFields ().values ().toArray ()[1 ]);
86+ assertArrayEquals (Arrays .asList ("a" , "123" ).toArray (), entries .get (0 ).getAllFields ().values ().toArray ());
87+ assertArrayEquals (Arrays .asList ("b" , "456" ).toArray (), entries .get (1 ).getAllFields ().values ().toArray ());
9188 }
9289
9390 @ Test
@@ -111,28 +108,29 @@ public void shouldSetMapFieldIfArrayofObjectsHavingRowsWithStringFieldsPassed()
111108 inputRows .add (inputRow2 );
112109
113110 DynamicMessage .Builder returnedBuilder = mapHandler .transformToProtoBuilder (builder , inputRows .toArray ());
114- List <MapEntry > entries = (List <MapEntry >) returnedBuilder .getField (mapFieldDescriptor );
111+ List <DynamicMessage > entries = (List <DynamicMessage >) returnedBuilder .getField (mapFieldDescriptor );
115112
116113 assertEquals (2 , entries .size ());
117- assertEquals ("a" , entries .get (0 ).getAllFields ().values ().toArray ()[0 ]);
118- assertEquals ("123" , entries .get (0 ).getAllFields ().values ().toArray ()[1 ]);
119- assertEquals ("b" , entries .get (1 ).getAllFields ().values ().toArray ()[0 ]);
120- assertEquals ("456" , entries .get (1 ).getAllFields ().values ().toArray ()[1 ]);
114+ assertArrayEquals (Arrays .asList ("a" , "123" ).toArray (), entries .get (0 ).getAllFields ().values ().toArray ());
115+ assertArrayEquals (Arrays .asList ("b" , "456" ).toArray (), entries .get (1 ).getAllFields ().values ().toArray ());
121116 }
122117
123118 @ Test
124- public void shouldThrowExceptionIfRowsPassedAreNotOfArityTwo () {
125- Descriptors . FieldDescriptor mapFieldDescriptor = TestBookingLogMessage . getDescriptor (). findFieldByName ( "metadata" );
126- MapHandler mapHandler = new MapHandler ( mapFieldDescriptor );
127- DynamicMessage . Builder builder = DynamicMessage . newBuilder ( mapFieldDescriptor . getContainingType () );
119+ public void shouldHandleComplexTypeValuesForSerialization () throws InvalidProtocolBufferException {
120+ Row inputValue1 = Row . of ( "12345" , Row . of ( Arrays . asList ( "a" , "b" )) );
121+ Row inputValue2 = Row . of ( 1234123 , Row . of ( Arrays . asList ( "d" , "e" )) );
122+ Object input = Arrays . asList ( inputValue1 , inputValue2 ). toArray ( );
128123
129- ArrayList <Row > inputRows = new ArrayList <>();
124+ Descriptors .FieldDescriptor intMessageDescriptor = TestComplexMap .getDescriptor ().findFieldByName ("int_message" );
125+ DynamicMessage .Builder builder = DynamicMessage .newBuilder (TestComplexMap .getDescriptor ());
130126
131- Row inputRow = new Row (3 );
132- inputRows .add (inputRow );
133- IllegalArgumentException exception = Assert .assertThrows (IllegalArgumentException .class ,
134- () -> mapHandler .transformToProtoBuilder (builder , inputRows .toArray ()));
135- assertEquals ("Row: +I[null, null, null] of size: 3 cannot be converted to map" , exception .getMessage ());
127+ byte [] data = new MapHandler (intMessageDescriptor ).transformToProtoBuilder (builder , input ).build ().toByteArray ();
128+ TestComplexMap actualMsg = TestComplexMap .parseFrom (data );
129+ assertArrayEquals (Arrays .asList (12345L , 1234123L ).toArray (), actualMsg .getIntMessageMap ().keySet ().toArray ());
130+ TestComplexMap .IdMessage idMessage = (TestComplexMap .IdMessage ) actualMsg .getIntMessageMap ().values ().toArray ()[0 ];
131+ assertTrue (idMessage .getIdsList ().containsAll (Arrays .asList ("a" , "b" )));
132+ idMessage = (TestComplexMap .IdMessage ) actualMsg .getIntMessageMap ().values ().toArray ()[1 ];
133+ assertTrue (idMessage .getIdsList ().containsAll (Arrays .asList ("d" , "e" )));
136134 }
137135
138136 @ Test
@@ -158,12 +156,8 @@ public void shouldReturnArrayOfRowHavingFieldsSetAsInputMapAndOfSizeTwoForTransf
158156
159157 List <Object > outputValues = Arrays .asList ((Object []) mapHandler .transformFromPostProcessor (inputMap ));
160158
161- assertEquals ("a" , ((Row ) outputValues .get (0 )).getField (0 ));
162- assertEquals ("123" , ((Row ) outputValues .get (0 )).getField (1 ));
163- assertEquals (2 , ((Row ) outputValues .get (0 )).getArity ());
164- assertEquals ("b" , ((Row ) outputValues .get (1 )).getField (0 ));
165- assertEquals ("456" , ((Row ) outputValues .get (1 )).getField (1 ));
166- assertEquals (2 , ((Row ) outputValues .get (1 )).getArity ());
159+ assertEquals (Row .of ("a" , "123" ), outputValues .get (0 ));
160+ assertEquals (Row .of ("b" , "456" ), outputValues .get (1 ));
167161 }
168162
169163 @ Test
@@ -210,12 +204,8 @@ public void shouldReturnArrayOfRowHavingFieldsSetAsInputMapAndOfSizeTwoForTransf
210204
211205 List <Object > outputValues = Arrays .asList ((Object []) mapHandler .transformFromProto (dynamicMessage .getField (mapFieldDescriptor )));
212206
213- assertEquals ("a" , ((Row ) outputValues .get (0 )).getField (0 ));
214- assertEquals ("123" , ((Row ) outputValues .get (0 )).getField (1 ));
215- assertEquals (2 , ((Row ) outputValues .get (0 )).getArity ());
216- assertEquals ("b" , ((Row ) outputValues .get (1 )).getField (0 ));
217- assertEquals ("456" , ((Row ) outputValues .get (1 )).getField (1 ));
218- assertEquals (2 , ((Row ) outputValues .get (1 )).getArity ());
207+ assertEquals (Row .of ("a" , "123" ), outputValues .get (0 ));
208+ assertEquals (Row .of ("b" , "456" ), outputValues .get (1 ));
219209 }
220210
221211 @ Test
@@ -247,16 +237,11 @@ public void shouldReturnArrayOfRowsHavingFieldsSetAsInputMapHavingComplexDataFie
247237
248238 List <Object > outputValues = Arrays .asList ((Object []) mapHandler .transformFromProto (dynamicMessage .getField (mapFieldDescriptor )));
249239
250- assertEquals (1 , ((Row ) outputValues .get (0 )).getField (0 ));
251- assertEquals ("123" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (0 ));
252- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (1 ));
253- assertEquals ("abc" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (2 ));
254- assertEquals (2 , ((Row ) outputValues .get (0 )).getArity ());
255- assertEquals (2 , ((Row ) outputValues .get (1 )).getField (0 ));
256- assertEquals ("456" , ((Row ) ((Row ) outputValues .get (1 )).getField (1 )).getField (0 ));
257- assertEquals ("" , ((Row ) ((Row ) outputValues .get (1 )).getField (1 )).getField (1 ));
258- assertEquals ("efg" , ((Row ) ((Row ) outputValues .get (1 )).getField (1 )).getField (2 ));
259- assertEquals (2 , ((Row ) outputValues .get (1 )).getArity ());
240+ Row mapEntry1 = Row .of (1 , Row .of ("123" , "" , "abc" ));
241+ Row mapEntry2 = Row .of (2 , Row .of ("456" , "" , "efg" ));
242+
243+ assertEquals (mapEntry1 , outputValues .get (0 ));
244+ assertEquals (mapEntry2 , outputValues .get (1 ));
260245 }
261246
262247 @ Test
@@ -271,11 +256,8 @@ public void shouldReturnArrayOfRowsHavingFieldsSetAsInputMapHavingComplexDataFie
271256
272257 List <Object > outputValues = Arrays .asList ((Object []) mapHandler .transformFromProto (dynamicMessage .getField (mapFieldDescriptor )));
273258
274- assertEquals (0 , ((Row ) outputValues .get (0 )).getField (0 ));
275- assertEquals ("123" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (0 ));
276- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (1 ));
277- assertEquals ("abc" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (2 ));
278- assertEquals (2 , ((Row ) outputValues .get (0 )).getArity ());
259+ Row expected = Row .of (0 , Row .of ("123" , "" , "abc" ));
260+ assertEquals (expected , outputValues .get (0 ));
279261 }
280262
281263 @ Test
@@ -290,11 +272,9 @@ public void shouldReturnArrayOfRowsHavingFieldsSetAsInputMapHavingComplexDataFie
290272
291273 List <Object > outputValues = Arrays .asList ((Object []) mapHandler .transformFromProto (dynamicMessage .getField (mapFieldDescriptor )));
292274
293- assertEquals (1 , ((Row ) outputValues .get (0 )).getField (0 ));
294- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (0 ));
295- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (1 ));
296- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (2 ));
297- assertEquals (2 , ((Row ) outputValues .get (0 )).getArity ());
275+ Row expected = Row .of (1 , Row .of ("" , "" , "" ));
276+
277+ assertEquals (expected , outputValues .get (0 ));
298278 }
299279
300280 @ Test
@@ -309,11 +289,9 @@ public void shouldReturnArrayOfRowsHavingFieldsSetAsInputMapHavingComplexDataFie
309289
310290 List <Object > outputValues = Arrays .asList ((Object []) mapHandler .transformFromProto (dynamicMessage .getField (mapFieldDescriptor )));
311291
312- assertEquals (0 , ((Row ) outputValues .get (0 )).getField (0 ));
313- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (0 ));
314- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (1 ));
315- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (2 ));
316- assertEquals (2 , ((Row ) outputValues .get (0 )).getArity ());
292+ Row expected = Row .of (0 , Row .of ("" , "" , "" ));
293+
294+ assertEquals (expected , outputValues .get (0 ));
317295 }
318296
319297 @ Test
@@ -328,11 +306,8 @@ public void shouldReturnArrayOfRowsHavingFieldsSetAsInputMapHavingComplexDataFie
328306
329307 List <Object > outputValues = Arrays .asList ((Object []) mapHandler .transformFromProto (dynamicMessage .getField (mapFieldDescriptor )));
330308
331- assertEquals (0 , ((Row ) outputValues .get (0 )).getField (0 ));
332- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (0 ));
333- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (1 ));
334- assertEquals ("" , ((Row ) ((Row ) outputValues .get (0 )).getField (1 )).getField (2 ));
335- assertEquals (2 , ((Row ) outputValues .get (0 )).getArity ());
309+ Row expected = Row .of (0 , Row .of ("" , "" , "" ));
310+ assertEquals (expected , outputValues .get (0 ));
336311 }
337312
338313 @ Test
0 commit comments