36 #include <google/protobuf/unittest.pb.h>
37 #include <google/protobuf/unittest_proto3_arena.pb.h>
42 using proto3_arena_unittest::TestAllTypes;
50 m->set_optional_int32(100);
51 m->set_optional_string(
"asdf");
52 m->set_optional_bytes(
"jkl;");
53 m->mutable_optional_nested_message()->set_bb(42);
54 m->mutable_optional_foreign_message()->set_c(43);
55 m->set_optional_nested_enum(
56 proto3_arena_unittest::TestAllTypes_NestedEnum_BAZ);
57 m->set_optional_foreign_enum(proto3_arena_unittest::FOREIGN_BAZ);
58 m->mutable_optional_lazy_message()->set_bb(45);
59 m->add_repeated_int32(100);
60 m->add_repeated_string(
"asdf");
61 m->add_repeated_bytes(
"jkl;");
62 m->add_repeated_nested_message()->set_bb(46);
63 m->add_repeated_foreign_message()->set_c(47);
64 m->add_repeated_nested_enum(
65 proto3_arena_unittest::TestAllTypes_NestedEnum_BAZ);
66 m->add_repeated_foreign_enum(proto3_arena_unittest::FOREIGN_BAZ);
67 m->add_repeated_lazy_message()->set_bb(49);
69 m->set_oneof_uint32(1);
70 m->mutable_oneof_nested_message()->set_bb(50);
71 m->set_oneof_string(
"test");
78 EXPECT_EQ(
true,
m.has_optional_nested_message());
79 EXPECT_EQ(42,
m.optional_nested_message().bb());
80 EXPECT_EQ(
true,
m.has_optional_foreign_message());
81 EXPECT_EQ(43,
m.optional_foreign_message().c());
82 EXPECT_EQ(proto3_arena_unittest::TestAllTypes_NestedEnum_BAZ,
83 m.optional_nested_enum());
84 EXPECT_EQ(proto3_arena_unittest::FOREIGN_BAZ,
m.optional_foreign_enum());
85 EXPECT_EQ(
true,
m.has_optional_lazy_message());
94 EXPECT_EQ(1,
m.repeated_nested_message_size());
95 EXPECT_EQ(46,
m.repeated_nested_message(0).bb());
96 EXPECT_EQ(1,
m.repeated_foreign_message_size());
97 EXPECT_EQ(47,
m.repeated_foreign_message(0).c());
99 EXPECT_EQ(proto3_arena_unittest::TestAllTypes_NestedEnum_BAZ,
100 m.repeated_nested_enum(0));
102 EXPECT_EQ(proto3_arena_unittest::FOREIGN_BAZ,
m.repeated_foreign_enum(0));
104 EXPECT_EQ(49,
m.repeated_lazy_message(0).bb());
106 EXPECT_EQ(proto3_arena_unittest::TestAllTypes::kOneofString,
107 m.oneof_field_case());
115 TEST(Proto3ArenaTest, Parsing) {
116 TestAllTypes original;
120 TestAllTypes* arena_message = Arena::CreateMessage<TestAllTypes>(&arena);
121 arena_message->ParseFromString(original.SerializeAsString());
126 TestAllTypes original;
130 TestAllTypes* arena_message = Arena::CreateMessage<TestAllTypes>(&arena);
131 arena_message->ParseFromString(original.SerializeAsString());
137 arena_message->GetReflection()->MutableUnknownFields(arena_message);
139 unknown_fields->AddVarint(1, 2);
141 ASSERT_NE(original.ByteSize(), arena_message->ByteSize());
143 arena_message->GetReflection()->GetUnknownFields(*arena_message).empty());
146 TEST(Proto3ArenaTest, Swap) {
151 TestAllTypes* arena1_message = Arena::CreateMessage<TestAllTypes>(&arena1);
152 TestAllTypes* arena2_message = Arena::CreateMessage<TestAllTypes>(&arena2);
153 arena1_message->Swap(arena2_message);
154 EXPECT_EQ(&arena1, arena1_message->GetArena());
155 EXPECT_EQ(&arena2, arena2_message->GetArena());
158 TEST(Proto3ArenaTest, SetAllocatedMessage) {
160 TestAllTypes* arena_message = Arena::CreateMessage<TestAllTypes>(&arena);
161 TestAllTypes::NestedMessage* nested =
new TestAllTypes::NestedMessage;
163 arena_message->set_allocated_optional_nested_message(nested);
164 EXPECT_EQ(118, arena_message->optional_nested_message().bb());
167 TEST(Proto3ArenaTest, ReleaseMessage) {
169 TestAllTypes* arena_message = Arena::CreateMessage<TestAllTypes>(&arena);
170 arena_message->mutable_optional_nested_message()->set_bb(118);
171 std::unique_ptr<TestAllTypes::NestedMessage> nested(
172 arena_message->release_optional_nested_message());
176 TEST(Proto3ArenaTest, MessageFieldClear) {
179 TestAllTypes* arena_message = Arena::CreateMessage<TestAllTypes>(&arena);
180 arena_message->mutable_optional_nested_message()->set_bb(118);
183 arena_message->Clear();
186 TEST(Proto3ArenaTest, MessageFieldClearViaReflection) {
188 TestAllTypes*
message = Arena::CreateMessage<TestAllTypes>(&arena);
189 const Reflection*
r =
message->GetReflection();
192 d->FindFieldByName(
"optional_nested_message");
194 message->mutable_optional_nested_message()->set_bb(1);