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); |