36 #include <google/protobuf/stubs/logging.h>
37 #include <google/protobuf/stubs/common.h>
38 #include <google/protobuf/arena_test_util.h>
39 #include <google/protobuf/map_lite_test_util.h>
40 #include <google/protobuf/map_lite_unittest.pb.h>
41 #include <google/protobuf/test_util_lite.h>
42 #include <google/protobuf/unittest_lite.pb.h>
43 #include <google/protobuf/io/coded_stream.h>
44 #include <google/protobuf/io/zero_copy_stream.h>
45 #include <google/protobuf/io/zero_copy_stream_impl.h>
46 #include <google/protobuf/io/zero_copy_stream_impl_lite.h>
47 #include <google/protobuf/wire_format_lite.h>
48 #include <gtest/gtest.h>
49 #include <google/protobuf/stubs/strutil.h>
62 unittest::TestAllTypesLite* msg2,
63 unittest::TestAllTypesLite* msg3) {
64 msg1->set_optional_int32(1);
65 msg2->set_optional_int64(2);
66 msg3->set_optional_int32(3);
67 msg3->set_optional_string(
"hello");
71 unittest::TestEmptyMessageLite* empty_message) {
72 protobuf_unittest::TestAllTypesLite
message;
76 empty_message->ParseFromString(
data);
80 unittest::TestEmptyMessageLite* empty_message) {
81 protobuf_unittest::TestAllTypesLite
message;
83 message.set_optional_int32(101);
84 message.set_optional_int64(102);
85 message.set_optional_uint32(103);
86 message.set_optional_uint64(104);
88 empty_message->ParseFromString(
data);
91 TEST(Lite, AllLite1) {
95 protobuf_unittest::TestAllTypesLite
message, message2, message3;
100 message3.ParseFromString(
data);
111 TEST(Lite, AllLite2) {
114 protobuf_unittest::TestAllExtensionsLite
message, message2, message3;
119 message3.ParseFromString(extensions_data);
130 TEST(Lite, AllLite3) {
134 protobuf_unittest::TestPackedTypesLite
message, message2, message3;
138 packed_data =
message.SerializeAsString();
139 message3.ParseFromString(packed_data);
150 protobuf_unittest::TestPackedExtensionsLite
message, message2, message3;
155 EXPECT_EQ(packed_extensions_data, packed_data);
156 message3.ParseFromString(packed_extensions_data);
167 TEST(Lite, AllLite5) {
173 unittest::TestParsingMergeLite::RepeatedFieldsGenerator generator;
174 unittest::TestAllTypesLite* msg1;
175 unittest::TestAllTypesLite* msg2;
176 unittest::TestAllTypesLite* msg3;
178 #define ASSIGN_REPEATED_FIELD(FIELD) \
179 msg1 = generator.add_##FIELD(); \
180 msg2 = generator.add_##FIELD(); \
181 msg3 = generator.add_##FIELD(); \
182 AssignParsingMergeMessages(msg1, msg2, msg3)
190 #undef ASSIGN_REPEATED_FIELD
191 #define ASSIGN_REPEATED_GROUP(FIELD) \
192 msg1 = generator.add_##FIELD()->mutable_field1(); \
193 msg2 = generator.add_##FIELD()->mutable_field1(); \
194 msg3 = generator.add_##FIELD()->mutable_field1(); \
195 AssignParsingMergeMessages(msg1, msg2, msg3)
200 #undef ASSIGN_REPEATED_GROUP
203 generator.SerializeToString(&
buffer);
204 unittest::TestParsingMergeLite parsing_merge;
205 parsing_merge.ParseFromString(
buffer);
211 parsing_merge.optionalgroup().optional_group_all_types());
213 unittest::TestParsingMergeLite::optional_ext));
216 EXPECT_EQ(parsing_merge.repeated_all_types_size(), 3);
217 EXPECT_EQ(parsing_merge.repeatedgroup_size(), 3);
219 unittest::TestParsingMergeLite::repeated_ext),
224 TEST(Lite, AllLite6) {
229 protobuf_unittest::TestAllTypesLite
message, message2;
230 protobuf_unittest::TestEmptyMessageLite empty_message;
236 data = empty_message.SerializeAsString();
238 data = message2.SerializeAsString();
245 TEST(Lite, AllLite7) {
249 protobuf_unittest::TestAllExtensionsLite
message, message2;
250 protobuf_unittest::TestEmptyMessageLite empty_message;
254 empty_message.ParseFromString(
data);
256 data = empty_message.SerializeAsString();
257 message2.ParseFromString(
data);
258 data = message2.SerializeAsString();
265 TEST(Lite, AllLite8) {
269 protobuf_unittest::TestPackedTypesLite
message, message2;
270 protobuf_unittest::TestEmptyMessageLite empty_message;
274 empty_message.ParseFromString(
data);
276 data = empty_message.SerializeAsString();
277 message2.ParseFromString(
data);
278 data = message2.SerializeAsString();
285 TEST(Lite, AllLite9) {
289 protobuf_unittest::TestPackedExtensionsLite
message, message2;
290 protobuf_unittest::TestEmptyMessageLite empty_message;
294 empty_message.ParseFromString(
data);
296 data = empty_message.SerializeAsString();
297 message2.ParseFromString(
data);
298 data = message2.SerializeAsString();
305 TEST(Lite, AllLite10) {
310 protobuf_unittest::TestEmptyMessageLite empty_message, empty_message2;
313 data = empty_message.SerializeAsString();
314 std::string data2 = empty_message2.SerializeAsString();
315 empty_message.Swap(&empty_message2);
317 EXPECT_EQ(data2, empty_message.SerializeAsString());
321 TEST(Lite, AllLite11) {
326 protobuf_unittest::TestEmptyMessageLite empty_message;
328 data = empty_message.SerializeAsString();
329 empty_message.Swap(&empty_message);
334 TEST(Lite, AllLite12) {
339 protobuf_unittest::TestAllTypesLite
message, message2;
340 protobuf_unittest::TestEmptyMessageLite empty_message, empty_message2;
341 message.set_optional_int32(101);
342 message.add_repeated_int32(201);
343 message.set_optional_nested_enum(unittest::TestAllTypesLite::BAZ);
344 message2.set_optional_int64(102);
345 message2.add_repeated_int64(202);
346 message2.set_optional_foreign_enum(unittest::FOREIGN_LITE_BAZ);
349 empty_message.ParseFromString(
data);
350 data = message2.SerializeAsString();
351 empty_message2.ParseFromString(
data);
353 empty_message.MergeFrom(empty_message2);
355 data = empty_message.SerializeAsString();
356 message2.ParseFromString(
data);
364 TEST(Lite, AllLite13) {
369 protobuf_unittest::TestAllTypesLite
message;
375 protobuf_unittest::TestAllTypesLite::kOptionalNestedEnumFieldNumber,
377 coded_output.WriteVarint32(10);
379 protobuf_unittest::TestAllTypesLite::kRepeatedNestedEnumFieldNumber,
381 coded_output.WriteVarint32(20);
389 TEST(Lite, AllLite14) {
394 protobuf_unittest::TestEmptyMessageLite empty_message;
396 empty_message.Clear();
397 EXPECT_EQ(0, empty_message.unknown_fields().size());
403 TEST(Lite, AllLite15) {
408 protobuf_unittest::TestMapLite
message;
418 TEST(Lite, AllLite16) {
423 protobuf_unittest::TestMapLite
message;
430 TEST(Lite, AllLite17) {
435 protobuf_unittest::TestMapLite
message;
443 TEST(Lite, AllLite18) {
448 protobuf_unittest::TestMessageMapLite
message;
455 TEST(Lite, AllLite19) {
460 protobuf_unittest::TestMapLite message1, message2;
463 message2.CopyFrom(message1);
467 message2.CopyFrom(message2);
472 TEST(Lite, AllLite20) {
477 protobuf_unittest::TestMessageMapLite message1, message2;
479 (*message1.mutable_map_int32_message())[0].add_repeated_int32(100);
480 (*message2.mutable_map_int32_message())[0].add_repeated_int32(101);
482 message1.CopyFrom(message2);
485 EXPECT_EQ(1, message1.map_int32_message().at(0).repeated_int32_size());
486 EXPECT_EQ(101, message1.map_int32_message().at(0).repeated_int32(0));
490 TEST(Lite, AllLite21) {
495 protobuf_unittest::TestMapLite message1, message2;
501 message1.Swap(&message2);
507 TEST(Lite, AllLite22) {
512 protobuf_unittest::TestMapLite
message;
522 TEST(Lite, AllLite23) {
527 protobuf_unittest::TestMapLite message1, message2;
533 message1.Swap(&message2);
539 TEST(Lite, AllLite24) {
544 protobuf_unittest::TestMapLite message1;
547 protobuf_unittest::TestMapLite message2(message1);
552 TEST(Lite, AllLite25) {
557 protobuf_unittest::TestMapLite message1;
560 protobuf_unittest::TestMapLite message2;
565 message2.operator=(message2);
570 TEST(Lite, AllLite26) {
575 protobuf_unittest::TestMapLite message1, message2;
580 (*message2.mutable_map_int32_int32())[1] = 1;
581 message1.mutable_map_int32_int32()->erase(1);
584 (*message2.mutable_map_int32_double())[1] = 1;
585 (*message1.mutable_map_int32_double())[1] = 2;
587 message1.MergeFrom(message2);
592 TEST(Lite, AllLite27) {
597 protobuf_unittest::TestMessageMapLite message1, message2;
599 (*message1.mutable_map_int32_message())[0].add_repeated_int32(100);
600 (*message2.mutable_map_int32_message())[0].add_repeated_int32(101);
602 message1.MergeFrom(message2);
605 EXPECT_EQ(1, message1.map_int32_message().at(0).repeated_int32_size());
606 EXPECT_EQ(101, message1.map_int32_message().at(0).repeated_int32(0));
610 TEST(Lite, AllLite28) {
615 protobuf_unittest::TestMapLite message1, message2;
618 size_t size = message1.ByteSizeLong();
628 TEST(Lite, AllLite29) {
633 protobuf_unittest::TestMapLite message1, message2;
635 size_t size = message1.ByteSizeLong();
642 message1.SerializeWithCachedSizes(&output_stream);
652 TEST(Lite, AllLite32) {
657 protobuf_unittest::TestEnumMapPlusExtraLite
from;
658 (*
from.mutable_known_map_field())[0] =
659 protobuf_unittest::E_PROTO2_MAP_ENUM_FOO_LITE;
660 (*
from.mutable_unknown_map_field())[0] =
661 protobuf_unittest::E_PROTO2_MAP_ENUM_EXTRA_LITE;
665 protobuf_unittest::TestEnumMapLite
to;
670 EXPECT_EQ(protobuf_unittest::PROTO2_MAP_ENUM_FOO_LITE,
671 to.known_map_field().at(0));
675 to.SerializeToString(&
data);
678 EXPECT_EQ(protobuf_unittest::E_PROTO2_MAP_ENUM_FOO_LITE,
679 from.known_map_field().at(0));
681 EXPECT_EQ(protobuf_unittest::E_PROTO2_MAP_ENUM_EXTRA_LITE,
682 from.unknown_map_field().at(0));
686 TEST(Lite, AllLite33) {
691 protobuf_unittest::TestMapLite
message;
700 TEST(Lite, AllLite34) {
705 protobuf_unittest::TestMapLite
message;
713 message.map_int32_int32().end());
718 TEST(Lite, AllLite35) {
723 protobuf_unittest::TestMapLite
message;
734 TEST(Lite, AllLite36) {
739 protobuf_unittest::TestMapLite
message;
750 TEST(Lite, AllLite37) {
755 protobuf_unittest::TestMapLite
message;
763 message.map_int32_int32().end());
768 TEST(Lite, AllLite38) {
773 protobuf_unittest::TestMapLite
message;
781 message.map_int32_int32().end());
786 TEST(Lite, AllLite39) {
791 protobuf_unittest::TestMapLite
message;
802 TEST(Lite, AllLite40) {
807 protobuf_unittest::TestMapLite
message;
816 TEST(Lite, AllLite41) {
821 protobuf_unittest::TestRequiredMessageMapLite map_message;
824 (*map_message.mutable_map_field())[0];
828 (*map_message.mutable_map_field())[0].set_a(0);
829 (*map_message.mutable_map_field())[0].set_b(0);
830 (*map_message.mutable_map_field())[0].set_c(0);
835 TEST(Lite, AllLite42) {
841 protobuf_unittest::V2MessageLite v2_message;
842 v2_message.set_int_field(800);
844 v2_message.set_enum_field(protobuf_unittest::V2_SECOND);
845 std::string v2_bytes = v2_message.SerializeAsString();
847 protobuf_unittest::V1MessageLite v1_message;
848 v1_message.ParseFromString(v2_bytes);
850 EXPECT_EQ(v1_message.int_field(), v2_message.int_field());
853 EXPECT_EQ(v1_message.enum_field(), protobuf_unittest::V1_FIRST);
856 std::string v1_bytes = v1_message.SerializeAsString();
858 protobuf_unittest::V2MessageLite same_v2_message;
859 same_v2_message.ParseFromString(v1_bytes);
861 EXPECT_EQ(v2_message.int_field(), same_v2_message.int_field());
862 EXPECT_EQ(v2_message.enum_field(), same_v2_message.enum_field());
868 TEST(Lite, AllLite43) {
869 protobuf_unittest::TestOneofParsingLite message1;
871 message1.set_oneof_int32(17);
873 EXPECT_TRUE(message1.SerializeToString(&serialized));
877 protobuf_unittest::TestOneofParsingLite message2;
878 message2.mutable_oneof_submessage();
881 EXPECT_TRUE(message2.MergeFromCodedStream(&input_stream));
887 protobuf_unittest::TestOneofParsingLite message2;
888 message2.set_oneof_string(
"string");
891 EXPECT_TRUE(message2.MergeFromCodedStream(&input_stream));
897 protobuf_unittest::TestOneofParsingLite message2;
898 message2.set_oneof_bytes(
"bytes");
901 EXPECT_TRUE(message2.MergeFromCodedStream(&input_stream));
909 TEST(Lite, AllLite44) {
912 protobuf_unittest::TestOneofParsingLite original;
913 original.set_oneof_int32(17);
915 EXPECT_TRUE(original.SerializeToString(&serialized));
916 protobuf_unittest::TestOneofParsingLite parsed;
917 for (
int i = 0;
i < 2; ++
i) {
921 EXPECT_TRUE(parsed.MergeFromCodedStream(&input_stream));
928 protobuf_unittest::TestOneofParsingLite original;
929 original.mutable_oneof_submessage()->set_optional_int32(5);
931 EXPECT_TRUE(original.SerializeToString(&serialized));
932 protobuf_unittest::TestOneofParsingLite parsed;
933 for (
int i = 0;
i < 2; ++
i) {
937 EXPECT_TRUE(parsed.MergeFromCodedStream(&input_stream));
938 EXPECT_EQ(5, parsed.oneof_submessage().optional_int32());
944 protobuf_unittest::TestOneofParsingLite original;
945 original.set_oneof_string(
"string");
947 EXPECT_TRUE(original.SerializeToString(&serialized));
948 protobuf_unittest::TestOneofParsingLite parsed;
949 for (
int i = 0;
i < 2; ++
i) {
953 EXPECT_TRUE(parsed.MergeFromCodedStream(&input_stream));
954 EXPECT_EQ(
"string", parsed.oneof_string());
960 protobuf_unittest::TestOneofParsingLite original;
961 original.set_oneof_bytes(
"bytes");
963 EXPECT_TRUE(original.SerializeToString(&serialized));
964 protobuf_unittest::TestOneofParsingLite parsed;
965 for (
int i = 0;
i < 2; ++
i) {
969 EXPECT_TRUE(parsed.MergeFromCodedStream(&input_stream));
970 EXPECT_EQ(
"bytes", parsed.oneof_bytes());
976 protobuf_unittest::TestOneofParsingLite original;
977 original.set_oneof_enum(protobuf_unittest::V2_SECOND);
979 EXPECT_TRUE(original.SerializeToString(&serialized));
980 protobuf_unittest::TestOneofParsingLite parsed;
981 for (
int i = 0;
i < 2; ++
i) {
985 EXPECT_TRUE(parsed.MergeFromCodedStream(&input_stream));
986 EXPECT_EQ(protobuf_unittest::V2_SECOND, parsed.oneof_enum());
990 std::cout <<
"PASS" << std::endl;
993 TEST(Lite, AllLite45) {
997 protobuf_unittest::ForeignMessageLite
a;
1001 EXPECT_TRUE(
a.MergePartialFromCodedStream(&input_stream));
1015 TEST(Lite, AllLite46) {
1016 protobuf_unittest::PackedInt32 packed;
1017 packed.add_repeated_int32(42);
1019 ASSERT_TRUE(packed.SerializeToString(&serialized));
1021 protobuf_unittest::NonPackedInt32 non_packed;
1022 ASSERT_TRUE(non_packed.ParseFromString(serialized));
1023 ASSERT_EQ(1, non_packed.repeated_int32_size());
1024 EXPECT_EQ(42, non_packed.repeated_int32(0));
1027 TEST(Lite, AllLite47) {
1028 protobuf_unittest::NonPackedFixed32 non_packed;
1029 non_packed.add_repeated_fixed32(42);
1031 ASSERT_TRUE(non_packed.SerializeToString(&serialized));
1033 protobuf_unittest::PackedFixed32 packed;
1035 ASSERT_EQ(1, packed.repeated_fixed32_size());
1036 EXPECT_EQ(42, packed.repeated_fixed32(0));
1039 TEST(Lite, MapCrash) {
1042 auto msg = Arena::CreateMessage<protobuf_unittest::TestMapLite>(&
arena);
1050 "\202\1\15\10\1\200\200\200\200\200\200\200\200\200\200\1"));
1053 TEST(Lite, CorrectEnding) {
1054 protobuf_unittest::TestAllTypesLite
msg;
1061 static const char kWireFormat[] =
"\204\1";
1074 static const char kWireFormat[] =
"\214";
1084 protobuf_unittest::TestAllTypesLite message1, message2;
1089 EXPECT_EQ(message1.DebugString(), message1.ShortDebugString());
1095 EXPECT_NE(message1.DebugString(), message2.DebugString());
1098 TEST(Lite, EnumValueToName) {
1099 EXPECT_EQ(
"FOREIGN_LITE_FOO", protobuf_unittest::ForeignEnumLite_Name(
1100 protobuf_unittest::FOREIGN_LITE_FOO));
1101 EXPECT_EQ(
"FOREIGN_LITE_BAR", protobuf_unittest::ForeignEnumLite_Name(
1102 protobuf_unittest::FOREIGN_LITE_BAR));
1103 EXPECT_EQ(
"FOREIGN_LITE_BAZ", protobuf_unittest::ForeignEnumLite_Name(
1104 protobuf_unittest::FOREIGN_LITE_BAZ));
1105 EXPECT_EQ(
"", protobuf_unittest::ForeignEnumLite_Name(0));
1106 EXPECT_EQ(
"", protobuf_unittest::ForeignEnumLite_Name(999));
1109 TEST(Lite, NestedEnumValueToName) {
1110 EXPECT_EQ(
"FOO", protobuf_unittest::TestAllTypesLite::NestedEnum_Name(
1111 protobuf_unittest::TestAllTypesLite::FOO));
1112 EXPECT_EQ(
"BAR", protobuf_unittest::TestAllTypesLite::NestedEnum_Name(
1113 protobuf_unittest::TestAllTypesLite::BAR));
1114 EXPECT_EQ(
"BAZ", protobuf_unittest::TestAllTypesLite::NestedEnum_Name(
1115 protobuf_unittest::TestAllTypesLite::BAZ));
1116 EXPECT_EQ(
"", protobuf_unittest::TestAllTypesLite::NestedEnum_Name(0));
1117 EXPECT_EQ(
"", protobuf_unittest::TestAllTypesLite::NestedEnum_Name(999));
1120 TEST(Lite, EnumNameToValue) {
1121 protobuf_unittest::ForeignEnumLite
value;
1124 protobuf_unittest::ForeignEnumLite_Parse(
"FOREIGN_LITE_FOO", &
value));
1128 protobuf_unittest::ForeignEnumLite_Parse(
"FOREIGN_LITE_BAR", &
value));
1132 protobuf_unittest::ForeignEnumLite_Parse(
"FOREIGN_LITE_BAZ", &
value));
1138 protobuf_unittest::ForeignEnumLite_Parse(
"FOREIGN_LITE_C", &
value));
1142 TEST(Lite, NestedEnumNameToValue) {
1143 protobuf_unittest::TestAllTypesLite::NestedEnum
value;
1146 protobuf_unittest::TestAllTypesLite::NestedEnum_Parse(
"FOO", &
value));
1150 protobuf_unittest::TestAllTypesLite::NestedEnum_Parse(
"BAR", &
value));
1154 protobuf_unittest::TestAllTypesLite::NestedEnum_Parse(
"BAZ", &
value));
1159 protobuf_unittest::TestAllTypesLite::NestedEnum_Parse(
"A", &
value));
1161 protobuf_unittest::TestAllTypesLite::NestedEnum_Parse(
"C", &
value));
1163 protobuf_unittest::TestAllTypesLite::NestedEnum_Parse(
"G", &
value));
1166 TEST(Lite, AliasedEnum) {
1169 EXPECT_EQ(
"FOO1", protobuf_unittest::DupEnum::TestEnumWithDupValueLite_Name(
1170 protobuf_unittest::DupEnum::FOO1));
1171 EXPECT_EQ(
"FOO1", protobuf_unittest::DupEnum::TestEnumWithDupValueLite_Name(
1172 protobuf_unittest::DupEnum::FOO2));
1173 EXPECT_EQ(
"BAR1", protobuf_unittest::DupEnum::TestEnumWithDupValueLite_Name(
1174 protobuf_unittest::DupEnum::BAR1));
1175 EXPECT_EQ(
"BAR1", protobuf_unittest::DupEnum::TestEnumWithDupValueLite_Name(
1176 protobuf_unittest::DupEnum::BAR2));
1177 EXPECT_EQ(
"BAZ", protobuf_unittest::DupEnum::TestEnumWithDupValueLite_Name(
1178 protobuf_unittest::DupEnum::BAZ));
1179 EXPECT_EQ(
"", protobuf_unittest::DupEnum::TestEnumWithDupValueLite_Name(999));
1181 protobuf_unittest::DupEnum::TestEnumWithDupValueLite
value;
1183 protobuf_unittest::DupEnum::TestEnumWithDupValueLite_Parse(
"FOO1", &
value));
1186 value =
static_cast<protobuf_unittest::DupEnum::TestEnumWithDupValueLite
>(0);
1188 protobuf_unittest::DupEnum::TestEnumWithDupValueLite_Parse(
"FOO2", &
value));
1193 TEST(Lite, CodedInputStreamRollback) {
1195 protobuf_unittest::TestAllTypesLite
m;
1198 serialized +=
'\014';
1201 serialized.size() - 6);
1205 m.MergePartialFromCodedStream(&cis);
1217 protobuf_unittest::TestPackedTypesLite
m;
1218 constexpr
int kCount = 30;
1219 for (
int i = 0;
i < kCount;
i++)
m.add_packed_fixed32(
i);
1221 serialized +=
'\014';
1225 serialized.size() - 7);
1229 m.MergePartialFromCodedStream(&cis);
1243 protobuf_unittest::TestPackedTypesLite
m;
1244 constexpr
int kCount = 30;
1246 for (
int i = 0;
i < kCount;
i++)
m.add_packed_fixed32(128 +
i);
1248 serialized +=
'\014';
1252 serialized.size() - 5);
1256 m.MergePartialFromCodedStream(&cis);
1262 for (
int i = 0;
i < kCount;
i++)
EXPECT_EQ(
m.packed_fixed32(
i),
i + 128);