@ -176,6 +176,8 @@ string GetDefaultValue(FieldDescriptor::Type type) {
case FieldDescriptor : : TYPE_BYTES :
case FieldDescriptor : : TYPE_MESSAGE :
return delim ( " " ) ;
default :
return " " ;
}
return " " ;
}
@ -208,6 +210,8 @@ string GetNonDefaultValue(FieldDescriptor::Type type) {
return delim ( " a " ) ;
case FieldDescriptor : : TYPE_MESSAGE :
return delim ( cat ( tag ( 1 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1234 ) ) ) ;
default :
return " " ;
}
return " " ;
}
@ -252,12 +256,11 @@ const FieldDescriptor* GetFieldForType(FieldDescriptor::Type type,
return nullptr ;
}
const FieldDescriptor * GetFieldForMapType (
FieldDescriptor : : Type key_type ,
FieldDescriptor : : Type value_type ,
bool is_proto3 ) {
const Descriptor * d = is_proto3 ?
TestAllTypesProto3 ( ) . GetDescriptor ( ) : TestAllTypesProto2 ( ) . GetDescriptor ( ) ;
const FieldDescriptor * GetFieldForMapType ( FieldDescriptor : : Type key_type ,
FieldDescriptor : : Type value_type ,
bool is_proto3 ) {
const Descriptor * d = is_proto3 ? TestAllTypesProto3 ( ) . GetDescriptor ( )
: TestAllTypesProto2 ( ) . GetDescriptor ( ) ;
for ( int i = 0 ; i < d - > field_count ( ) ; i + + ) {
const FieldDescriptor * f = d - > field ( i ) ;
if ( f - > is_map ( ) ) {
@ -272,18 +275,17 @@ const FieldDescriptor* GetFieldForMapType(
const string proto_string = is_proto3 ? " Proto3 " : " Proto2 " ;
GOOGLE_LOG ( FATAL ) < < " Couldn't find map field with type: "
< < FieldDescriptor : : TypeName ( key_type )
< < " and "
< < FieldDescriptor : : TypeName ( key_type )
< < " for "
< < FieldDescriptor : : TypeName ( key_type ) < < " and "
< < FieldDescriptor : : TypeName ( key_type ) < < " for "
< < proto_string . c_str ( ) ;
return nullptr ;
}
const FieldDescriptor * GetFieldForOneofType (
FieldDescriptor : : Type type , bool is_proto3 , bool exclusive = false ) {
const Descriptor * d = is_proto3 ?
TestAllTypesProto3 ( ) . GetDescriptor ( ) : TestAllTypesProto2 ( ) . GetDescriptor ( ) ;
const FieldDescriptor * GetFieldForOneofType ( FieldDescriptor : : Type type ,
bool is_proto3 ,
bool exclusive = false ) {
const Descriptor * d = is_proto3 ? TestAllTypesProto3 ( ) . GetDescriptor ( )
: TestAllTypesProto2 ( ) . GetDescriptor ( ) ;
for ( int i = 0 ; i < d - > field_count ( ) ; i + + ) {
const FieldDescriptor * f = d - > field ( i ) ;
if ( f - > containing_oneof ( ) & & ( ( f - > type ( ) = = type ) ^ exclusive ) ) {
@ -293,8 +295,7 @@ const FieldDescriptor* GetFieldForOneofType(
const string proto_string = is_proto3 ? " Proto3 " : " Proto2 " ;
GOOGLE_LOG ( FATAL ) < < " Couldn't find oneof field with type: "
< < FieldDescriptor : : TypeName ( type )
< < " for "
< < FieldDescriptor : : TypeName ( type ) < < " for "
< < proto_string . c_str ( ) ;
return nullptr ;
}
@ -764,9 +765,9 @@ void BinaryAndJsonConformanceSuite::TestValidDataForType(
string proto = cat ( tag ( field - > number ( ) , wire_type ) , values [ i ] . first ) ;
// In proto3, default primitive fields should not be encoded.
string expected_proto =
is_proto3 & & IsProto3Default ( field - > type ( ) , values [ i ] . second ) ?
" " :
cat ( tag ( field - > number ( ) , wire_type ) , values [ i ] . second ) ;
is_proto3 & & IsProto3Default ( field - > type ( ) , values [ i ] . second )
? " "
: cat ( tag ( field - > number ( ) , wire_type ) , values [ i ] . second ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( expected_proto ) ;
string text = test_message - > DebugString ( ) ;
@ -774,10 +775,8 @@ void BinaryAndJsonConformanceSuite::TestValidDataForType(
RunValidProtobufTest ( StrCat ( " ValidDataScalar " , type_name , " [ " , i , " ] " ) ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidBinaryProtobufTest (
StrCat ( " ValidDataScalarBinary " , type_name , " [ " , i , " ] " ) ,
RECOMMENDED ,
proto ,
expected_proto , is_proto3 ) ;
StrCat ( " ValidDataScalarBinary " , type_name , " [ " , i , " ] " ) , RECOMMENDED ,
proto , expected_proto , is_proto3 ) ;
}
// Test repeated data for singular fields.
@ -947,25 +946,21 @@ void BinaryAndJsonConformanceSuite::TestValidDataForRepeatedScalarMessage() {
}
void BinaryAndJsonConformanceSuite : : TestValidDataForMapType (
FieldDescriptor : : Type key_type ,
FieldDescriptor : : Type value_type ) {
FieldDescriptor : : Type key_type , FieldDescriptor : : Type value_type ) {
const string key_type_name =
UpperCase ( string ( " . " ) + FieldDescriptor : : TypeName ( key_type ) ) ;
const string value_type_name =
UpperCase ( string ( " . " ) + FieldDescriptor : : TypeName ( value_type ) ) ;
WireFormatLite : : WireType key_wire_type =
WireFormatLite : : WireTypeForFieldType (
static_cast < WireFormatLite : : FieldType > ( key_type ) ) ;
WireFormatLite : : WireType key_wire_type = WireFormatLite : : WireTypeForFieldType (
static_cast < WireFormatLite : : FieldType > ( key_type ) ) ;
WireFormatLite : : WireType value_wire_type =
WireFormatLite : : WireTypeForFieldType (
static_cast < WireFormatLite : : FieldType > ( value_type ) ) ;
string key1_data =
cat ( tag ( 1 , key_wire_type ) , GetDefaultValue ( key_type ) ) ;
string key1_data = cat ( tag ( 1 , key_wire_type ) , GetDefaultValue ( key_type ) ) ;
string value1_data =
cat ( tag ( 2 , value_wire_type ) , GetDefaultValue ( value_type ) ) ;
string key2_data =
cat ( tag ( 1 , key_wire_type ) , GetNonDefaultValue ( key_type ) ) ;
string key2_data = cat ( tag ( 1 , key_wire_type ) , GetNonDefaultValue ( key_type ) ) ;
string value2_data =
cat ( tag ( 2 , value_wire_type ) , GetNonDefaultValue ( value_type ) ) ;
@ -975,118 +970,97 @@ void BinaryAndJsonConformanceSuite::TestValidDataForMapType(
{
// Tests map with default key and value.
string proto = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key1_data , value1_data ) ) ) ;
string proto =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key1_data , value1_data ) ) ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( proto ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
StrCat ( " ValidDataMap " ,
key_type_name ,
value_type_name ,
" .Default " ) ,
StrCat ( " ValidDataMap " , key_type_name , value_type_name , " .Default " ) ,
REQUIRED , proto , text , is_proto3 ) ;
}
{
// Tests map with missing default key and value.
string proto = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( " " ) ) ;
string proto =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( " " ) ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( proto ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
StrCat ( " ValidDataMap " ,
key_type_name ,
value_type_name ,
" .MissingDefault " ) ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidProtobufTest ( StrCat ( " ValidDataMap " , key_type_name ,
value_type_name , " .MissingDefault " ) ,
REQUIRED , proto , text , is_proto3 ) ;
}
{
// Tests map with non-default key and value.
string proto = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key2_data , value2_data ) ) ) ;
string proto =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key2_data , value2_data ) ) ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( proto ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
StrCat ( " ValidDataMap " ,
key_type_name ,
value_type_name ,
" .NonDefault " ) ,
StrCat ( " ValidDataMap " , key_type_name , value_type_name , " .NonDefault " ) ,
REQUIRED , proto , text , is_proto3 ) ;
}
{
// Tests map with unordered key and value.
string proto = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( value2_data , key2_data ) ) ) ;
string proto =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( value2_data , key2_data ) ) ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( proto ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
StrCat ( " ValidDataMap " ,
key_type_name ,
value_type_name ,
" .Unordered " ) ,
StrCat ( " ValidDataMap " , key_type_name , value_type_name , " .Unordered " ) ,
REQUIRED , proto , text , is_proto3 ) ;
}
{
// Tests map with duplicate key.
string proto1 = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key2_data , value1_data ) ) ) ;
string proto2 = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key2_data , value2_data ) ) ) ;
string proto1 =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key2_data , value1_data ) ) ) ;
string proto2 =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key2_data , value2_data ) ) ) ;
string proto = cat ( proto1 , proto2 ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( proto2 ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
StrCat ( " ValidDataMap " ,
key_type_name ,
value_type_name ,
" .DuplicateKey " ) ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidProtobufTest ( StrCat ( " ValidDataMap " , key_type_name ,
value_type_name , " .DuplicateKey " ) ,
REQUIRED , proto , text , is_proto3 ) ;
}
{
// Tests map with duplicate key in map entry.
string proto = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key1_data , key2_data , value2_data ) ) ) ;
string proto =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key1_data , key2_data , value2_data ) ) ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( proto ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
StrCat ( " ValidDataMap " ,
key_type_name ,
value_type_name ,
" .DuplicateKeyInMapEntry " ) ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidProtobufTest ( StrCat ( " ValidDataMap " , key_type_name ,
value_type_name , " .DuplicateKeyInMapEntry " ) ,
REQUIRED , proto , text , is_proto3 ) ;
}
{
// Tests map with duplicate value in map entry.
string proto = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key2_data , value1_data , value2_data ) ) ) ;
string proto =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key2_data , value1_data , value2_data ) ) ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( proto ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
StrCat ( " ValidDataMap " ,
key_type_name ,
value_type_name ,
" .DuplicateValueInMapEntry " ) ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidProtobufTest ( StrCat ( " ValidDataMap " , key_type_name ,
value_type_name , " .DuplicateValueInMapEntry " ) ,
REQUIRED , proto , text , is_proto3 ) ;
}
}
}
@ -1096,7 +1070,8 @@ void BinaryAndJsonConformanceSuite::TestOverwriteMessageValueMap() {
cat ( tag ( 1 , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) , delim ( " " ) ) ;
string field1_data = cat ( tag ( 1 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1 ) ) ;
string field2_data = cat ( tag ( 2 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1 ) ) ;
string field31_data = cat ( tag ( 31 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1 ) ) ;
string field31_data =
cat ( tag ( 31 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1 ) ) ;
string submsg1_data = delim ( cat ( field1_data , field31_data ) ) ;
string submsg2_data = delim ( cat ( field2_data , field31_data ) ) ;
string value1_data =
@ -1109,24 +1084,21 @@ void BinaryAndJsonConformanceSuite::TestOverwriteMessageValueMap() {
submsg2_data ) ) ) ;
for ( int is_proto3 = 0 ; is_proto3 < 2 ; is_proto3 + + ) {
const FieldDescriptor * field =
GetFieldForMapType (
FieldDescriptor : : TYPE_STRING ,
FieldDescriptor : : TYPE_MESSAGE , is_proto3 ) ;
string proto1 = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key_data , value1_data ) ) ) ;
string proto2 = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key_data , value2_data ) ) ) ;
const FieldDescriptor * field = GetFieldForMapType (
FieldDescriptor : : TYPE_STRING , FieldDescriptor : : TYPE_MESSAGE , is_proto3 ) ;
string proto1 =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key_data , value1_data ) ) ) ;
string proto2 =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( key_data , value2_data ) ) ) ;
string proto = cat ( proto1 , proto2 ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( proto2 ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
" ValidDataMap.STRING.MESSAGE.MergeValue " ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidProtobufTest ( " ValidDataMap.STRING.MESSAGE.MergeValue " , REQUIRED ,
proto , text , is_proto3 ) ;
}
}
@ -1134,9 +1106,8 @@ void BinaryAndJsonConformanceSuite::TestValidDataForOneofType(
FieldDescriptor : : Type type ) {
const string type_name =
UpperCase ( string ( " . " ) + FieldDescriptor : : TypeName ( type ) ) ;
WireFormatLite : : WireType wire_type =
WireFormatLite : : WireTypeForFieldType (
static_cast < WireFormatLite : : FieldType > ( type ) ) ;
WireFormatLite : : WireType wire_type = WireFormatLite : : WireTypeForFieldType (
static_cast < WireFormatLite : : FieldType > ( type ) ) ;
for ( int is_proto3 = 0 ; is_proto3 < 2 ; is_proto3 + + ) {
const FieldDescriptor * field = GetFieldForOneofType ( type , is_proto3 ) ;
@ -1167,8 +1138,8 @@ void BinaryAndJsonConformanceSuite::TestValidDataForOneofType(
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
StrCat ( " ValidDataOneof " , type_name , " .NonDefaultValue " ) ,
REQUIRED , proto , text , is_proto3 ) ;
StrCat ( " ValidDataOneof " , type_name , " .NonDefaultValue " ) , REQUIRED ,
proto , text , is_proto3 ) ;
RunValidBinaryProtobufTest (
StrCat ( " ValidDataOneofBinary " , type_name , " .NonDefaultValue " ) ,
RECOMMENDED , proto , proto , is_proto3 ) ;
@ -1185,10 +1156,9 @@ void BinaryAndJsonConformanceSuite::TestValidDataForOneofType(
RunValidProtobufTest (
StrCat ( " ValidDataOneof " , type_name , " .MultipleValuesForSameField " ) ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidBinaryProtobufTest (
StrCat ( " ValidDataOneofBinary " , type_name ,
" .MultipleValuesForSameField " ) ,
RECOMMENDED , proto , expected_proto , is_proto3 ) ;
RunValidBinaryProtobufTest ( StrCat ( " ValidDataOneofBinary " , type_name ,
" .MultipleValuesForSameField " ) ,
RECOMMENDED , proto , expected_proto , is_proto3 ) ;
}
{
@ -1209,14 +1179,12 @@ void BinaryAndJsonConformanceSuite::TestValidDataForOneofType(
test_message - > MergeFromString ( expected_proto ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
StrCat ( " ValidDataOneof " , type_name ,
" .MultipleValuesForDifferentField " ) ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidBinaryProtobufTest (
StrCat ( " ValidDataOneofBinary " , type_name ,
" .MultipleValuesForDifferentField " ) ,
RECOMMENDED , proto , expected_proto , is_proto3 ) ;
RunValidProtobufTest ( StrCat ( " ValidDataOneof " , type_name ,
" .MultipleValuesForDifferentField " ) ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidBinaryProtobufTest ( StrCat ( " ValidDataOneofBinary " , type_name ,
" .MultipleValuesForDifferentField " ) ,
RECOMMENDED , proto , expected_proto , is_proto3 ) ;
}
}
}
@ -1225,43 +1193,39 @@ void BinaryAndJsonConformanceSuite::TestMergeOneofMessage() {
string field1_data = cat ( tag ( 1 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1 ) ) ;
string field2a_data = cat ( tag ( 2 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1 ) ) ;
string field2b_data = cat ( tag ( 2 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1 ) ) ;
string field89_data = cat ( tag ( 89 , WireFormatLite : : WIRETYPE_VARINT ) ,
varint ( 1 ) ) ;
string field89_data =
cat ( tag ( 89 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1 ) ) ;
string submsg1_data =
cat ( tag ( 2 , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( field1_data , field2a_data , field89_data ) ) ) ;
string submsg2_data =
string submsg2_data = cat ( tag ( 2 , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( field2b_data , field89_data ) ) ) ;
string merged_data =
cat ( tag ( 2 , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( field2b_data , field89_data ) ) ) ;
string merged_data = cat ( tag ( 2 , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( cat ( field1_data , field2b_data ,
field89_data , field89_data ) ) ) ;
delim ( cat ( field1_data , field2b_data , field89_data , field89_data ) ) ) ;
for ( int is_proto3 = 0 ; is_proto3 < 2 ; is_proto3 + + ) {
const FieldDescriptor * field =
GetFieldForOneofType ( FieldDescriptor : : TYPE_MESSAGE , is_proto3 ) ;
string proto1 = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( submsg1_data ) ) ;
string proto2 = cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( submsg2_data ) ) ;
string proto1 =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( submsg1_data ) ) ;
string proto2 =
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( submsg2_data ) ) ;
string proto = cat ( proto1 , proto2 ) ;
string expected_proto =
cat ( tag ( field - > number ( ) ,
WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( merged_data ) ) ;
cat ( tag ( field - > number ( ) , WireFormatLite : : WIRETYPE_LENGTH_DELIMITED ) ,
delim ( merged_data ) ) ;
std : : unique_ptr < Message > test_message = NewTestMessage ( is_proto3 ) ;
test_message - > MergeFromString ( expected_proto ) ;
string text = test_message - > DebugString ( ) ;
RunValidProtobufTest (
" ValidDataOneof.MESSAGE.Merge " ,
REQUIRED , proto , text , is_proto3 ) ;
RunValidBinaryProtobufTest (
" ValidDataOneofBinary.MESSAGE.Merge " ,
RECOMMENDED , proto , expected_proto , is_proto3 ) ;
RunValidProtobufTest ( " ValidDataOneof.MESSAGE.Merge " , REQUIRED , proto , text ,
is_proto3 ) ;
RunValidBinaryProtobufTest ( " ValidDataOneofBinary.MESSAGE.Merge " ,
RECOMMENDED , proto , expected_proto , is_proto3 ) ;
}
}
@ -1359,103 +1323,124 @@ void BinaryAndJsonConformanceSuite::RunSuiteImpl() {
int32 kInt32Min = - 2147483648 ;
uint32 kUint32Max = 4294967295UL ;
TestValidDataForType ( FieldDescriptor : : TYPE_DOUBLE , {
{ dbl ( 0 ) , dbl ( 0 ) } ,
{ dbl ( 0.1 ) , dbl ( 0.1 ) } ,
{ dbl ( 1.7976931348623157e+308 ) , dbl ( 1.7976931348623157e+308 ) } ,
{ dbl ( 2.22507385850720138309e-308 ) , dbl ( 2.22507385850720138309e-308 ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_FLOAT , {
{ flt ( 0 ) , flt ( 0 ) } ,
{ flt ( 0.1 ) , flt ( 0.1 ) } ,
{ flt ( 1.00000075e-36 ) , flt ( 1.00000075e-36 ) } ,
{ flt ( 3.402823e+38 ) , flt ( 3.402823e+38 ) } , // 3.40282347e+38
{ flt ( 1.17549435e-38 f ) , flt ( 1.17549435e-38 ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_INT64 , {
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 12345 ) , varint ( 12345 ) } ,
{ varint ( kInt64Max ) , varint ( kInt64Max ) } ,
{ varint ( kInt64Min ) , varint ( kInt64Min ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_UINT64 , {
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 12345 ) , varint ( 12345 ) } ,
{ varint ( kUint64Max ) , varint ( kUint64Max ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_INT32 , {
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 12345 ) , varint ( 12345 ) } ,
{ longvarint ( 12345 , 2 ) , varint ( 12345 ) } ,
{ longvarint ( 12345 , 7 ) , varint ( 12345 ) } ,
{ varint ( kInt32Max ) , varint ( kInt32Max ) } ,
{ varint ( kInt32Min ) , varint ( kInt32Min ) } ,
{ varint ( 1LL < < 33 ) , varint ( 0 ) } ,
{ varint ( ( 1LL < < 33 ) - 1 ) , varint ( - 1 ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_UINT32 , {
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 12345 ) , varint ( 12345 ) } ,
{ longvarint ( 12345 , 2 ) , varint ( 12345 ) } ,
{ longvarint ( 12345 , 7 ) , varint ( 12345 ) } ,
{ varint ( kUint32Max ) , varint ( kUint32Max ) } , // UINT32_MAX
{ varint ( 1LL < < 33 ) , varint ( 0 ) } ,
{ varint ( ( 1LL < < 33 ) - 1 ) , varint ( ( 1LL < < 32 ) - 1 ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_FIXED64 , {
{ u64 ( 0 ) , u64 ( 0 ) } ,
{ u64 ( 12345 ) , u64 ( 12345 ) } ,
{ u64 ( kUint64Max ) , u64 ( kUint64Max ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_FIXED32 , {
{ u32 ( 0 ) , u32 ( 0 ) } ,
{ u32 ( 12345 ) , u32 ( 12345 ) } ,
{ u32 ( kUint32Max ) , u32 ( kUint32Max ) } , // UINT32_MAX
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_SFIXED64 , {
{ u64 ( 0 ) , u64 ( 0 ) } ,
{ u64 ( 12345 ) , u64 ( 12345 ) } ,
{ u64 ( kInt64Max ) , u64 ( kInt64Max ) } ,
{ u64 ( kInt64Min ) , u64 ( kInt64Min ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_SFIXED32 , {
{ u32 ( 0 ) , u32 ( 0 ) } ,
{ u32 ( 12345 ) , u32 ( 12345 ) } ,
{ u32 ( kInt32Max ) , u32 ( kInt32Max ) } ,
{ u32 ( kInt32Min ) , u32 ( kInt32Min ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_BOOL , {
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 1 ) , varint ( 1 ) } ,
{ varint ( 12345678 ) , varint ( 1 ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_SINT32 , {
{ zz32 ( 0 ) , zz32 ( 0 ) } ,
{ zz32 ( 12345 ) , zz32 ( 12345 ) } ,
{ zz32 ( kInt32Max ) , zz32 ( kInt32Max ) } ,
{ zz32 ( kInt32Min ) , zz32 ( kInt32Min ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_SINT64 , {
{ zz64 ( 0 ) , zz64 ( 0 ) } ,
{ zz64 ( 12345 ) , zz64 ( 12345 ) } ,
{ zz64 ( kInt64Max ) , zz64 ( kInt64Max ) } ,
{ zz64 ( kInt64Min ) , zz64 ( kInt64Min ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_STRING , {
{ delim ( " " ) , delim ( " " ) } ,
{ delim ( " Hello world! " ) , delim ( " Hello world! " ) } ,
{ delim ( " \' \" \ ? \\ \a \b \f \n \r \t \v " ) ,
delim ( " \' \" \ ? \\ \a \b \f \n \r \t \v " ) } , // escape
{ delim ( " 谷歌 " ) , delim ( " 谷歌 " ) } , // Google in Chinese
{ delim ( " \u8C37 \u6B4C " ) , delim ( " 谷歌 " ) } , // unicode escape
{ delim ( " \u8c37 \u6b4c " ) , delim ( " 谷歌 " ) } , // lowercase unicode
{ delim ( " \xF0 \x9F \x98 \x81 " ) , delim ( " \xF0 \x9F \x98 \x81 " ) } , // emoji: 😁
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_BYTES , {
{ delim ( " " ) , delim ( " " ) } ,
{ delim ( " \x01 \x02 " ) , delim ( " \x01 \x02 " ) } ,
{ delim ( " \xfb " ) , delim ( " \xfb " ) } ,
} ) ;
TestValidDataForType (
FieldDescriptor : : TYPE_DOUBLE ,
{
{ dbl ( 0 ) , dbl ( 0 ) } ,
{ dbl ( 0.1 ) , dbl ( 0.1 ) } ,
{ dbl ( 1.7976931348623157e+308 ) , dbl ( 1.7976931348623157e+308 ) } ,
{ dbl ( 2.22507385850720138309e-308 ) , dbl ( 2.22507385850720138309e-308 ) } ,
} ) ;
TestValidDataForType (
FieldDescriptor : : TYPE_FLOAT ,
{
{ flt ( 0 ) , flt ( 0 ) } ,
{ flt ( 0.1 ) , flt ( 0.1 ) } ,
{ flt ( 1.00000075e-36 ) , flt ( 1.00000075e-36 ) } ,
{ flt ( 3.402823e+38 ) , flt ( 3.402823e+38 ) } , // 3.40282347e+38
{ flt ( 1.17549435e-38 f ) , flt ( 1.17549435e-38 ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_INT64 ,
{
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 12345 ) , varint ( 12345 ) } ,
{ varint ( kInt64Max ) , varint ( kInt64Max ) } ,
{ varint ( kInt64Min ) , varint ( kInt64Min ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_UINT64 ,
{
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 12345 ) , varint ( 12345 ) } ,
{ varint ( kUint64Max ) , varint ( kUint64Max ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_INT32 ,
{
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 12345 ) , varint ( 12345 ) } ,
{ longvarint ( 12345 , 2 ) , varint ( 12345 ) } ,
{ longvarint ( 12345 , 7 ) , varint ( 12345 ) } ,
{ varint ( kInt32Max ) , varint ( kInt32Max ) } ,
{ varint ( kInt32Min ) , varint ( kInt32Min ) } ,
{ varint ( 1LL < < 33 ) , varint ( 0 ) } ,
{ varint ( ( 1LL < < 33 ) - 1 ) , varint ( - 1 ) } ,
} ) ;
TestValidDataForType (
FieldDescriptor : : TYPE_UINT32 ,
{
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 12345 ) , varint ( 12345 ) } ,
{ longvarint ( 12345 , 2 ) , varint ( 12345 ) } ,
{ longvarint ( 12345 , 7 ) , varint ( 12345 ) } ,
{ varint ( kUint32Max ) , varint ( kUint32Max ) } , // UINT32_MAX
{ varint ( 1LL < < 33 ) , varint ( 0 ) } ,
{ varint ( ( 1LL < < 33 ) - 1 ) , varint ( ( 1LL < < 32 ) - 1 ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_FIXED64 ,
{
{ u64 ( 0 ) , u64 ( 0 ) } ,
{ u64 ( 12345 ) , u64 ( 12345 ) } ,
{ u64 ( kUint64Max ) , u64 ( kUint64Max ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_FIXED32 ,
{
{ u32 ( 0 ) , u32 ( 0 ) } ,
{ u32 ( 12345 ) , u32 ( 12345 ) } ,
{ u32 ( kUint32Max ) , u32 ( kUint32Max ) } , // UINT32_MAX
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_SFIXED64 ,
{
{ u64 ( 0 ) , u64 ( 0 ) } ,
{ u64 ( 12345 ) , u64 ( 12345 ) } ,
{ u64 ( kInt64Max ) , u64 ( kInt64Max ) } ,
{ u64 ( kInt64Min ) , u64 ( kInt64Min ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_SFIXED32 ,
{
{ u32 ( 0 ) , u32 ( 0 ) } ,
{ u32 ( 12345 ) , u32 ( 12345 ) } ,
{ u32 ( kInt32Max ) , u32 ( kInt32Max ) } ,
{ u32 ( kInt32Min ) , u32 ( kInt32Min ) } ,
} ) ;
// Bools should be serialized as 0 for false and 1 for true. Parsers should
// also interpret any nonzero value as true.
TestValidDataForType ( FieldDescriptor : : TYPE_BOOL ,
{
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 1 ) , varint ( 1 ) } ,
{ varint ( 12345678 ) , varint ( 1 ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_SINT32 ,
{
{ zz32 ( 0 ) , zz32 ( 0 ) } ,
{ zz32 ( 12345 ) , zz32 ( 12345 ) } ,
{ zz32 ( kInt32Max ) , zz32 ( kInt32Max ) } ,
{ zz32 ( kInt32Min ) , zz32 ( kInt32Min ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_SINT64 ,
{
{ zz64 ( 0 ) , zz64 ( 0 ) } ,
{ zz64 ( 12345 ) , zz64 ( 12345 ) } ,
{ zz64 ( kInt64Max ) , zz64 ( kInt64Max ) } ,
{ zz64 ( kInt64Min ) , zz64 ( kInt64Min ) } ,
} ) ;
TestValidDataForType (
FieldDescriptor : : TYPE_STRING ,
{
{ delim ( " " ) , delim ( " " ) } ,
{ delim ( " Hello world! " ) , delim ( " Hello world! " ) } ,
{ delim ( " \' \" \ ? \\ \a \b \f \n \r \t \v " ) ,
delim ( " \' \" \ ? \\ \a \b \f \n \r \t \v " ) } , // escape
{ delim ( " 谷歌 " ) , delim ( " 谷歌 " ) } , // Google in Chinese
{ delim ( " \u8C37 \u6B4C " ) , delim ( " 谷歌 " ) } , // unicode escape
{ delim ( " \u8c37 \u6b4c " ) , delim ( " 谷歌 " ) } , // lowercase unicode
{ delim ( " \xF0 \x9F \x98 \x81 " ) , delim ( " \xF0 \x9F \x98 \x81 " ) } , // emoji: 😁
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_BYTES ,
{
{ delim ( " " ) , delim ( " " ) } ,
{ delim ( " \x01 \x02 " ) , delim ( " \x01 \x02 " ) } ,
{ delim ( " \xfb " ) , delim ( " \xfb " ) } ,
} ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_ENUM , {
{ varint ( 0 ) , varint ( 0 ) } ,
{ varint ( 1 ) , varint ( 1 ) } ,
@ -1463,63 +1448,48 @@ void BinaryAndJsonConformanceSuite::RunSuiteImpl() {
{ varint ( - 1 ) , varint ( - 1 ) } ,
} ) ;
TestValidDataForRepeatedScalarMessage ( ) ;
TestValidDataForType ( FieldDescriptor : : TYPE_MESSAGE , {
{ delim ( " " ) , delim ( " " ) } ,
{ delim ( cat ( tag ( 1 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1234 ) ) ) ,
delim ( cat ( tag ( 1 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1234 ) ) ) } ,
} ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_INT32 ,
FieldDescriptor : : TYPE_INT32 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_INT64 ,
FieldDescriptor : : TYPE_INT64 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_UINT32 ,
FieldDescriptor : : TYPE_UINT32 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_UINT64 ,
FieldDescriptor : : TYPE_UINT64 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_SINT32 ,
FieldDescriptor : : TYPE_SINT32 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_SINT64 ,
FieldDescriptor : : TYPE_SINT64 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_FIXED32 ,
FieldDescriptor : : TYPE_FIXED32 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_FIXED64 ,
FieldDescriptor : : TYPE_FIXED64 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_SFIXED32 ,
FieldDescriptor : : TYPE_SFIXED32 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_SFIXED64 ,
FieldDescriptor : : TYPE_SFIXED64 ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_INT32 ,
FieldDescriptor : : TYPE_FLOAT ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_INT32 ,
FieldDescriptor : : TYPE_DOUBLE ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_BOOL ,
FieldDescriptor : : TYPE_BOOL ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_STRING ,
FieldDescriptor : : TYPE_STRING ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_STRING ,
FieldDescriptor : : TYPE_BYTES ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_STRING ,
FieldDescriptor : : TYPE_ENUM ) ;
TestValidDataForMapType (
FieldDescriptor : : TYPE_STRING ,
FieldDescriptor : : TYPE_MESSAGE ) ;
TestValidDataForType (
FieldDescriptor : : TYPE_MESSAGE ,
{
{ delim ( " " ) , delim ( " " ) } ,
{ delim ( cat ( tag ( 1 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1234 ) ) ) ,
delim ( cat ( tag ( 1 , WireFormatLite : : WIRETYPE_VARINT ) , varint ( 1234 ) ) ) } ,
} ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_INT32 ,
FieldDescriptor : : TYPE_INT32 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_INT64 ,
FieldDescriptor : : TYPE_INT64 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_UINT32 ,
FieldDescriptor : : TYPE_UINT32 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_UINT64 ,
FieldDescriptor : : TYPE_UINT64 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_SINT32 ,
FieldDescriptor : : TYPE_SINT32 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_SINT64 ,
FieldDescriptor : : TYPE_SINT64 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_FIXED32 ,
FieldDescriptor : : TYPE_FIXED32 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_FIXED64 ,
FieldDescriptor : : TYPE_FIXED64 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_SFIXED32 ,
FieldDescriptor : : TYPE_SFIXED32 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_SFIXED64 ,
FieldDescriptor : : TYPE_SFIXED64 ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_INT32 ,
FieldDescriptor : : TYPE_FLOAT ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_INT32 ,
FieldDescriptor : : TYPE_DOUBLE ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_BOOL ,
FieldDescriptor : : TYPE_BOOL ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_STRING ,
FieldDescriptor : : TYPE_STRING ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_STRING ,
FieldDescriptor : : TYPE_BYTES ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_STRING ,
FieldDescriptor : : TYPE_ENUM ) ;
TestValidDataForMapType ( FieldDescriptor : : TYPE_STRING ,
FieldDescriptor : : TYPE_MESSAGE ) ;
// Additional test to check overwriting message value map.
TestOverwriteMessageValueMap ( ) ;