| 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 bd1c0fde03096f6854ea2b3e0304dff4020fc61e..1eae29b531f2b1f131f999ca6ba675633fcf73ff 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
|
| @@ -1,6 +1,6 @@
|
| // Protocol Buffers - Google's data interchange format
|
| // Copyright 2008 Google Inc. All rights reserved.
|
| -// https://developers.google.com/protocol-buffers/
|
| +// http://code.google.com/p/protobuf/
|
| //
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| @@ -46,19 +46,13 @@
|
|
|
| #include <google/protobuf/compiler/cpp/cpp_unittest.h>
|
|
|
| -#include <memory>
|
| -#ifndef _SHARED_PTR_H
|
| -#include <google/protobuf/stubs/shared_ptr.h>
|
| -#endif
|
| #include <vector>
|
|
|
| #include <google/protobuf/unittest.pb.h>
|
| #include <google/protobuf/unittest_optimize_for.pb.h>
|
| #include <google/protobuf/unittest_embed_optimize_for.pb.h>
|
| -#include <google/protobuf/unittest_enormous_descriptor.pb.h>
|
| #include <google/protobuf/unittest_no_generic_services.pb.h>
|
| #include <google/protobuf/test_util.h>
|
| -#include <google/protobuf/compiler/cpp/cpp_helpers.h>
|
| #include <google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h>
|
| #include <google/protobuf/compiler/importer.h>
|
| #include <google/protobuf/io/coded_stream.h>
|
| @@ -131,17 +125,6 @@ TEST(GeneratedDescriptorTest, IdenticalDescriptors) {
|
| generated_decsriptor_proto.DebugString());
|
| }
|
|
|
| -// Test that generated code has proper descriptors:
|
| -// Touch a descriptor generated from an enormous message to validate special
|
| -// handling for descriptors exceeding the C++ standard's recommended minimum
|
| -// limit for string literal size
|
| -TEST(GeneratedDescriptorTest, EnormousDescriptor) {
|
| - const Descriptor* generated_descriptor =
|
| - TestEnormousDescriptor::descriptor();
|
| -
|
| - EXPECT_TRUE(generated_descriptor != NULL);
|
| -}
|
| -
|
| #endif // !PROTOBUF_TEST_NO_DESCRIPTORS
|
|
|
| // ===================================================================
|
| @@ -165,21 +148,6 @@ TEST(GeneratedMessageTest, Defaults) {
|
| &message.optional_import_message());
|
| }
|
|
|
| -#ifndef PROTOBUF_USE_DLLS
|
| -TEST(GeneratedMessageTest, Int32StringConversion) {
|
| - EXPECT_EQ("971", Int32ToString(971));
|
| - EXPECT_EQ("(~0x7fffffff)", Int32ToString(kint32min));
|
| - EXPECT_EQ("2147483647", Int32ToString(kint32max));
|
| -}
|
| -
|
| -TEST(GeneratedMessageTest, Int64StringConversion) {
|
| - EXPECT_EQ("GOOGLE_LONGLONG(971)", Int64ToString(971));
|
| - EXPECT_EQ("GOOGLE_LONGLONG(-2147483648)", Int64ToString(kint32min));
|
| - EXPECT_EQ("GOOGLE_LONGLONG(~0x7fffffffffffffff)", Int64ToString(kint64min));
|
| - EXPECT_EQ("GOOGLE_LONGLONG(9223372036854775807)", Int64ToString(kint64max));
|
| -}
|
| -#endif // !PROTOBUF_USE_DLLS
|
| -
|
| TEST(GeneratedMessageTest, FloatingPointDefaults) {
|
| const unittest::TestExtremeDefaultValues& extreme_default =
|
| unittest::TestExtremeDefaultValues::default_instance();
|
| @@ -213,8 +181,8 @@ TEST(GeneratedMessageTest, Trigraph) {
|
| TEST(GeneratedMessageTest, ExtremeSmallIntegerDefault) {
|
| const unittest::TestExtremeDefaultValues& extreme_default =
|
| unittest::TestExtremeDefaultValues::default_instance();
|
| - EXPECT_EQ(~0x7fffffff, kint32min);
|
| - EXPECT_EQ(GOOGLE_LONGLONG(~0x7fffffffffffffff), kint64min);
|
| + EXPECT_EQ(-0x80000000, kint32min);
|
| + EXPECT_EQ(GOOGLE_LONGLONG(-0x8000000000000000), kint64min);
|
| EXPECT_EQ(kint32min, extreme_default.really_small_int32());
|
| EXPECT_EQ(kint64min, extreme_default.really_small_int64());
|
| }
|
| @@ -265,10 +233,11 @@ TEST(GeneratedMessageTest, ReleaseString) {
|
|
|
| message.set_default_string("blah");
|
| EXPECT_TRUE(message.has_default_string());
|
| - google::protobuf::scoped_ptr<string> str(message.release_default_string());
|
| + string* str = message.release_default_string();
|
| EXPECT_FALSE(message.has_default_string());
|
| ASSERT_TRUE(str != NULL);
|
| EXPECT_EQ("blah", *str);
|
| + delete str;
|
|
|
| EXPECT_EQ(NULL, message.release_default_string());
|
| EXPECT_FALSE(message.has_default_string());
|
| @@ -284,11 +253,12 @@ TEST(GeneratedMessageTest, ReleaseMessage) {
|
| EXPECT_FALSE(message.has_optional_nested_message());
|
|
|
| message.mutable_optional_nested_message()->set_bb(1);
|
| - google::protobuf::scoped_ptr<unittest::TestAllTypes::NestedMessage> nest(
|
| - message.release_optional_nested_message());
|
| + unittest::TestAllTypes::NestedMessage* nest =
|
| + message.release_optional_nested_message();
|
| EXPECT_FALSE(message.has_optional_nested_message());
|
| ASSERT_TRUE(nest != NULL);
|
| EXPECT_EQ(1, nest->bb());
|
| + delete nest;
|
|
|
| EXPECT_EQ(NULL, message.release_optional_nested_message());
|
| EXPECT_FALSE(message.has_optional_nested_message());
|
| @@ -411,7 +381,6 @@ TEST(GeneratedMessageTest, StringCharStarLength) {
|
| EXPECT_EQ("wx", message.repeated_string(0));
|
| }
|
|
|
| -
|
| TEST(GeneratedMessageTest, CopyFrom) {
|
| unittest::TestAllTypes message1, message2;
|
|
|
| @@ -424,7 +393,6 @@ TEST(GeneratedMessageTest, CopyFrom) {
|
| TestUtil::ExpectAllFieldsSet(message2);
|
| }
|
|
|
| -
|
| TEST(GeneratedMessageTest, SwapWithEmpty) {
|
| unittest::TestAllTypes message1, message2;
|
| TestUtil::SetAllFields(&message1);
|
| @@ -548,7 +516,7 @@ TEST(GeneratedMessageTest, DynamicMessageCopyFrom) {
|
|
|
| // Construct a new version of the dynamic message via the factory.
|
| DynamicMessageFactory factory;
|
| - google::protobuf::scoped_ptr<Message> message1;
|
| + scoped_ptr<Message> message1;
|
| message1.reset(factory.GetPrototype(
|
| unittest::TestAllTypes::descriptor())->New());
|
|
|
| @@ -595,9 +563,9 @@ TEST(GeneratedMessageTest, NonEmptyMergeFrom) {
|
|
|
| TEST(GeneratedMessageTest, MergeFromSelf) {
|
| unittest::TestAllTypes message;
|
| - EXPECT_DEATH(message.MergeFrom(message), "Check failed:.*pb[.]cc");
|
| + EXPECT_DEATH(message.MergeFrom(message), "&from");
|
| EXPECT_DEATH(message.MergeFrom(implicit_cast<const Message&>(message)),
|
| - "Check failed:.*pb[.]cc");
|
| + "&from");
|
| }
|
|
|
| #endif // PROTOBUF_HAS_DEATH_TEST
|
| @@ -795,9 +763,6 @@ TEST(GeneratedMessageTest, TestConflictingSymbolNames) {
|
| message.set_friend_(5);
|
| EXPECT_EQ(5, message.friend_());
|
|
|
| - message.set_class_(6);
|
| - EXPECT_EQ(6, message.class_());
|
| -
|
| // Instantiate extension template functions to test conflicting template
|
| // parameter names.
|
| typedef protobuf_unittest::TestConflictingSymbolNamesExtension ExtensionMessage;
|
| @@ -806,21 +771,6 @@ TEST(GeneratedMessageTest, TestConflictingSymbolNames) {
|
| message.GetExtension(ExtensionMessage::repeated_int32_ext, 0));
|
| }
|
|
|
| -TEST(GeneratedMessageTest, TestConflictingEnumNames) {
|
| - protobuf_unittest::TestConflictingEnumNames message;
|
| - message.set_conflicting_enum(protobuf_unittest::TestConflictingEnumNames_NestedConflictingEnum_and_);
|
| - EXPECT_EQ(1, message.conflicting_enum());
|
| - message.set_conflicting_enum(protobuf_unittest::TestConflictingEnumNames_NestedConflictingEnum_XOR);
|
| - EXPECT_EQ(5, message.conflicting_enum());
|
| -
|
| -
|
| - protobuf_unittest::ConflictingEnum conflicting_enum;
|
| - conflicting_enum = protobuf_unittest::NOT_EQ;
|
| - EXPECT_EQ(1, conflicting_enum);
|
| - conflicting_enum = protobuf_unittest::return_;
|
| - EXPECT_EQ(3, conflicting_enum);
|
| -}
|
| -
|
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS
|
|
|
| TEST(GeneratedMessageTest, TestOptimizedForSize) {
|
| @@ -890,40 +840,6 @@ TEST(GeneratedMessageTest, TestSpaceUsed) {
|
| message1.SpaceUsed());
|
| }
|
|
|
| -TEST(GeneratedMessageTest, TestOneofSpaceUsed) {
|
| - unittest::TestOneof2 message1;
|
| - EXPECT_LE(sizeof(unittest::TestOneof2), message1.SpaceUsed());
|
| -
|
| - const int empty_message_size = message1.SpaceUsed();
|
| - // Setting primitive types shouldn't affect the space used.
|
| - message1.set_foo_int(123);
|
| - message1.set_bar_int(12345);
|
| - EXPECT_EQ(empty_message_size, message1.SpaceUsed());
|
| -
|
| - // Setting a string in oneof to a small value should only increase SpaceUsed()
|
| - // by the size of a string object.
|
| - message1.set_foo_string("abc");
|
| - EXPECT_LE(empty_message_size + sizeof(string), message1.SpaceUsed());
|
| -
|
| - // Setting a string in oneof to a value larger than the string object itself
|
| - // should increase SpaceUsed(), because it cannot store the value internally.
|
| - message1.set_foo_string(string(sizeof(string) + 1, 'x'));
|
| - int min_expected_increase = message1.foo_string().capacity() +
|
| - sizeof(string);
|
| - EXPECT_LE(empty_message_size + min_expected_increase,
|
| - message1.SpaceUsed());
|
| -
|
| - // Setting a message in oneof should delete the other fields and increase the
|
| - // size by the size of the nested message type. NestedMessage is simple enough
|
| - // that it is equal to sizeof(NestedMessage)
|
| - message1.mutable_foo_message();
|
| - ASSERT_EQ(sizeof(unittest::TestOneof2::NestedMessage),
|
| - message1.foo_message().SpaceUsed());
|
| - EXPECT_EQ(empty_message_size +
|
| - sizeof(unittest::TestOneof2::NestedMessage),
|
| - message1.SpaceUsed());
|
| -}
|
| -
|
| #endif // !PROTOBUF_TEST_NO_DESCRIPTORS
|
|
|
|
|
| @@ -953,22 +869,6 @@ TEST(GeneratedMessageTest, ExtensionConstantValues) {
|
| EXPECT_EQ(unittest::kRepeatedNestedEnumExtensionFieldNumber, 51);
|
| }
|
|
|
| -TEST(GeneratedMessageTest, ParseFromTruncated) {
|
| - const string long_string = string(128, 'q');
|
| - FileDescriptorProto p;
|
| - p.add_extension()->set_name(long_string);
|
| - const string msg = p.SerializeAsString();
|
| - int successful_count = 0;
|
| - for (int i = 0; i <= msg.size(); i++) {
|
| - if (p.ParseFromArray(msg.c_str(), i)) {
|
| - ++successful_count;
|
| - }
|
| - }
|
| - // We don't really care about how often we succeeded.
|
| - // As long as we didn't crash, we're happy.
|
| - EXPECT_GE(successful_count, 1);
|
| -}
|
| -
|
| // ===================================================================
|
|
|
| TEST(GeneratedEnumTest, EnumValuesAsSwitchCases) {
|
| @@ -987,9 +887,6 @@ TEST(GeneratedEnumTest, EnumValuesAsSwitchCases) {
|
| case unittest::TestAllTypes::BAZ:
|
| i = 3;
|
| break;
|
| - case unittest::TestAllTypes::NEG:
|
| - i = -1;
|
| - break;
|
| // no default case: We want to make sure the compiler recognizes that
|
| // all cases are covered. (GCC warns if you do not cover all cases of
|
| // an enum in a switch.)
|
| @@ -1018,7 +915,7 @@ TEST(GeneratedEnumTest, IsValidValue) {
|
| }
|
|
|
| TEST(GeneratedEnumTest, MinAndMax) {
|
| - EXPECT_EQ(unittest::TestAllTypes::NEG,
|
| + EXPECT_EQ(unittest::TestAllTypes::FOO,
|
| unittest::TestAllTypes::NestedEnum_MIN);
|
| EXPECT_EQ(unittest::TestAllTypes::BAZ,
|
| unittest::TestAllTypes::NestedEnum_MAX);
|
| @@ -1092,20 +989,6 @@ TEST(GeneratedEnumTest, GetEnumDescriptor) {
|
| GetEnumDescriptor<unittest::TestSparseEnum>());
|
| }
|
|
|
| -enum NonProtoEnum {
|
| - kFoo = 1,
|
| -};
|
| -
|
| -TEST(GeneratedEnumTest, IsProtoEnumTypeTrait) {
|
| - EXPECT_TRUE(is_proto_enum<unittest::TestAllTypes::NestedEnum>::value);
|
| - EXPECT_TRUE(is_proto_enum<unittest::ForeignEnum>::value);
|
| - EXPECT_TRUE(is_proto_enum<unittest::TestEnumWithDupValue>::value);
|
| - EXPECT_TRUE(is_proto_enum<unittest::TestSparseEnum>::value);
|
| -
|
| - EXPECT_FALSE(is_proto_enum<int>::value);
|
| - EXPECT_FALSE(is_proto_enum<NonProtoEnum>::value);
|
| -}
|
| -
|
| #endif // PROTOBUF_TEST_NO_DESCRIPTORS
|
|
|
| // ===================================================================
|
| @@ -1266,7 +1149,7 @@ class GeneratedServiceTest : public testing::Test {
|
| unittest::FooResponse foo_response_;
|
| unittest::BarRequest bar_request_;
|
| unittest::BarResponse bar_response_;
|
| - google::protobuf::scoped_ptr<Closure> done_;
|
| + scoped_ptr<Closure> done_;
|
| };
|
|
|
| TEST_F(GeneratedServiceTest, GetDescriptor) {
|
| @@ -1405,666 +1288,6 @@ TEST_F(GeneratedServiceTest, NotImplemented) {
|
| EXPECT_TRUE(controller.called_);
|
| }
|
|
|
| -// ===================================================================
|
| -
|
| -class OneofTest : public testing::Test {
|
| - protected:
|
| - virtual void SetUp() {
|
| - }
|
| -
|
| - void ExpectEnumCasesWork(const unittest::TestOneof2 &message) {
|
| - switch (message.foo_case()) {
|
| - case unittest::TestOneof2::kFooInt:
|
| - EXPECT_TRUE(message.has_foo_int());
|
| - break;
|
| - case unittest::TestOneof2::kFooString:
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - break;
|
| - case unittest::TestOneof2::kFooCord:
|
| - EXPECT_TRUE(message.has_foo_cord());
|
| - break;
|
| - case unittest::TestOneof2::kFooStringPiece:
|
| - EXPECT_TRUE(message.has_foo_string_piece());
|
| - break;
|
| - case unittest::TestOneof2::kFooBytes:
|
| - EXPECT_TRUE(message.has_foo_bytes());
|
| - break;
|
| - case unittest::TestOneof2::kFooEnum:
|
| - EXPECT_TRUE(message.has_foo_enum());
|
| - break;
|
| - case unittest::TestOneof2::kFooMessage:
|
| - EXPECT_TRUE(message.has_foo_message());
|
| - break;
|
| - case unittest::TestOneof2::kFoogroup:
|
| - EXPECT_TRUE(message.has_foogroup());
|
| - break;
|
| - case unittest::TestOneof2::kFooLazyMessage:
|
| - EXPECT_TRUE(message.has_foo_lazy_message());
|
| - break;
|
| - case unittest::TestOneof2::FOO_NOT_SET:
|
| - break;
|
| - }
|
| - }
|
| -};
|
| -
|
| -TEST_F(OneofTest, SettingOneFieldClearsOthers) {
|
| - unittest::TestOneof2 message;
|
| -
|
| - message.set_foo_int(123);
|
| - EXPECT_TRUE(message.has_foo_int());
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message);
|
| -
|
| - message.set_foo_string("foo");
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message);
|
| -
|
| -
|
| - message.set_foo_bytes("qux");
|
| - EXPECT_TRUE(message.has_foo_bytes());
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message);
|
| -
|
| - message.set_foo_enum(unittest::TestOneof2::FOO);
|
| - EXPECT_TRUE(message.has_foo_enum());
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message);
|
| -
|
| - message.mutable_foo_message()->set_qux_int(234);
|
| - EXPECT_TRUE(message.has_foo_message());
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message);
|
| -
|
| - message.mutable_foogroup()->set_a(345);
|
| - EXPECT_TRUE(message.has_foogroup());
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message);
|
| -
|
| -
|
| - // we repeat this because we didn't test if this properly clears other fields
|
| - // at the beginning.
|
| - message.set_foo_int(123);
|
| - EXPECT_TRUE(message.has_foo_int());
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message);
|
| -}
|
| -
|
| -TEST_F(OneofTest, EnumCases) {
|
| - unittest::TestOneof2 message;
|
| -
|
| - message.set_foo_int(123);
|
| - ExpectEnumCasesWork(message);
|
| - message.set_foo_string("foo");
|
| - ExpectEnumCasesWork(message);
|
| - message.set_foo_bytes("qux");
|
| - ExpectEnumCasesWork(message);
|
| - message.set_foo_enum(unittest::TestOneof2::FOO);
|
| - ExpectEnumCasesWork(message);
|
| - message.mutable_foo_message()->set_qux_int(234);
|
| - ExpectEnumCasesWork(message);
|
| - message.mutable_foogroup()->set_a(345);
|
| - ExpectEnumCasesWork(message);
|
| -}
|
| -
|
| -TEST_F(OneofTest, PrimitiveType) {
|
| - unittest::TestOneof2 message;
|
| - // Unset field returns default value
|
| - EXPECT_EQ(message.foo_int(), 0);
|
| -
|
| - message.set_foo_int(123);
|
| - EXPECT_TRUE(message.has_foo_int());
|
| - EXPECT_EQ(message.foo_int(), 123);
|
| - message.clear_foo_int();
|
| - EXPECT_FALSE(message.has_foo_int());
|
| -}
|
| -
|
| -TEST_F(OneofTest, EnumType) {
|
| - unittest::TestOneof2 message;
|
| - // Unset field returns default value
|
| - EXPECT_EQ(message.foo_enum(), 1);
|
| -
|
| - message.set_foo_enum(unittest::TestOneof2::FOO);
|
| - EXPECT_TRUE(message.has_foo_enum());
|
| - EXPECT_EQ(message.foo_enum(), unittest::TestOneof2::FOO);
|
| - message.clear_foo_enum();
|
| - EXPECT_FALSE(message.has_foo_enum());
|
| -}
|
| -
|
| -TEST_F(OneofTest, SetString) {
|
| - // Check that setting a string field in various ways works
|
| - unittest::TestOneof2 message;
|
| -
|
| - // Unset field returns default value
|
| - EXPECT_EQ(message.foo_string(), "");
|
| -
|
| - message.set_foo_string("foo");
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - EXPECT_EQ(message.foo_string(), "foo");
|
| - message.clear_foo_string();
|
| - EXPECT_FALSE(message.has_foo_string());
|
| -
|
| - message.set_foo_string(string("bar"));
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - EXPECT_EQ(message.foo_string(), "bar");
|
| - message.clear_foo_string();
|
| - EXPECT_FALSE(message.has_foo_string());
|
| -
|
| -
|
| - message.set_foo_string("qux", 3);
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - EXPECT_EQ(message.foo_string(), "qux");
|
| - message.clear_foo_string();
|
| - EXPECT_FALSE(message.has_foo_string());
|
| -
|
| - message.mutable_foo_string()->assign("quux");
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - EXPECT_EQ(message.foo_string(), "quux");
|
| - message.clear_foo_string();
|
| - EXPECT_FALSE(message.has_foo_string());
|
| -
|
| - message.set_foo_string("corge");
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - EXPECT_EQ(message.foo_string(), "corge");
|
| - message.clear_foo_string();
|
| - EXPECT_FALSE(message.has_foo_string());
|
| -}
|
| -
|
| -TEST_F(OneofTest, ReleaseString) {
|
| - // Check that release_foo() starts out NULL, and gives us a value
|
| - // that we can delete after it's been set.
|
| - unittest::TestOneof2 message;
|
| -
|
| - EXPECT_EQ(NULL, message.release_foo_string());
|
| - EXPECT_FALSE(message.has_foo_string());
|
| -
|
| - message.set_foo_string("blah");
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - google::protobuf::scoped_ptr<string> str(message.release_foo_string());
|
| - EXPECT_FALSE(message.has_foo_string());
|
| - ASSERT_TRUE(str != NULL);
|
| - EXPECT_EQ("blah", *str);
|
| -
|
| - EXPECT_EQ(NULL, message.release_foo_string());
|
| - EXPECT_FALSE(message.has_foo_string());
|
| -}
|
| -
|
| -TEST_F(OneofTest, SetAllocatedString) {
|
| - // Check that set_allocated_foo() works for strings.
|
| - unittest::TestOneof2 message;
|
| -
|
| - EXPECT_FALSE(message.has_foo_string());
|
| - const string kHello("hello");
|
| - message.set_foo_string(kHello);
|
| - EXPECT_TRUE(message.has_foo_string());
|
| -
|
| - message.set_allocated_foo_string(NULL);
|
| - EXPECT_FALSE(message.has_foo_string());
|
| - EXPECT_EQ("", message.foo_string());
|
| -
|
| - message.set_allocated_foo_string(new string(kHello));
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - EXPECT_EQ(kHello, message.foo_string());
|
| -}
|
| -
|
| -
|
| -TEST_F(OneofTest, SetMessage) {
|
| - // Check that setting a message field works
|
| - unittest::TestOneof2 message;
|
| -
|
| - // Unset field returns default instance
|
| - EXPECT_EQ(&message.foo_message(),
|
| - &unittest::TestOneof2_NestedMessage::default_instance());
|
| - EXPECT_EQ(message.foo_message().qux_int(), 0);
|
| -
|
| - message.mutable_foo_message()->set_qux_int(234);
|
| - EXPECT_TRUE(message.has_foo_message());
|
| - EXPECT_EQ(message.foo_message().qux_int(), 234);
|
| - message.clear_foo_message();
|
| - EXPECT_FALSE(message.has_foo_message());
|
| -}
|
| -
|
| -TEST_F(OneofTest, ReleaseMessage) {
|
| - // Check that release_foo() starts out NULL, and gives us a value
|
| - // that we can delete after it's been set.
|
| - unittest::TestOneof2 message;
|
| -
|
| - EXPECT_EQ(NULL, message.release_foo_message());
|
| - EXPECT_FALSE(message.has_foo_message());
|
| -
|
| - message.mutable_foo_message()->set_qux_int(1);
|
| - EXPECT_TRUE(message.has_foo_message());
|
| - google::protobuf::scoped_ptr<unittest::TestOneof2_NestedMessage> mes(
|
| - message.release_foo_message());
|
| - EXPECT_FALSE(message.has_foo_message());
|
| - ASSERT_TRUE(mes != NULL);
|
| - EXPECT_EQ(1, mes->qux_int());
|
| -
|
| - EXPECT_EQ(NULL, message.release_foo_message());
|
| - EXPECT_FALSE(message.has_foo_message());
|
| -}
|
| -
|
| -TEST_F(OneofTest, SetAllocatedMessage) {
|
| - // Check that set_allocated_foo() works for messages.
|
| - unittest::TestOneof2 message;
|
| -
|
| - EXPECT_FALSE(message.has_foo_message());
|
| -
|
| - message.mutable_foo_message()->set_qux_int(1);
|
| - EXPECT_TRUE(message.has_foo_message());
|
| -
|
| - message.set_allocated_foo_message(NULL);
|
| - EXPECT_FALSE(message.has_foo_message());
|
| - EXPECT_EQ(&message.foo_message(),
|
| - &unittest::TestOneof2_NestedMessage::default_instance());
|
| -
|
| - message.mutable_foo_message()->set_qux_int(1);
|
| - unittest::TestOneof2_NestedMessage* mes = message.release_foo_message();
|
| - ASSERT_TRUE(mes != NULL);
|
| - EXPECT_FALSE(message.has_foo_message());
|
| -
|
| - message.set_allocated_foo_message(mes);
|
| - EXPECT_TRUE(message.has_foo_message());
|
| - EXPECT_EQ(1, message.foo_message().qux_int());
|
| -}
|
| -
|
| -
|
| -TEST_F(OneofTest, Clear) {
|
| - unittest::TestOneof2 message;
|
| -
|
| - message.set_foo_int(1);
|
| - EXPECT_TRUE(message.has_foo_int());
|
| - message.clear_foo_int();
|
| - EXPECT_FALSE(message.has_foo_int());
|
| -}
|
| -
|
| -TEST_F(OneofTest, Defaults) {
|
| - unittest::TestOneof2 message;
|
| -
|
| - EXPECT_FALSE(message.has_foo_int());
|
| - EXPECT_EQ(message.foo_int(), 0);
|
| -
|
| - EXPECT_FALSE(message.has_foo_string());
|
| - EXPECT_EQ(message.foo_string(), "");
|
| -
|
| -
|
| - EXPECT_FALSE(message.has_foo_bytes());
|
| - EXPECT_EQ(message.foo_bytes(), "");
|
| -
|
| - EXPECT_FALSE(message.has_foo_enum());
|
| - EXPECT_EQ(message.foo_enum(), 1);
|
| -
|
| - EXPECT_FALSE(message.has_foo_message());
|
| - EXPECT_EQ(message.foo_message().qux_int(), 0);
|
| -
|
| - EXPECT_FALSE(message.has_foogroup());
|
| - EXPECT_EQ(message.foogroup().a(), 0);
|
| -
|
| -
|
| - EXPECT_FALSE(message.has_bar_int());
|
| - EXPECT_EQ(message.bar_int(), 5);
|
| -
|
| - EXPECT_FALSE(message.has_bar_string());
|
| - EXPECT_EQ(message.bar_string(), "STRING");
|
| -
|
| -
|
| - EXPECT_FALSE(message.has_bar_bytes());
|
| - EXPECT_EQ(message.bar_bytes(), "BYTES");
|
| -
|
| - EXPECT_FALSE(message.has_bar_enum());
|
| - EXPECT_EQ(message.bar_enum(), 2);
|
| -}
|
| -
|
| -TEST_F(OneofTest, SwapWithEmpty) {
|
| - unittest::TestOneof2 message1, message2;
|
| - message1.set_foo_string("FOO");
|
| - EXPECT_TRUE(message1.has_foo_string());
|
| - message1.Swap(&message2);
|
| - EXPECT_FALSE(message1.has_foo_string());
|
| - EXPECT_TRUE(message2.has_foo_string());
|
| - EXPECT_EQ(message2.foo_string(), "FOO");
|
| -}
|
| -
|
| -TEST_F(OneofTest, SwapWithSelf) {
|
| - unittest::TestOneof2 message;
|
| - message.set_foo_string("FOO");
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - message.Swap(&message);
|
| - EXPECT_TRUE(message.has_foo_string());
|
| - EXPECT_EQ(message.foo_string(), "FOO");
|
| -}
|
| -
|
| -TEST_F(OneofTest, SwapBothHasFields) {
|
| - unittest::TestOneof2 message1, message2;
|
| -
|
| - message1.set_foo_string("FOO");
|
| - EXPECT_TRUE(message1.has_foo_string());
|
| - message2.mutable_foo_message()->set_qux_int(1);
|
| - EXPECT_TRUE(message2.has_foo_message());
|
| -
|
| - message1.Swap(&message2);
|
| - EXPECT_FALSE(message1.has_foo_string());
|
| - EXPECT_FALSE(message2.has_foo_message());
|
| - EXPECT_TRUE(message1.has_foo_message());
|
| - EXPECT_EQ(message1.foo_message().qux_int(), 1);
|
| - EXPECT_TRUE(message2.has_foo_string());
|
| - EXPECT_EQ(message2.foo_string(), "FOO");
|
| -}
|
| -
|
| -TEST_F(OneofTest, CopyConstructor) {
|
| - unittest::TestOneof2 message1;
|
| - message1.set_foo_bytes("FOO");
|
| -
|
| - unittest::TestOneof2 message2(message1);
|
| - EXPECT_TRUE(message2.has_foo_bytes());
|
| - EXPECT_EQ(message2.foo_bytes(), "FOO");
|
| -}
|
| -
|
| -TEST_F(OneofTest, CopyFrom) {
|
| - unittest::TestOneof2 message1, message2;
|
| - message1.set_foo_enum(unittest::TestOneof2::BAR);
|
| - EXPECT_TRUE(message1.has_foo_enum());
|
| -
|
| - message2.CopyFrom(message1);
|
| - EXPECT_TRUE(message2.has_foo_enum());
|
| - EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::BAR);
|
| -
|
| - // Copying from self should be a no-op.
|
| - message2.CopyFrom(message2);
|
| - EXPECT_TRUE(message2.has_foo_enum());
|
| - EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::BAR);
|
| -}
|
| -
|
| -TEST_F(OneofTest, CopyAssignmentOperator) {
|
| - unittest::TestOneof2 message1;
|
| - message1.mutable_foo_message()->set_qux_int(123);
|
| - EXPECT_TRUE(message1.has_foo_message());
|
| -
|
| - unittest::TestOneof2 message2;
|
| - message2 = message1;
|
| - EXPECT_EQ(message2.foo_message().qux_int(), 123);
|
| -
|
| - // Make sure that self-assignment does something sane.
|
| - message2 = message2;
|
| - EXPECT_EQ(message2.foo_message().qux_int(), 123);
|
| -}
|
| -
|
| -TEST_F(OneofTest, UpcastCopyFrom) {
|
| - // Test the CopyFrom method that takes in the generic const Message&
|
| - // parameter.
|
| - unittest::TestOneof2 message1, message2;
|
| - message1.mutable_foogroup()->set_a(123);
|
| - EXPECT_TRUE(message1.has_foogroup());
|
| -
|
| - const Message* source = implicit_cast<const Message*>(&message1);
|
| - message2.CopyFrom(*source);
|
| -
|
| - EXPECT_TRUE(message2.has_foogroup());
|
| - EXPECT_EQ(message2.foogroup().a(), 123);
|
| -}
|
| -
|
| -// Test the generated SerializeWithCachedSizesToArray(),
|
| -// This indirectly tests MergePartialFromCodedStream()
|
| -// We have to test each field type separately because we cannot set them at the
|
| -// same time
|
| -TEST_F(OneofTest, SerializationToArray) {
|
| - // Primitive type
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.set_foo_int(123);
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| - uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
|
| - uint8* end = message1.SerializeWithCachedSizesToArray(start);
|
| - EXPECT_EQ(size, end - start);
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_int(), 123);
|
| - }
|
| -
|
| - // String
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.set_foo_string("foo");
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| - uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
|
| - uint8* end = message1.SerializeWithCachedSizesToArray(start);
|
| - EXPECT_EQ(size, end - start);
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_string(), "foo");
|
| - }
|
| -
|
| -
|
| - // Bytes
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.set_foo_bytes("qux");
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| - uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
|
| - uint8* end = message1.SerializeWithCachedSizesToArray(start);
|
| - EXPECT_EQ(size, end - start);
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_bytes(), "qux");
|
| - }
|
| -
|
| - // Enum
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.set_foo_enum(unittest::TestOneof2::FOO);
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| - uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
|
| - uint8* end = message1.SerializeWithCachedSizesToArray(start);
|
| - EXPECT_EQ(size, end - start);
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::FOO);
|
| - }
|
| -
|
| - // Message
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.mutable_foo_message()->set_qux_int(234);
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| - uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
|
| - uint8* end = message1.SerializeWithCachedSizesToArray(start);
|
| - EXPECT_EQ(size, end - start);
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_message().qux_int(), 234);
|
| - }
|
| -
|
| - // Group
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.mutable_foogroup()->set_a(345);
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| - uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
|
| - uint8* end = message1.SerializeWithCachedSizesToArray(start);
|
| - EXPECT_EQ(size, end - start);
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foogroup().a(), 345);
|
| - }
|
| -
|
| -}
|
| -
|
| -// Test the generated SerializeWithCachedSizes() by forcing the buffer to write
|
| -// one byte at a time.
|
| -// This indirectly tests MergePartialFromCodedStream()
|
| -// We have to test each field type separately because we cannot set them at the
|
| -// same time
|
| -TEST_F(OneofTest, SerializationToStream) {
|
| - // Primitive type
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.set_foo_int(123);
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| -
|
| - {
|
| - // Allow the output stream to buffer only one byte at a time.
|
| - io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
|
| - io::CodedOutputStream output_stream(&array_stream);
|
| - message1.SerializeWithCachedSizes(&output_stream);
|
| - EXPECT_FALSE(output_stream.HadError());
|
| - EXPECT_EQ(size, output_stream.ByteCount());
|
| - }
|
| -
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_int(), 123);
|
| - }
|
| -
|
| - // String
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.set_foo_string("foo");
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| -
|
| - {
|
| - // Allow the output stream to buffer only one byte at a time.
|
| - io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
|
| - io::CodedOutputStream output_stream(&array_stream);
|
| - message1.SerializeWithCachedSizes(&output_stream);
|
| - EXPECT_FALSE(output_stream.HadError());
|
| - EXPECT_EQ(size, output_stream.ByteCount());
|
| - }
|
| -
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_string(), "foo");
|
| - }
|
| -
|
| -
|
| - // Bytes
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.set_foo_bytes("qux");
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| -
|
| - {
|
| - // Allow the output stream to buffer only one byte at a time.
|
| - io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
|
| - io::CodedOutputStream output_stream(&array_stream);
|
| - message1.SerializeWithCachedSizes(&output_stream);
|
| - EXPECT_FALSE(output_stream.HadError());
|
| - EXPECT_EQ(size, output_stream.ByteCount());
|
| - }
|
| -
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_bytes(), "qux");
|
| - }
|
| -
|
| - // Enum
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.set_foo_enum(unittest::TestOneof2::FOO);
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| -
|
| - {
|
| - // Allow the output stream to buffer only one byte at a time.
|
| - io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
|
| - io::CodedOutputStream output_stream(&array_stream);
|
| - message1.SerializeWithCachedSizes(&output_stream);
|
| - EXPECT_FALSE(output_stream.HadError());
|
| - EXPECT_EQ(size, output_stream.ByteCount());
|
| - }
|
| -
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::FOO);
|
| - }
|
| -
|
| - // Message
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.mutable_foo_message()->set_qux_int(234);
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| -
|
| - {
|
| - // Allow the output stream to buffer only one byte at a time.
|
| - io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
|
| - io::CodedOutputStream output_stream(&array_stream);
|
| - message1.SerializeWithCachedSizes(&output_stream);
|
| - EXPECT_FALSE(output_stream.HadError());
|
| - EXPECT_EQ(size, output_stream.ByteCount());
|
| - }
|
| -
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foo_message().qux_int(), 234);
|
| - }
|
| -
|
| - // Group
|
| - {
|
| - unittest::TestOneof2 message1, message2;
|
| - string data;
|
| - message1.mutable_foogroup()->set_a(345);
|
| - int size = message1.ByteSize();
|
| - data.resize(size);
|
| -
|
| - {
|
| - // Allow the output stream to buffer only one byte at a time.
|
| - io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
|
| - io::CodedOutputStream output_stream(&array_stream);
|
| - message1.SerializeWithCachedSizes(&output_stream);
|
| - EXPECT_FALSE(output_stream.HadError());
|
| - EXPECT_EQ(size, output_stream.ByteCount());
|
| - }
|
| -
|
| - EXPECT_TRUE(message2.ParseFromString(data));
|
| - EXPECT_EQ(message2.foogroup().a(), 345);
|
| - }
|
| -
|
| -}
|
| -
|
| -TEST_F(OneofTest, MergeFrom) {
|
| - unittest::TestOneof2 message1, message2;
|
| -
|
| - message1.set_foo_int(123);
|
| - message2.MergeFrom(message1);
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
|
| - EXPECT_TRUE(message2.has_foo_int());
|
| - EXPECT_EQ(message2.foo_int(), 123);
|
| -
|
| - message1.set_foo_string("foo");
|
| - message2.MergeFrom(message1);
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
|
| - EXPECT_TRUE(message2.has_foo_string());
|
| - EXPECT_EQ(message2.foo_string(), "foo");
|
| -
|
| -
|
| - message1.set_foo_bytes("qux");
|
| - message2.MergeFrom(message1);
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
|
| - EXPECT_TRUE(message2.has_foo_bytes());
|
| - EXPECT_EQ(message2.foo_bytes(), "qux");
|
| -
|
| - message1.set_foo_enum(unittest::TestOneof2::FOO);
|
| - message2.MergeFrom(message1);
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
|
| - EXPECT_TRUE(message2.has_foo_enum());
|
| - EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::FOO);
|
| -
|
| - message1.mutable_foo_message()->set_qux_int(234);
|
| - message2.MergeFrom(message1);
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
|
| - EXPECT_TRUE(message2.has_foo_message());
|
| - EXPECT_EQ(message2.foo_message().qux_int(), 234);
|
| -
|
| - message1.mutable_foogroup()->set_a(345);
|
| - message2.MergeFrom(message1);
|
| - TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
|
| - EXPECT_TRUE(message2.has_foogroup());
|
| - EXPECT_EQ(message2.foogroup().a(), 345);
|
| -
|
| -}
|
| -
|
| } // namespace cpp_unittest
|
| } // namespace cpp
|
| } // namespace compiler
|
|
|