| Index: third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc b/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc
|
| index 5d82946d6145328900070004eec68f9da6c1757a..686c70a98ea0d7bc13ab537efea9600c8e7ad5d4 100644
|
| --- a/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc
|
| @@ -53,6 +53,7 @@
|
| #include <vector>
|
|
|
| #include <google/protobuf/unittest.pb.h>
|
| +#include <google/protobuf/unittest_no_arena.pb.h>
|
| #include <google/protobuf/unittest_optimize_for.pb.h>
|
| #include <google/protobuf/unittest_embed_optimize_for.pb.h>
|
| #if !defined(GOOGLE_PROTOBUF_CMAKE_BUILD) && !defined(_MSC_VER)
|
| @@ -67,6 +68,7 @@
|
| #include <google/protobuf/compiler/importer.h>
|
| #include <google/protobuf/io/coded_stream.h>
|
| #include <google/protobuf/io/zero_copy_stream_impl.h>
|
| +#include <google/protobuf/arena.h>
|
| #include <google/protobuf/descriptor.h>
|
| #include <google/protobuf/descriptor.pb.h>
|
| #include <google/protobuf/dynamic_message.h>
|
| @@ -129,12 +131,12 @@ TEST(GeneratedDescriptorTest, IdenticalDescriptors) {
|
|
|
| // Test that descriptors are generated correctly by converting them to
|
| // FileDescriptorProtos and comparing.
|
| - FileDescriptorProto generated_decsriptor_proto, parsed_descriptor_proto;
|
| - generated_descriptor->CopyTo(&generated_decsriptor_proto);
|
| + FileDescriptorProto generated_descriptor_proto, parsed_descriptor_proto;
|
| + generated_descriptor->CopyTo(&generated_descriptor_proto);
|
| parsed_descriptor->CopyTo(&parsed_descriptor_proto);
|
|
|
| EXPECT_EQ(parsed_descriptor_proto.DebugString(),
|
| - generated_decsriptor_proto.DebugString());
|
| + generated_descriptor_proto.DebugString());
|
| }
|
|
|
| #if !defined(GOOGLE_PROTOBUF_CMAKE_BUILD) && !defined(_MSC_VER)
|
| @@ -199,14 +201,14 @@ TEST(GeneratedMessageTest, FloatingPointDefaults) {
|
| EXPECT_EQ(-1.5f, extreme_default.negative_float());
|
| EXPECT_EQ(2.0e8f, extreme_default.large_float());
|
| EXPECT_EQ(-8e-28f, extreme_default.small_negative_float());
|
| - EXPECT_EQ(numeric_limits<double>::infinity(),
|
| + EXPECT_EQ(std::numeric_limits<double>::infinity(),
|
| extreme_default.inf_double());
|
| - EXPECT_EQ(-numeric_limits<double>::infinity(),
|
| + EXPECT_EQ(-std::numeric_limits<double>::infinity(),
|
| extreme_default.neg_inf_double());
|
| EXPECT_TRUE(extreme_default.nan_double() != extreme_default.nan_double());
|
| - EXPECT_EQ(numeric_limits<float>::infinity(),
|
| + EXPECT_EQ(std::numeric_limits<float>::infinity(),
|
| extreme_default.inf_float());
|
| - EXPECT_EQ(-numeric_limits<float>::infinity(),
|
| + EXPECT_EQ(-std::numeric_limits<float>::infinity(),
|
| extreme_default.neg_inf_float());
|
| EXPECT_TRUE(extreme_default.nan_float() != extreme_default.nan_float());
|
| }
|
| @@ -419,6 +421,51 @@ TEST(GeneratedMessageTest, StringCharStarLength) {
|
| EXPECT_EQ("wx", message.repeated_string(0));
|
| }
|
|
|
| +#if LANG_CXX11
|
| +TEST(GeneratedMessageTest, StringMove) {
|
| + // Verify that we trigger the move behavior on a scalar setter.
|
| + protobuf_unittest_no_arena::TestAllTypes message;
|
| + {
|
| + string tmp(32, 'a');
|
| +
|
| + const char* old_data = tmp.data();
|
| + message.set_optional_string(std::move(tmp));
|
| + const char* new_data = message.optional_string().data();
|
| +
|
| + EXPECT_EQ(old_data, new_data);
|
| + EXPECT_EQ(string(32, 'a'), message.optional_string());
|
| +
|
| + string tmp2(32, 'b');
|
| + old_data = tmp2.data();
|
| + message.set_optional_string(std::move(tmp2));
|
| + new_data = message.optional_string().data();
|
| +
|
| + EXPECT_EQ(old_data, new_data);
|
| + EXPECT_EQ(string(32, 'b'), message.optional_string());
|
| + }
|
| +
|
| + // Verify that we trigger the move behavior on a oneof setter.
|
| + {
|
| + string tmp(32, 'a');
|
| +
|
| + const char* old_data = tmp.data();
|
| + message.set_oneof_string(std::move(tmp));
|
| + const char* new_data = message.oneof_string().data();
|
| +
|
| + EXPECT_EQ(old_data, new_data);
|
| + EXPECT_EQ(string(32, 'a'), message.oneof_string());
|
| +
|
| + string tmp2(32, 'b');
|
| + old_data = tmp2.data();
|
| + message.set_oneof_string(std::move(tmp2));
|
| + new_data = message.oneof_string().data();
|
| +
|
| + EXPECT_EQ(old_data, new_data);
|
| + EXPECT_EQ(string(32, 'b'), message.oneof_string());
|
| + }
|
| +}
|
| +#endif
|
| +
|
|
|
| TEST(GeneratedMessageTest, CopyFrom) {
|
| unittest::TestAllTypes message1, message2;
|
| @@ -518,6 +565,26 @@ TEST(GeneratedMessageTest, CopyConstructor) {
|
| TestUtil::ExpectAllFieldsSet(message2);
|
| }
|
|
|
| +TEST(GeneratedMessageTest, CopyConstructorWithArenas) {
|
| + Arena arena;
|
| + unittest::TestAllTypes* message1 =
|
| + Arena::CreateMessage<unittest::TestAllTypes>(&arena);
|
| + TestUtil::SetAllFields(message1);
|
| +
|
| + unittest::TestAllTypes message2_stack(*message1);
|
| + TestUtil::ExpectAllFieldsSet(message2_stack);
|
| +
|
| + google::protobuf::scoped_ptr<unittest::TestAllTypes> message2_heap(
|
| + new unittest::TestAllTypes(*message1));
|
| + TestUtil::ExpectAllFieldsSet(*message2_heap);
|
| +
|
| + arena.Reset();
|
| +
|
| + // Verify that the copies are still intact.
|
| + TestUtil::ExpectAllFieldsSet(message2_stack);
|
| + TestUtil::ExpectAllFieldsSet(*message2_heap);
|
| +}
|
| +
|
| TEST(GeneratedMessageTest, CopyAssignmentOperator) {
|
| unittest::TestAllTypes message1;
|
| TestUtil::SetAllFields(&message1);
|
| @@ -600,14 +667,16 @@ TEST(GeneratedMessageTest, NonEmptyMergeFrom) {
|
| #if !defined(PROTOBUF_TEST_NO_DESCRIPTORS) || \
|
| !defined(GOOGLE_PROTOBUF_NO_RTTI)
|
| #ifdef PROTOBUF_HAS_DEATH_TEST
|
| +#ifndef NDEBUG
|
|
|
| TEST(GeneratedMessageTest, MergeFromSelf) {
|
| unittest::TestAllTypes message;
|
| - EXPECT_DEATH(message.MergeFrom(message), "Check failed:.*pb[.]cc");
|
| + EXPECT_DEATH(message.MergeFrom(message), "pb[.]cc.*Check failed:");
|
| EXPECT_DEATH(message.MergeFrom(implicit_cast<const Message&>(message)),
|
| - "Check failed:.*pb[.]cc");
|
| + "pb[.]cc.*Check failed:");
|
| }
|
|
|
| +#endif // NDEBUG
|
| #endif // PROTOBUF_HAS_DEATH_TEST
|
| #endif // !PROTOBUF_TEST_NO_DESCRIPTORS || !GOOGLE_PROTOBUF_NO_RTTI
|
|
|
| @@ -1252,7 +1321,7 @@ class GeneratedServiceTest : public testing::Test {
|
| foo_(descriptor_->FindMethodByName("Foo")),
|
| bar_(descriptor_->FindMethodByName("Bar")),
|
| stub_(&mock_channel_),
|
| - done_(::google::protobuf::internal::NewPermanentCallback(&DoNothing)) {}
|
| + done_(NewPermanentCallback(&DoNothing)) {}
|
|
|
| virtual void SetUp() {
|
| ASSERT_TRUE(foo_ != NULL);
|
|
|