@ -2677,13 +2677,63 @@ public class NanoTest extends TestCase {
assertHasWireData ( message , false ) ;
}
public void testNullRepeatedFields ( ) throws Exception {
// Check that serialization after explicitly setting a repeated field
// to null doesn't NPE.
TestAllTypesNano message = new TestAllTypesNano ( ) ;
message . repeatedInt32 = null ;
MessageNano . toByteArray ( message ) ; // should not NPE
message . toString ( ) ; // should not NPE
message = new TestAllTypesNano ( ) ;
message . repeatedNestedEnum = null ;
MessageNano . toByteArray ( message ) ; // should not NPE
message . toString ( ) ; // should not NPE
message = new TestAllTypesNano ( ) ;
message . repeatedBytes = null ;
MessageNano . toByteArray ( message ) ; // should not NPE
message . toString ( ) ; // should not NPE
message = new TestAllTypesNano ( ) ;
message . repeatedNestedMessage = null ;
MessageNano . toByteArray ( message ) ; // should not NPE
message . toString ( ) ; // should not NPE
// Create a second message to merge into message.
TestAllTypesNano secondMessage = new TestAllTypesNano ( ) ;
TestAllTypesNano . NestedMessage nested =
new TestAllTypesNano . NestedMessage ( ) ;
nested . bb = 55 ;
secondMessage . repeatedNestedMessage =
new TestAllTypesNano . NestedMessage [ ] { nested } ;
// Should not NPE
message . mergeFrom ( CodedInputByteBufferNano . newInstance (
MessageNano . toByteArray ( secondMessage ) ) ) ;
assertEquals ( 55 , message . repeatedNestedMessage [ 0 ] . bb ) ;
}
private void assertHasWireData ( MessageNano message , boolean expected ) {
int wireLength = MessageNano . toByteArray ( message ) . length ;
byte [ ] bytes = MessageNano . toByteArray ( message ) ;
int wireLength = bytes . length ;
if ( expected ) {
assertFalse ( wireLength = = 0 ) ;
} else {
assertEquals ( 0 , wireLength ) ;
if ( wireLength ! = 0 ) {
fail ( "Expected no wire data for message \n" + message
+ "\nBut got:\n"
+ hexDump ( bytes ) ) ;
}
}
}
private static String hexDump ( byte [ ] bytes ) {
StringBuilder sb = new StringBuilder ( ) ;
for ( byte b : bytes ) {
sb . append ( String . format ( "%02x " , b ) ) ;
}
return sb . toString ( ) ;
}
private < T > List < T > list ( T first , T . . . remaining ) {