| Index: third_party/protobuf/src/google/protobuf/lite_unittest.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/lite_unittest.cc b/third_party/protobuf/src/google/protobuf/lite_unittest.cc
|
| index d1948ab5cc3d4e7e84eef173140cd44ba65e5a1f..3ca3fbaf6ecb3a4ba54d3723967000a5b77e770d 100644
|
| --- a/third_party/protobuf/src/google/protobuf/lite_unittest.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/lite_unittest.cc
|
| @@ -686,6 +686,33 @@ int main(int argc, char* argv[]) {
|
| EXPECT_TRUE(map_message.IsInitialized());
|
| }
|
|
|
| + {
|
| + // Check that adding more values to enum does not corrupt message
|
| + // when passed through an old client.
|
| + protobuf_unittest::V2MessageLite v2_message;
|
| + v2_message.set_int_field(800);
|
| + // Set enum field to the value not understood by the old client.
|
| + v2_message.set_enum_field(protobuf_unittest::V2_SECOND);
|
| + string v2_bytes = v2_message.SerializeAsString();
|
| +
|
| + protobuf_unittest::V1MessageLite v1_message;
|
| + v1_message.ParseFromString(v2_bytes);
|
| + EXPECT_TRUE(v1_message.IsInitialized());
|
| + EXPECT_EQ(v1_message.int_field(), v2_message.int_field());
|
| + // V1 client does not understand V2_SECOND value, so it discards it and
|
| + // uses default value instead.
|
| + EXPECT_EQ(v1_message.enum_field(), protobuf_unittest::V1_FIRST);
|
| +
|
| + // However, when re-serialized, it should preserve enum value.
|
| + string v1_bytes = v1_message.SerializeAsString();
|
| +
|
| + protobuf_unittest::V2MessageLite same_v2_message;
|
| + same_v2_message.ParseFromString(v1_bytes);
|
| +
|
| + EXPECT_EQ(v2_message.int_field(), same_v2_message.int_field());
|
| + EXPECT_EQ(v2_message.enum_field(), same_v2_message.enum_field());
|
| + }
|
| +
|
| std::cout << "PASS" << std::endl;
|
| return 0;
|
| }
|
|
|