31 #include <google/protobuf/unittest.pb.h>
32 #include <google/protobuf/unittest_preserve_unknown_enum.pb.h>
33 #include <google/protobuf/unittest_preserve_unknown_enum2.pb.h>
43 proto3_preserve_unknown_enum_unittest::MyMessagePlusExtra*
message) {
44 message->set_e(proto3_preserve_unknown_enum_unittest::E_EXTRA);
45 message->add_repeated_e(proto3_preserve_unknown_enum_unittest::E_EXTRA);
47 proto3_preserve_unknown_enum_unittest::E_EXTRA);
48 message->add_repeated_packed_unexpected_e(
49 proto3_preserve_unknown_enum_unittest::E_EXTRA);
50 message->set_oneof_e_1(proto3_preserve_unknown_enum_unittest::E_EXTRA);
54 const proto3_preserve_unknown_enum_unittest::MyMessagePlusExtra&
message) {
57 EXPECT_EQ(proto3_preserve_unknown_enum_unittest::E_EXTRA,
60 EXPECT_EQ(proto3_preserve_unknown_enum_unittest::E_EXTRA,
63 EXPECT_EQ(proto3_preserve_unknown_enum_unittest::E_EXTRA,
64 message.repeated_packed_unexpected_e(0));
65 EXPECT_EQ(proto3_preserve_unknown_enum_unittest::E_EXTRA,
70 const proto3_preserve_unknown_enum_unittest::MyMessage&
message) {
71 EXPECT_EQ(
static_cast<int>(proto3_preserve_unknown_enum_unittest::E_EXTRA),
74 EXPECT_EQ(
static_cast<int>(proto3_preserve_unknown_enum_unittest::E_EXTRA),
75 static_cast<int>(
message.repeated_e(0)));
77 EXPECT_EQ(
static_cast<int>(proto3_preserve_unknown_enum_unittest::E_EXTRA),
78 static_cast<int>(
message.repeated_packed_e(0)));
80 EXPECT_EQ(
static_cast<int>(proto3_preserve_unknown_enum_unittest::E_EXTRA),
81 static_cast<int>(
message.repeated_packed_unexpected_e(0)));
82 EXPECT_EQ(
static_cast<int>(proto3_preserve_unknown_enum_unittest::E_EXTRA),
83 static_cast<int>(
message.oneof_e_1()));
90 TEST(PreserveUnknownEnumTest, PreserveParseAndSerialize) {
91 proto3_preserve_unknown_enum_unittest::MyMessagePlusExtra orig_message;
92 FillMessage(&orig_message);
94 orig_message.SerializeToString(&serialized);
96 proto3_preserve_unknown_enum_unittest::MyMessage
message;
101 message.SerializeToString(&serialized);
102 EXPECT_EQ(
true, orig_message.ParseFromString(serialized));
103 CheckMessage(orig_message);
108 TEST(PreserveUnknownEnumTest, PreserveParseAndSerializeDynamicMessage) {
109 proto3_preserve_unknown_enum_unittest::MyMessagePlusExtra orig_message;
110 FillMessage(&orig_message);
111 std::string serialized = orig_message.SerializeAsString();
114 std::unique_ptr<Message>
message(
120 message->DiscardUnknownFields();
122 serialized =
message->SerializeAsString();
123 EXPECT_EQ(
true, orig_message.ParseFromString(serialized));
124 CheckMessage(orig_message);
128 TEST(PreserveUnknownEnumTest, Proto2HidesUnknownValues) {
129 proto3_preserve_unknown_enum_unittest::MyMessagePlusExtra orig_message;
130 FillMessage(&orig_message);
133 orig_message.SerializeToString(&serialized);
135 proto2_preserve_unknown_enum_unittest::MyMessage
message;
138 proto2_preserve_unknown_enum_unittest::MyMessage message2 =
message;
139 message2.DiscardUnknownFields();
144 message.SerializeToString(&serialized);
145 EXPECT_EQ(
true, orig_message.ParseFromString(serialized));
146 CheckMessage(orig_message);
150 TEST(PreserveUnknownEnumTest, DynamicProto2HidesUnknownValues) {
151 proto3_preserve_unknown_enum_unittest::MyMessagePlusExtra orig_message;
152 FillMessage(&orig_message);
155 orig_message.SerializeToString(&serialized);
158 std::unique_ptr<Message>
message(
165 proto2_preserve_unknown_enum_unittest::MyMessage message2;
167 message2.DiscardUnknownFields();
172 message->SerializeToString(&serialized);
173 EXPECT_EQ(
true, orig_message.ParseFromString(serialized));
174 CheckMessage(orig_message);
178 TEST(PreserveUnknownEnumTest, DynamicEnumValueDescriptors) {
179 proto3_preserve_unknown_enum_unittest::MyMessagePlusExtra orig_message;
180 FillMessage(&orig_message);
182 orig_message.SerializeToString(&serialized);
184 proto3_preserve_unknown_enum_unittest::MyMessage
message;
195 static_cast<int>(proto3_preserve_unknown_enum_unittest::E_EXTRA));
199 EXPECT_EQ(enum_value, enum_value_second);
205 static_cast<int>(proto3_preserve_unknown_enum_unittest::E_EXTRA));
207 EXPECT_EQ(enum_value, enum_value_second);
212 r->SetEnum(
m,
field, enum_value);
218 TEST(PreserveUnknownEnumTest, IntegerEnumReflectionAPI) {
219 proto3_preserve_unknown_enum_unittest::MyMessage
message;
226 r->SetEnumValue(&
message, singular_field, 42);
238 TEST(PreserveUnknownEnumTest, Proto2CatchesUnknownValues) {
239 protobuf_unittest::TestAllTypes
message;
243 d->FindFieldByName(
"repeated_nested_enum");
252 d->FindFieldByName(
"optional_nested_enum");
255 r->SetEnumValue(&
message, singular_field, 4242);
257 protobuf_unittest::TestAllTypes::FOO);
261 protobuf_unittest::TestAllTypes::BAR);
269 singular_field->
number());
279 TEST(PreserveUnknownEnumTest, SupportsUnknownEnumValuesAPI) {
280 protobuf_unittest::TestAllTypes proto2_message;
281 proto3_preserve_unknown_enum_unittest::MyMessage new_message;
283 const Reflection* proto2_reflection = proto2_message.GetReflection();
284 const Reflection* new_reflection = new_message.GetReflection();