28 #include "gmock/gmock.h"
29 #include "gtest/gtest.h"
30 #include "src/google/protobuf/test_messages_proto3.upb.h"
34 #include "upb/msg_test.upb.h"
35 #include "upb/msg_test.upbdefs.h"
39 EXPECT_TRUE(upb_test_TestExtensions_has_optional_int32_ext(ext_msg));
41 EXPECT_TRUE(upb_test_has_optional_msg_ext(ext_msg));
43 EXPECT_EQ(123, upb_test_TestExtensions_optional_int32_ext(ext_msg));
44 const protobuf_test_messages_proto3_TestAllTypesProto3* ext_submsg =
45 upb_test_optional_msg_ext(ext_msg);
48 protobuf_test_messages_proto3_TestAllTypesProto3_optional_int32(
54 upb_test_TestExtensions* ext_msg = upb_test_TestExtensions_new(
arena.ptr());
56 EXPECT_FALSE(upb_test_TestExtensions_has_optional_int32_ext(ext_msg));
66 "[upb_test.TestExtensions.optional_int32_ext]": 123,
67 "[upb_test.TestExtensions.Nested.repeated_int32_ext]": [2, 4, 6],
68 "[upb_test.optional_msg_ext]": {"optional_int32": 456}
81 upb_test_TestExtensions_serialize(ext_msg,
arena.ptr(), &
size);
85 upb_test_TestExtensions* ext_msg2 = upb_test_TestExtensions_parse_ex(
97 upb_test_TestExtensions* ext_msg3 = upb_test_TestExtensions_new(
arena.ptr());
100 <<
status.error_message();
105 bool has = upb_test_MessageSetMember_has_message_set_extension(mset_msg);
108 const upb_test_MessageSetMember*
member =
109 upb_test_MessageSetMember_message_set_extension(mset_msg);
115 TEST(MessageTest, MessageSet) {
117 upb_test_TestMessageSet* ext_msg = upb_test_TestMessageSet_new(
arena.ptr());
119 EXPECT_FALSE(upb_test_MessageSetMember_has_message_set_extension(ext_msg));
127 "[upb_test.MessageSetMember]": {"optional_int32": 234}
133 << status.error_message();
140 upb_test_TestMessageSet_serialize(ext_msg,
arena.ptr(), &
size);
144 upb_test_TestMessageSet* ext_msg2 = upb_test_TestMessageSet_parse_ex(
156 upb_test_TestMessageSet* ext_msg3 = upb_test_TestMessageSet_new(
arena.ptr());
159 <<
status.error_message();
163 TEST(MessageTest, Proto2Enum) {
165 upb_test_Proto2FakeEnumMessage* fake_msg =
166 upb_test_Proto2FakeEnumMessage_new(
arena.ptr());
168 upb_test_Proto2FakeEnumMessage_set_optional_enum(fake_msg, 999);
170 int32_t*
vals = upb_test_Proto2FakeEnumMessage_resize_repeated_enum(
171 fake_msg, 6,
arena.ptr());
172 vals[0] = upb_test_Proto2EnumMessage_ZERO;
174 vals[2] = upb_test_Proto2EnumMessage_SMALL;
176 vals[4] = upb_test_Proto2EnumMessage_LARGE;
177 vals[5] = upb_test_Proto2EnumMessage_NEGATIVE;
179 vals = upb_test_Proto2FakeEnumMessage_resize_packed_enum(fake_msg, 6,
181 vals[0] = upb_test_Proto2EnumMessage_ZERO;
183 vals[2] = upb_test_Proto2EnumMessage_SMALL;
185 vals[4] = upb_test_Proto2EnumMessage_LARGE;
186 vals[5] = upb_test_Proto2EnumMessage_NEGATIVE;
190 upb_test_Proto2FakeEnumMessage_serialize(fake_msg,
arena.ptr(), &
size);
193 upb_test_Proto2EnumMessage* enum_msg =
194 upb_test_Proto2EnumMessage_parse(pb,
size,
arena.ptr());
197 EXPECT_EQ(
false, upb_test_Proto2EnumMessage_has_optional_enum(enum_msg));
199 upb_test_Proto2EnumMessage_repeated_enum(enum_msg, &
size);
204 pb = upb_test_Proto2EnumMessage_serialize(enum_msg,
arena.ptr(), &
size);
205 upb_test_Proto2FakeEnumMessage* fake_msg2 =
206 upb_test_Proto2FakeEnumMessage_parse(pb,
size,
arena.ptr());
208 EXPECT_EQ(
true, upb_test_Proto2FakeEnumMessage_has_optional_enum(fake_msg2));
209 EXPECT_EQ(999, upb_test_Proto2FakeEnumMessage_optional_enum(fake_msg2));
212 upb_test_Proto2EnumMessage_ZERO,
213 upb_test_Proto2EnumMessage_SMALL,
214 upb_test_Proto2EnumMessage_LARGE,
215 upb_test_Proto2EnumMessage_NEGATIVE,
220 vals_const = upb_test_Proto2FakeEnumMessage_repeated_enum(fake_msg2, &
size);
225 vals_const = upb_test_Proto2FakeEnumMessage_packed_enum(fake_msg2, &
size);
231 TEST(MessageTest, TestBadUTF8) {
234 EXPECT_EQ(
nullptr, protobuf_test_messages_proto3_TestAllTypesProto3_parse(
235 serialized.data(), serialized.size(),
arena.ptr()));
238 TEST(MessageTest, DecodeRequiredFieldsTopLevelMessage) {
240 upb_test_TestRequiredFields* test_msg;
241 upb_test_EmptyMessage* empty_msg;
244 test_msg = upb_test_TestRequiredFields_parse(NULL, 0,
arena.ptr());
249 upb_Decode(NULL, 0, test_msg, &upb_test_TestRequiredFields_msginit,
252 upb_test_TestRequiredFields_set_required_int32(test_msg, 1);
255 upb_test_TestRequiredFields_serialize(test_msg,
arena.ptr(), &
size);
263 &upb_test_TestRequiredFields_msginit, NULL,
266 empty_msg = upb_test_EmptyMessage_new(
arena.ptr());
267 upb_test_TestRequiredFields_set_required_int32(test_msg, 1);
268 upb_test_TestRequiredFields_set_required_int64(test_msg, 2);
269 upb_test_TestRequiredFields_set_required_message(test_msg, empty_msg);
273 upb_Decode(NULL, 0, test_msg, &upb_test_TestRequiredFields_msginit,
278 upb_test_TestRequiredFields_serialize(test_msg,
arena.ptr(), &
size);
282 upb_test_TestRequiredFields* test_msg2 = upb_test_TestRequiredFields_parse_ex(
288 upb_test_TestRequiredFields_set_optional_message(
289 test_msg2, upb_test_TestRequiredFields_new(
arena.ptr()));
292 &upb_test_TestRequiredFields_msginit, NULL,
296 TEST(MessageTest, DecodeRequiredFieldsSubMessage) {
298 upb_test_TestRequiredFields* test_msg =
299 upb_test_TestRequiredFields_new(
arena.ptr());
300 upb_test_SubMessageHasRequired* sub_msg =
301 upb_test_SubMessageHasRequired_new(
arena.ptr());
302 upb_test_EmptyMessage* empty_msg = upb_test_EmptyMessage_new(
arena.ptr());
304 upb_test_SubMessageHasRequired_set_optional_message(sub_msg, test_msg);
307 upb_test_SubMessageHasRequired_serialize(sub_msg,
arena.ptr(), &
size);
311 EXPECT_NE(
nullptr, upb_test_SubMessageHasRequired_parse(serialized,
size,
315 EXPECT_EQ(
nullptr, upb_test_SubMessageHasRequired_parse_ex(
316 serialized,
size, NULL,
319 upb_test_TestRequiredFields_set_required_int32(test_msg, 1);
320 upb_test_TestRequiredFields_set_required_int64(test_msg, 2);
321 upb_test_TestRequiredFields_set_required_message(test_msg, empty_msg);
324 upb_test_SubMessageHasRequired_serialize(sub_msg,
arena.ptr(), &
size);
328 EXPECT_NE(
nullptr, upb_test_SubMessageHasRequired_parse_ex(
329 serialized,
size, NULL,
333 TEST(MessageTest, EncodeRequiredFields) {
335 upb_test_TestRequiredFields* test_msg =
336 upb_test_TestRequiredFields_new(
arena.ptr());
341 upb_test_TestRequiredFields_serialize_ex(test_msg, 0,
arena.ptr(), &
size);
347 serialized = upb_test_TestRequiredFields_serialize_ex(
352 upb_test_TestRequiredFields_set_required_int32(test_msg, 1);
353 serialized = upb_test_TestRequiredFields_serialize_ex(
358 upb_test_EmptyMessage* empty_msg = upb_test_EmptyMessage_new(
arena.ptr());
359 upb_test_TestRequiredFields_set_required_int64(test_msg, 2);
360 upb_test_TestRequiredFields_set_required_message(test_msg, empty_msg);
361 serialized = upb_test_TestRequiredFields_serialize_ex(
366 TEST(MessageTest, MaxRequiredFields) {
368 upb_test_TestMaxRequiredFields* test_msg =
369 upb_test_TestMaxRequiredFields_new(
arena.ptr());
374 char* serialized = upb_test_TestMaxRequiredFields_serialize_ex(
382 for (
int i = 1;
i <= 61;
i++) {
389 serialized = upb_test_TestMaxRequiredFields_serialize_ex(
397 serialized = upb_test_TestMaxRequiredFields_serialize_ex(
404 upb_test_TestMapFieldExtra* test_msg_extra =
405 upb_test_TestMapFieldExtra_new(
arena.ptr());
407 ASSERT_TRUE(upb_test_TestMapFieldExtra_map_field_set(
408 test_msg_extra, 0, upb_test_TestMapFieldExtra_THREE,
arena.ptr()));
411 char* serialized = upb_test_TestMapFieldExtra_serialize_ex(
416 upb_test_TestMapField* test_msg =
417 upb_test_TestMapField_parse(serialized,
size,
arena.ptr());
420 ASSERT_FALSE(upb_test_TestMapField_map_field_get(test_msg, 0,
nullptr));
422 upb_test_TestMapField_serialize_ex(test_msg, 0,
arena.ptr(), &
size);
425 upb_test_TestMapFieldExtra* test_msg_extra2 =
426 upb_test_TestMapFieldExtra_parse(serialized,
size,
arena.ptr());
428 upb_test_TestMapFieldExtra_map_field_get(test_msg_extra2, 0,
nullptr));