35 #include <google/protobuf/unittest_proto3_arena.pb.h>
36 #include <google/protobuf/arena.h>
37 #include <google/protobuf/testing/googletest.h>
38 #include <gtest/gtest.h>
40 using proto3_arena_unittest::TestAllTypes;
48 m->set_optional_int32(100);
49 m->set_optional_string(
"asdf");
50 m->set_optional_bytes(
"jkl;");
51 m->mutable_optional_nested_message()->set_bb(42);
52 m->mutable_optional_foreign_message()->set_c(43);
53 m->set_optional_nested_enum(proto3_arena_unittest::TestAllTypes::BAZ);
54 m->set_optional_foreign_enum(proto3_arena_unittest::FOREIGN_BAZ);
55 m->mutable_optional_lazy_message()->set_bb(45);
56 m->add_repeated_int32(100);
57 m->add_repeated_string(
"asdf");
58 m->add_repeated_bytes(
"jkl;");
59 m->add_repeated_nested_message()->set_bb(46);
60 m->add_repeated_foreign_message()->set_c(47);
61 m->add_repeated_nested_enum(proto3_arena_unittest::TestAllTypes::BAZ);
62 m->add_repeated_foreign_enum(proto3_arena_unittest::FOREIGN_BAZ);
63 m->add_repeated_lazy_message()->set_bb(49);
65 m->set_oneof_uint32(1);
66 m->mutable_oneof_nested_message()->set_bb(50);
67 m->set_oneof_string(
"test");
74 EXPECT_EQ(
true,
m.has_optional_nested_message());
75 EXPECT_EQ(42,
m.optional_nested_message().bb());
76 EXPECT_EQ(
true,
m.has_optional_foreign_message());
77 EXPECT_EQ(43,
m.optional_foreign_message().c());
78 EXPECT_EQ(proto3_arena_unittest::TestAllTypes::BAZ,
m.optional_nested_enum());
79 EXPECT_EQ(proto3_arena_unittest::FOREIGN_BAZ,
m.optional_foreign_enum());
80 EXPECT_EQ(
true,
m.has_optional_lazy_message());
89 EXPECT_EQ(1,
m.repeated_nested_message_size());
90 EXPECT_EQ(46,
m.repeated_nested_message(0).bb());
91 EXPECT_EQ(1,
m.repeated_foreign_message_size());
92 EXPECT_EQ(47,
m.repeated_foreign_message(0).c());
94 EXPECT_EQ(proto3_arena_unittest::TestAllTypes::BAZ,
95 m.repeated_nested_enum(0));
97 EXPECT_EQ(proto3_arena_unittest::FOREIGN_BAZ,
m.repeated_foreign_enum(0));
99 EXPECT_EQ(49,
m.repeated_lazy_message(0).bb());
101 EXPECT_EQ(proto3_arena_unittest::TestAllTypes::kOneofString,
102 m.oneof_field_case());
110 TEST(Proto3ArenaLiteTest, Parsing) {
111 TestAllTypes original;
115 TestAllTypes* arena_message = Arena::CreateMessage<TestAllTypes>(&
arena);
116 arena_message->ParseFromString(original.SerializeAsString());
125 TestAllTypes* arena1_message = Arena::CreateMessage<TestAllTypes>(&arena1);
126 TestAllTypes* arena2_message = Arena::CreateMessage<TestAllTypes>(&arena2);
127 arena1_message->Swap(arena2_message);
128 EXPECT_EQ(&arena1, arena1_message->GetArena());
129 EXPECT_EQ(&arena2, arena2_message->GetArena());
132 TEST(Proto3ArenaLiteTest, SetAllocatedMessage) {
134 TestAllTypes* arena_message = Arena::CreateMessage<TestAllTypes>(&
arena);
135 TestAllTypes::NestedMessage*
nested =
new TestAllTypes::NestedMessage;
137 arena_message->set_allocated_optional_nested_message(
nested);
138 EXPECT_EQ(118, arena_message->optional_nested_message().bb());
141 TEST(Proto3ArenaLiteTest, ReleaseMessage) {
143 TestAllTypes* arena_message = Arena::CreateMessage<TestAllTypes>(&
arena);
144 arena_message->mutable_optional_nested_message()->set_bb(118);
145 std::unique_ptr<TestAllTypes::NestedMessage>
nested(
146 arena_message->release_optional_nested_message());