| // Protocol Buffers - Google's data interchange format | |
| // Copyright 2008 Google Inc. All rights reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file or at | |
| // https://developers.google.com/open-source/licenses/bsd | |
| // Author: kenton@google.com (Kenton Varda) | |
| // Based on original Protocol Buffers design by | |
| // Sanjay Ghemawat, Jeff Dean, and others. | |
| #ifndef GOOGLE_PROTOBUF_TEST_UTIL_H__ | |
| #define GOOGLE_PROTOBUF_TEST_UTIL_H__ | |
| #include <gtest/gtest.h> | |
| #include "absl/strings/string_view.h" | |
| #include "google/protobuf/unittest.pb.h" | |
| #include "google/protobuf/unittest_import.pb.h" | |
| #include "google/protobuf/unittest_mset.pb.h" | |
| // Must be included last. | |
| #include "google/protobuf/port_def.inc" | |
| namespace google { | |
| namespace protobuf { | |
| // This file doesn't use these declarations, but some .cc files do. | |
| namespace unittest = ::proto2_unittest; | |
| namespace unittest_import = ::proto2_unittest_import; | |
| namespace TestUtil { | |
| class ReflectionTester { | |
| public: | |
| // base_descriptor must be a descriptor for TestAllTypes or | |
| // TestAllExtensions. In the former case, ReflectionTester fetches from | |
| // it the FieldDescriptors needed to use the reflection interface. In | |
| // the latter case, ReflectionTester searches for extension fields in | |
| // its file. | |
| explicit ReflectionTester(const Descriptor* base_descriptor); | |
| ReflectionTester(const ReflectionTester&) = delete; | |
| ReflectionTester& operator=(const ReflectionTester&) = delete; | |
| void SetAllFieldsViaReflection(Message* message); | |
| void ModifyRepeatedFieldsViaReflection(Message* message); | |
| void ExpectAllFieldsSetViaReflection(const Message& message); | |
| void ExpectClearViaReflection(const Message& message); | |
| void SetPackedFieldsViaReflection(Message* message); | |
| void ExpectPackedFieldsSetViaReflection(const Message& message); | |
| void RemoveLastRepeatedsViaReflection(Message* message); | |
| void ReleaseLastRepeatedsViaReflection(Message* message, | |
| bool expect_extensions_notnull); | |
| void SwapRepeatedsViaReflection(Message* message); | |
| void SetAllocatedOptionalMessageFieldsToNullViaReflection(Message* message); | |
| static void SetAllocatedOptionalMessageFieldsToMessageViaReflection( | |
| Message* from_message, Message* to_message); | |
| enum MessageReleaseState { | |
| IS_NULL, | |
| CAN_BE_NULL, | |
| NOT_NULL, | |
| }; | |
| void ExpectMessagesReleasedViaReflection( | |
| Message* message, MessageReleaseState expected_release_state); | |
| // Set and check functions for TestOneof2 messages. No need to construct | |
| // the ReflectionTester by TestAllTypes nor TestAllExtensions. | |
| static void SetOneofViaReflection(Message* message); | |
| static void ExpectOneofSetViaReflection(const Message& message); | |
| private: | |
| const FieldDescriptor* F(const std::string& name); | |
| const Descriptor* base_descriptor_; | |
| const FieldDescriptor* group_a_; | |
| const FieldDescriptor* repeated_group_a_; | |
| const FieldDescriptor* nested_b_; | |
| const FieldDescriptor* foreign_c_; | |
| const FieldDescriptor* import_d_; | |
| const FieldDescriptor* import_e_; | |
| const EnumValueDescriptor* nested_foo_; | |
| const EnumValueDescriptor* nested_bar_; | |
| const EnumValueDescriptor* nested_baz_; | |
| const EnumValueDescriptor* foreign_foo_; | |
| const EnumValueDescriptor* foreign_bar_; | |
| const EnumValueDescriptor* foreign_baz_; | |
| const EnumValueDescriptor* import_foo_; | |
| const EnumValueDescriptor* import_bar_; | |
| const EnumValueDescriptor* import_baz_; | |
| // We have to split this into three function otherwise it creates a stack | |
| // frame so large that it triggers a warning. | |
| void ExpectAllFieldsSetViaReflection1(const Message& message); | |
| void ExpectAllFieldsSetViaReflection2(const Message& message); | |
| void ExpectAllFieldsSetViaReflection3(const Message& message); | |
| }; | |
| inline TestUtil::ReflectionTester::ReflectionTester( | |
| const Descriptor* base_descriptor) | |
| : base_descriptor_(base_descriptor) { | |
| const DescriptorPool* pool = base_descriptor->file()->pool(); | |
| const absl::string_view package = base_descriptor->file()->package(); | |
| const FieldDescriptor* import_descriptor = pool->FindFieldByName( | |
| absl::StrCat(package, ".TestAllTypes.optional_import_message")); | |
| const absl::string_view import_package = | |
| import_descriptor->message_type()->file()->package(); | |
| nested_b_ = pool->FindFieldByName( | |
| absl::StrCat(package, ".TestAllTypes.NestedMessage.bb")); | |
| foreign_c_ = | |
| pool->FindFieldByName(absl::StrCat(package, ".ForeignMessage.c")); | |
| import_d_ = | |
| pool->FindFieldByName(absl::StrCat(import_package, ".ImportMessage.d")); | |
| import_e_ = pool->FindFieldByName( | |
| absl::StrCat(import_package, ".PublicImportMessage.e")); | |
| nested_foo_ = | |
| pool->FindEnumValueByName(absl::StrCat(package, ".TestAllTypes.FOO")); | |
| nested_bar_ = | |
| pool->FindEnumValueByName(absl::StrCat(package, ".TestAllTypes.BAR")); | |
| nested_baz_ = | |
| pool->FindEnumValueByName(absl::StrCat(package, ".TestAllTypes.BAZ")); | |
| foreign_foo_ = | |
| pool->FindEnumValueByName(absl::StrCat(package, ".FOREIGN_FOO")); | |
| foreign_bar_ = | |
| pool->FindEnumValueByName(absl::StrCat(package, ".FOREIGN_BAR")); | |
| foreign_baz_ = | |
| pool->FindEnumValueByName(absl::StrCat(package, ".FOREIGN_BAZ")); | |
| import_foo_ = | |
| pool->FindEnumValueByName(absl::StrCat(import_package, ".IMPORT_FOO")); | |
| import_bar_ = | |
| pool->FindEnumValueByName(absl::StrCat(import_package, ".IMPORT_BAR")); | |
| import_baz_ = | |
| pool->FindEnumValueByName(absl::StrCat(import_package, ".IMPORT_BAZ")); | |
| if (base_descriptor_->name() == "TestAllExtensions") { | |
| group_a_ = pool->FindFieldByName( | |
| absl::StrCat(package, ".OptionalGroup_extension.a")); | |
| repeated_group_a_ = pool->FindFieldByName( | |
| absl::StrCat(package, ".RepeatedGroup_extension.a")); | |
| } else { | |
| group_a_ = pool->FindFieldByName( | |
| absl::StrCat(package, ".TestAllTypes.OptionalGroup.a")); | |
| repeated_group_a_ = pool->FindFieldByName( | |
| absl::StrCat(package, ".TestAllTypes.RepeatedGroup.a")); | |
| } | |
| EXPECT_TRUE(group_a_ != nullptr); | |
| EXPECT_TRUE(repeated_group_a_ != nullptr); | |
| EXPECT_TRUE(nested_b_ != nullptr); | |
| EXPECT_TRUE(foreign_c_ != nullptr); | |
| EXPECT_TRUE(import_d_ != nullptr); | |
| EXPECT_TRUE(import_e_ != nullptr); | |
| EXPECT_TRUE(nested_foo_ != nullptr); | |
| EXPECT_TRUE(nested_bar_ != nullptr); | |
| EXPECT_TRUE(nested_baz_ != nullptr); | |
| EXPECT_TRUE(foreign_foo_ != nullptr); | |
| EXPECT_TRUE(foreign_bar_ != nullptr); | |
| EXPECT_TRUE(foreign_baz_ != nullptr); | |
| EXPECT_TRUE(import_foo_ != nullptr); | |
| EXPECT_TRUE(import_bar_ != nullptr); | |
| EXPECT_TRUE(import_baz_ != nullptr); | |
| } | |
| // Shorthand to get a FieldDescriptor for a field of TestAllTypes. | |
| inline const FieldDescriptor* TestUtil::ReflectionTester::F( | |
| const std::string& name) { | |
| const FieldDescriptor* result = nullptr; | |
| if (base_descriptor_->name() == "TestAllExtensions" || | |
| base_descriptor_->name() == "TestPackedExtensions") { | |
| result = base_descriptor_->file()->FindExtensionByName( | |
| absl::StrCat(name, "_extension")); | |
| } else { | |
| result = base_descriptor_->FindFieldByName(name); | |
| } | |
| ABSL_CHECK(result != nullptr); | |
| return result; | |
| } | |
| // ------------------------------------------------------------------- | |
| inline void TestUtil::ReflectionTester::SetAllFieldsViaReflection( | |
| Message* message) { | |
| const Reflection* reflection = message->GetReflection(); | |
| Message* sub_message; | |
| reflection->SetInt32(message, F("optional_int32"), 101); | |
| reflection->SetInt64(message, F("optional_int64"), 102); | |
| reflection->SetUInt32(message, F("optional_uint32"), 103); | |
| reflection->SetUInt64(message, F("optional_uint64"), 104); | |
| reflection->SetInt32(message, F("optional_sint32"), 105); | |
| reflection->SetInt64(message, F("optional_sint64"), 106); | |
| reflection->SetUInt32(message, F("optional_fixed32"), 107); | |
| reflection->SetUInt64(message, F("optional_fixed64"), 108); | |
| reflection->SetInt32(message, F("optional_sfixed32"), 109); | |
| reflection->SetInt64(message, F("optional_sfixed64"), 110); | |
| reflection->SetFloat(message, F("optional_float"), 111); | |
| reflection->SetDouble(message, F("optional_double"), 112); | |
| reflection->SetBool(message, F("optional_bool"), true); | |
| reflection->SetString(message, F("optional_string"), "115"); | |
| reflection->SetString(message, F("optional_bytes"), "116"); | |
| sub_message = reflection->MutableMessage(message, F("optionalgroup")); | |
| sub_message->GetReflection()->SetInt32(sub_message, group_a_, 117); | |
| sub_message = | |
| reflection->MutableMessage(message, F("optional_nested_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 118); | |
| sub_message = | |
| reflection->MutableMessage(message, F("optional_foreign_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, foreign_c_, 119); | |
| sub_message = | |
| reflection->MutableMessage(message, F("optional_import_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, import_d_, 120); | |
| reflection->SetEnum(message, F("optional_nested_enum"), nested_baz_); | |
| reflection->SetEnum(message, F("optional_foreign_enum"), foreign_baz_); | |
| reflection->SetEnum(message, F("optional_import_enum"), import_baz_); | |
| reflection->SetString(message, F("optional_string_piece"), "124"); | |
| reflection->SetString(message, F("optional_cord"), "125"); | |
| reflection->SetString(message, F("optional_bytes_cord"), | |
| "optional bytes cord"); | |
| sub_message = | |
| reflection->MutableMessage(message, F("optional_public_import_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, import_e_, 126); | |
| sub_message = reflection->MutableMessage(message, F("optional_lazy_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 127); | |
| sub_message = reflection->MutableMessage( | |
| message, F("optional_unverified_lazy_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 128); | |
| // ----------------------------------------------------------------- | |
| reflection->AddInt32(message, F("repeated_int32"), 201); | |
| reflection->AddInt64(message, F("repeated_int64"), 202); | |
| reflection->AddUInt32(message, F("repeated_uint32"), 203); | |
| reflection->AddUInt64(message, F("repeated_uint64"), 204); | |
| reflection->AddInt32(message, F("repeated_sint32"), 205); | |
| reflection->AddInt64(message, F("repeated_sint64"), 206); | |
| reflection->AddUInt32(message, F("repeated_fixed32"), 207); | |
| reflection->AddUInt64(message, F("repeated_fixed64"), 208); | |
| reflection->AddInt32(message, F("repeated_sfixed32"), 209); | |
| reflection->AddInt64(message, F("repeated_sfixed64"), 210); | |
| reflection->AddFloat(message, F("repeated_float"), 211); | |
| reflection->AddDouble(message, F("repeated_double"), 212); | |
| reflection->AddBool(message, F("repeated_bool"), true); | |
| reflection->AddString(message, F("repeated_string"), "215"); | |
| reflection->AddString(message, F("repeated_bytes"), "216"); | |
| sub_message = reflection->AddMessage(message, F("repeatedgroup")); | |
| sub_message->GetReflection()->SetInt32(sub_message, repeated_group_a_, 217); | |
| sub_message = reflection->AddMessage(message, F("repeated_nested_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 218); | |
| sub_message = reflection->AddMessage(message, F("repeated_foreign_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, foreign_c_, 219); | |
| sub_message = reflection->AddMessage(message, F("repeated_import_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, import_d_, 220); | |
| sub_message = reflection->AddMessage(message, F("repeated_lazy_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 227); | |
| reflection->AddEnum(message, F("repeated_nested_enum"), nested_bar_); | |
| reflection->AddEnum(message, F("repeated_foreign_enum"), foreign_bar_); | |
| reflection->AddEnum(message, F("repeated_import_enum"), import_bar_); | |
| reflection->AddString(message, F("repeated_string_piece"), "224"); | |
| reflection->AddString(message, F("repeated_cord"), "225"); | |
| // Add a second one of each field. | |
| reflection->AddInt32(message, F("repeated_int32"), 301); | |
| reflection->AddInt64(message, F("repeated_int64"), 302); | |
| reflection->AddUInt32(message, F("repeated_uint32"), 303); | |
| reflection->AddUInt64(message, F("repeated_uint64"), 304); | |
| reflection->AddInt32(message, F("repeated_sint32"), 305); | |
| reflection->AddInt64(message, F("repeated_sint64"), 306); | |
| reflection->AddUInt32(message, F("repeated_fixed32"), 307); | |
| reflection->AddUInt64(message, F("repeated_fixed64"), 308); | |
| reflection->AddInt32(message, F("repeated_sfixed32"), 309); | |
| reflection->AddInt64(message, F("repeated_sfixed64"), 310); | |
| reflection->AddFloat(message, F("repeated_float"), 311); | |
| reflection->AddDouble(message, F("repeated_double"), 312); | |
| reflection->AddBool(message, F("repeated_bool"), false); | |
| reflection->AddString(message, F("repeated_string"), "315"); | |
| reflection->AddString(message, F("repeated_bytes"), "316"); | |
| sub_message = reflection->AddMessage(message, F("repeatedgroup")); | |
| sub_message->GetReflection()->SetInt32(sub_message, repeated_group_a_, 317); | |
| sub_message = reflection->AddMessage(message, F("repeated_nested_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 318); | |
| sub_message = reflection->AddMessage(message, F("repeated_foreign_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, foreign_c_, 319); | |
| sub_message = reflection->AddMessage(message, F("repeated_import_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, import_d_, 320); | |
| sub_message = reflection->AddMessage(message, F("repeated_lazy_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 327); | |
| reflection->AddEnum(message, F("repeated_nested_enum"), nested_baz_); | |
| reflection->AddEnum(message, F("repeated_foreign_enum"), foreign_baz_); | |
| reflection->AddEnum(message, F("repeated_import_enum"), import_baz_); | |
| reflection->AddString(message, F("repeated_string_piece"), "324"); | |
| reflection->AddString(message, F("repeated_cord"), "325"); | |
| // ----------------------------------------------------------------- | |
| reflection->SetInt32(message, F("default_int32"), 401); | |
| reflection->SetInt64(message, F("default_int64"), 402); | |
| reflection->SetUInt32(message, F("default_uint32"), 403); | |
| reflection->SetUInt64(message, F("default_uint64"), 404); | |
| reflection->SetInt32(message, F("default_sint32"), 405); | |
| reflection->SetInt64(message, F("default_sint64"), 406); | |
| reflection->SetUInt32(message, F("default_fixed32"), 407); | |
| reflection->SetUInt64(message, F("default_fixed64"), 408); | |
| reflection->SetInt32(message, F("default_sfixed32"), 409); | |
| reflection->SetInt64(message, F("default_sfixed64"), 410); | |
| reflection->SetFloat(message, F("default_float"), 411); | |
| reflection->SetDouble(message, F("default_double"), 412); | |
| reflection->SetBool(message, F("default_bool"), false); | |
| reflection->SetString(message, F("default_string"), "415"); | |
| reflection->SetString(message, F("default_bytes"), "416"); | |
| reflection->SetEnum(message, F("default_nested_enum"), nested_foo_); | |
| reflection->SetEnum(message, F("default_foreign_enum"), foreign_foo_); | |
| reflection->SetEnum(message, F("default_import_enum"), import_foo_); | |
| reflection->SetString(message, F("default_string_piece"), "424"); | |
| reflection->SetString(message, F("default_cord"), "425"); | |
| reflection->SetUInt32(message, F("oneof_uint32"), 601); | |
| sub_message = reflection->MutableMessage(message, F("oneof_nested_message")); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 602); | |
| reflection->SetString(message, F("oneof_string"), "603"); | |
| reflection->SetString(message, F("oneof_bytes"), "604"); | |
| } | |
| inline void TestUtil::ReflectionTester::SetOneofViaReflection( | |
| Message* message) { | |
| const Descriptor* descriptor = message->GetDescriptor(); | |
| const Reflection* reflection = message->GetReflection(); | |
| Message* sub_message = reflection->MutableMessage( | |
| message, descriptor->FindFieldByName("foo_lazy_message")); | |
| sub_message->GetReflection()->SetInt64( | |
| sub_message, sub_message->GetDescriptor()->FindFieldByName("moo_int"), | |
| 100); | |
| reflection->SetString(message, descriptor->FindFieldByName("bar_cord"), | |
| "101"); | |
| reflection->SetInt32(message, descriptor->FindFieldByName("baz_int"), 102); | |
| reflection->SetString(message, descriptor->FindFieldByName("baz_string"), | |
| "103"); | |
| } | |
| inline void TestUtil::ReflectionTester::ExpectOneofSetViaReflection( | |
| const Message& message) { | |
| const Descriptor* descriptor = message.GetDescriptor(); | |
| const Reflection* reflection = message.GetReflection(); | |
| std::string scratch; | |
| EXPECT_TRUE(reflection->HasField( | |
| message, descriptor->FindFieldByName("foo_lazy_message"))); | |
| EXPECT_TRUE( | |
| reflection->HasField(message, descriptor->FindFieldByName("bar_cord"))); | |
| EXPECT_TRUE( | |
| reflection->HasField(message, descriptor->FindFieldByName("baz_int"))); | |
| EXPECT_TRUE( | |
| reflection->HasField(message, descriptor->FindFieldByName("baz_string"))); | |
| const Message* sub_message = &reflection->GetMessage( | |
| message, descriptor->FindFieldByName("foo_lazy_message")); | |
| EXPECT_EQ(100, sub_message->GetReflection()->GetInt64( | |
| *sub_message, | |
| sub_message->GetDescriptor()->FindFieldByName("moo_int"))); | |
| EXPECT_EQ("101", reflection->GetString( | |
| message, descriptor->FindFieldByName("bar_cord"))); | |
| EXPECT_EQ("101", | |
| reflection->GetStringReference( | |
| message, descriptor->FindFieldByName("bar_cord"), &scratch)); | |
| EXPECT_EQ(102, reflection->GetInt32(message, | |
| descriptor->FindFieldByName("baz_int"))); | |
| EXPECT_EQ("103", reflection->GetString( | |
| message, descriptor->FindFieldByName("baz_string"))); | |
| EXPECT_EQ("103", | |
| reflection->GetStringReference( | |
| message, descriptor->FindFieldByName("baz_string"), &scratch)); | |
| } | |
| inline void TestUtil::ReflectionTester::SetPackedFieldsViaReflection( | |
| Message* message) { | |
| const Reflection* reflection = message->GetReflection(); | |
| reflection->AddInt32(message, F("packed_int32"), 601); | |
| reflection->AddInt64(message, F("packed_int64"), 602); | |
| reflection->AddUInt32(message, F("packed_uint32"), 603); | |
| reflection->AddUInt64(message, F("packed_uint64"), 604); | |
| reflection->AddInt32(message, F("packed_sint32"), 605); | |
| reflection->AddInt64(message, F("packed_sint64"), 606); | |
| reflection->AddUInt32(message, F("packed_fixed32"), 607); | |
| reflection->AddUInt64(message, F("packed_fixed64"), 608); | |
| reflection->AddInt32(message, F("packed_sfixed32"), 609); | |
| reflection->AddInt64(message, F("packed_sfixed64"), 610); | |
| reflection->AddFloat(message, F("packed_float"), 611); | |
| reflection->AddDouble(message, F("packed_double"), 612); | |
| reflection->AddBool(message, F("packed_bool"), true); | |
| reflection->AddEnum(message, F("packed_enum"), foreign_bar_); | |
| reflection->AddInt32(message, F("packed_int32"), 701); | |
| reflection->AddInt64(message, F("packed_int64"), 702); | |
| reflection->AddUInt32(message, F("packed_uint32"), 703); | |
| reflection->AddUInt64(message, F("packed_uint64"), 704); | |
| reflection->AddInt32(message, F("packed_sint32"), 705); | |
| reflection->AddInt64(message, F("packed_sint64"), 706); | |
| reflection->AddUInt32(message, F("packed_fixed32"), 707); | |
| reflection->AddUInt64(message, F("packed_fixed64"), 708); | |
| reflection->AddInt32(message, F("packed_sfixed32"), 709); | |
| reflection->AddInt64(message, F("packed_sfixed64"), 710); | |
| reflection->AddFloat(message, F("packed_float"), 711); | |
| reflection->AddDouble(message, F("packed_double"), 712); | |
| reflection->AddBool(message, F("packed_bool"), false); | |
| reflection->AddEnum(message, F("packed_enum"), foreign_baz_); | |
| } | |
| // ------------------------------------------------------------------- | |
| inline void TestUtil::ReflectionTester::ExpectAllFieldsSetViaReflection( | |
| const Message& message) { | |
| // We have to split this into three function otherwise it creates a stack | |
| // frame so large that it triggers a warning. | |
| ExpectAllFieldsSetViaReflection1(message); | |
| ExpectAllFieldsSetViaReflection2(message); | |
| ExpectAllFieldsSetViaReflection3(message); | |
| } | |
| inline void TestUtil::ReflectionTester::ExpectAllFieldsSetViaReflection1( | |
| const Message& message) { | |
| const Reflection* reflection = message.GetReflection(); | |
| std::string scratch; | |
| const Message* sub_message; | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_int32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_int64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_uint32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_uint64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_sint32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_sint64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_fixed32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_fixed64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_sfixed32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_sfixed64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_float"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_double"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_bool"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_string"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_bytes"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optionalgroup"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_nested_message"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_foreign_message"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_import_message"))); | |
| EXPECT_TRUE( | |
| reflection->HasField(message, F("optional_public_import_message"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_lazy_message"))); | |
| EXPECT_TRUE( | |
| reflection->HasField(message, F("optional_unverified_lazy_message"))); | |
| sub_message = &reflection->GetMessage(message, F("optionalgroup")); | |
| EXPECT_TRUE(sub_message->GetReflection()->HasField(*sub_message, group_a_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_nested_message")); | |
| EXPECT_TRUE(sub_message->GetReflection()->HasField(*sub_message, nested_b_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_foreign_message")); | |
| EXPECT_TRUE(sub_message->GetReflection()->HasField(*sub_message, foreign_c_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_import_message")); | |
| EXPECT_TRUE(sub_message->GetReflection()->HasField(*sub_message, import_d_)); | |
| sub_message = | |
| &reflection->GetMessage(message, F("optional_public_import_message")); | |
| EXPECT_TRUE(sub_message->GetReflection()->HasField(*sub_message, import_e_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_lazy_message")); | |
| EXPECT_TRUE(sub_message->GetReflection()->HasField(*sub_message, nested_b_)); | |
| sub_message = | |
| &reflection->GetMessage(message, F("optional_unverified_lazy_message")); | |
| EXPECT_TRUE(sub_message->GetReflection()->HasField(*sub_message, nested_b_)); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_nested_enum"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_foreign_enum"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_import_enum"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_string_piece"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_cord"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("optional_bytes_cord"))); | |
| EXPECT_EQ(101, reflection->GetInt32(message, F("optional_int32"))); | |
| EXPECT_EQ(102, reflection->GetInt64(message, F("optional_int64"))); | |
| EXPECT_EQ(103, reflection->GetUInt32(message, F("optional_uint32"))); | |
| EXPECT_EQ(104, reflection->GetUInt64(message, F("optional_uint64"))); | |
| EXPECT_EQ(105, reflection->GetInt32(message, F("optional_sint32"))); | |
| EXPECT_EQ(106, reflection->GetInt64(message, F("optional_sint64"))); | |
| EXPECT_EQ(107, reflection->GetUInt32(message, F("optional_fixed32"))); | |
| EXPECT_EQ(108, reflection->GetUInt64(message, F("optional_fixed64"))); | |
| EXPECT_EQ(109, reflection->GetInt32(message, F("optional_sfixed32"))); | |
| EXPECT_EQ(110, reflection->GetInt64(message, F("optional_sfixed64"))); | |
| EXPECT_EQ(111, reflection->GetFloat(message, F("optional_float"))); | |
| EXPECT_EQ(112, reflection->GetDouble(message, F("optional_double"))); | |
| EXPECT_TRUE(reflection->GetBool(message, F("optional_bool"))); | |
| EXPECT_EQ("115", reflection->GetString(message, F("optional_string"))); | |
| EXPECT_EQ("116", reflection->GetString(message, F("optional_bytes"))); | |
| EXPECT_EQ("115", reflection->GetStringReference(message, F("optional_string"), | |
| &scratch)); | |
| EXPECT_EQ("116", reflection->GetStringReference(message, F("optional_bytes"), | |
| &scratch)); | |
| sub_message = &reflection->GetMessage(message, F("optionalgroup")); | |
| EXPECT_EQ(117, | |
| sub_message->GetReflection()->GetInt32(*sub_message, group_a_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_nested_message")); | |
| EXPECT_EQ(118, | |
| sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_foreign_message")); | |
| EXPECT_EQ(119, | |
| sub_message->GetReflection()->GetInt32(*sub_message, foreign_c_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_import_message")); | |
| EXPECT_EQ(120, | |
| sub_message->GetReflection()->GetInt32(*sub_message, import_d_)); | |
| sub_message = | |
| &reflection->GetMessage(message, F("optional_public_import_message")); | |
| EXPECT_EQ(126, | |
| sub_message->GetReflection()->GetInt32(*sub_message, import_e_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_lazy_message")); | |
| EXPECT_EQ(127, | |
| sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| sub_message = | |
| &reflection->GetMessage(message, F("optional_unverified_lazy_message")); | |
| EXPECT_EQ(128, | |
| sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| PROTOBUF_IGNORE_DEPRECATION_START | |
| EXPECT_EQ(nested_baz_, | |
| reflection->GetEnum(message, F("optional_nested_enum"))); | |
| EXPECT_EQ(foreign_baz_, | |
| reflection->GetEnum(message, F("optional_foreign_enum"))); | |
| EXPECT_EQ(import_baz_, | |
| reflection->GetEnum(message, F("optional_import_enum"))); | |
| PROTOBUF_IGNORE_DEPRECATION_STOP | |
| EXPECT_EQ("124", reflection->GetString(message, F("optional_string_piece"))); | |
| EXPECT_EQ("124", reflection->GetStringReference( | |
| message, F("optional_string_piece"), &scratch)); | |
| EXPECT_EQ("125", reflection->GetString(message, F("optional_cord"))); | |
| EXPECT_EQ("125", reflection->GetStringReference(message, F("optional_cord"), | |
| &scratch)); | |
| EXPECT_EQ("optional bytes cord", | |
| reflection->GetString(message, F("optional_bytes_cord"))); | |
| EXPECT_EQ("optional bytes cord", | |
| reflection->GetStringReference(message, F("optional_bytes_cord"), | |
| &scratch)); | |
| EXPECT_EQ("optional bytes cord", | |
| reflection->GetCord(message, F("optional_bytes_cord"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("oneof_bytes"))); | |
| EXPECT_EQ("604", reflection->GetString(message, F("oneof_bytes"))); | |
| if (base_descriptor_->name() == "TestAllTypes") { | |
| EXPECT_FALSE(reflection->HasField(message, F("oneof_uint32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("oneof_string"))); | |
| } else { | |
| EXPECT_TRUE(reflection->HasField(message, F("oneof_uint32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("oneof_string"))); | |
| EXPECT_EQ(601, reflection->GetUInt32(message, F("oneof_uint32"))); | |
| EXPECT_EQ("603", reflection->GetString(message, F("oneof_string"))); | |
| sub_message = &reflection->GetMessage(message, F("oneof_nested_message")); | |
| EXPECT_EQ(602, | |
| sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| } | |
| } | |
| inline void TestUtil::ReflectionTester::ExpectAllFieldsSetViaReflection2( | |
| const Message& message) { | |
| const Reflection* reflection = message.GetReflection(); | |
| std::string scratch; | |
| const Message* sub_message; | |
| // ----------------------------------------------------------------- | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_int32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_int64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_uint32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_uint64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_sint32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_sint64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_fixed32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_fixed64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_sfixed32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_sfixed64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_float"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_double"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_bool"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_string"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_bytes"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeatedgroup"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_nested_message"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_foreign_message"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_import_message"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_lazy_message"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_nested_enum"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_foreign_enum"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_import_enum"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_string_piece"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("repeated_cord"))); | |
| EXPECT_EQ(201, reflection->GetRepeatedInt32(message, F("repeated_int32"), 0)); | |
| EXPECT_EQ(202, reflection->GetRepeatedInt64(message, F("repeated_int64"), 0)); | |
| EXPECT_EQ(203, | |
| reflection->GetRepeatedUInt32(message, F("repeated_uint32"), 0)); | |
| EXPECT_EQ(204, | |
| reflection->GetRepeatedUInt64(message, F("repeated_uint64"), 0)); | |
| EXPECT_EQ(205, | |
| reflection->GetRepeatedInt32(message, F("repeated_sint32"), 0)); | |
| EXPECT_EQ(206, | |
| reflection->GetRepeatedInt64(message, F("repeated_sint64"), 0)); | |
| EXPECT_EQ(207, | |
| reflection->GetRepeatedUInt32(message, F("repeated_fixed32"), 0)); | |
| EXPECT_EQ(208, | |
| reflection->GetRepeatedUInt64(message, F("repeated_fixed64"), 0)); | |
| EXPECT_EQ(209, | |
| reflection->GetRepeatedInt32(message, F("repeated_sfixed32"), 0)); | |
| EXPECT_EQ(210, | |
| reflection->GetRepeatedInt64(message, F("repeated_sfixed64"), 0)); | |
| EXPECT_EQ(211, reflection->GetRepeatedFloat(message, F("repeated_float"), 0)); | |
| EXPECT_EQ(212, | |
| reflection->GetRepeatedDouble(message, F("repeated_double"), 0)); | |
| EXPECT_TRUE(reflection->GetRepeatedBool(message, F("repeated_bool"), 0)); | |
| EXPECT_EQ("215", | |
| reflection->GetRepeatedString(message, F("repeated_string"), 0)); | |
| EXPECT_EQ("216", | |
| reflection->GetRepeatedString(message, F("repeated_bytes"), 0)); | |
| EXPECT_EQ("215", reflection->GetRepeatedStringReference( | |
| message, F("repeated_string"), 0, &scratch)); | |
| EXPECT_EQ("216", reflection->GetRepeatedStringReference( | |
| message, F("repeated_bytes"), 0, &scratch)); | |
| sub_message = &reflection->GetRepeatedMessage(message, F("repeatedgroup"), 0); | |
| EXPECT_EQ(217, sub_message->GetReflection()->GetInt32(*sub_message, | |
| repeated_group_a_)); | |
| sub_message = | |
| &reflection->GetRepeatedMessage(message, F("repeated_nested_message"), 0); | |
| EXPECT_EQ(218, | |
| sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| sub_message = &reflection->GetRepeatedMessage( | |
| message, F("repeated_foreign_message"), 0); | |
| EXPECT_EQ(219, | |
| sub_message->GetReflection()->GetInt32(*sub_message, foreign_c_)); | |
| sub_message = | |
| &reflection->GetRepeatedMessage(message, F("repeated_import_message"), 0); | |
| EXPECT_EQ(220, | |
| sub_message->GetReflection()->GetInt32(*sub_message, import_d_)); | |
| sub_message = | |
| &reflection->GetRepeatedMessage(message, F("repeated_lazy_message"), 0); | |
| EXPECT_EQ(227, | |
| sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| PROTOBUF_IGNORE_DEPRECATION_START | |
| EXPECT_EQ(nested_bar_, | |
| reflection->GetRepeatedEnum(message, F("repeated_nested_enum"), 0)); | |
| EXPECT_EQ(foreign_bar_, reflection->GetRepeatedEnum( | |
| message, F("repeated_foreign_enum"), 0)); | |
| EXPECT_EQ(import_bar_, | |
| reflection->GetRepeatedEnum(message, F("repeated_import_enum"), 0)); | |
| PROTOBUF_IGNORE_DEPRECATION_STOP | |
| EXPECT_EQ("224", reflection->GetRepeatedString( | |
| message, F("repeated_string_piece"), 0)); | |
| EXPECT_EQ("224", reflection->GetRepeatedStringReference( | |
| message, F("repeated_string_piece"), 0, &scratch)); | |
| EXPECT_EQ("225", | |
| reflection->GetRepeatedString(message, F("repeated_cord"), 0)); | |
| EXPECT_EQ("225", reflection->GetRepeatedStringReference( | |
| message, F("repeated_cord"), 0, &scratch)); | |
| EXPECT_EQ(301, reflection->GetRepeatedInt32(message, F("repeated_int32"), 1)); | |
| EXPECT_EQ(302, reflection->GetRepeatedInt64(message, F("repeated_int64"), 1)); | |
| EXPECT_EQ(303, | |
| reflection->GetRepeatedUInt32(message, F("repeated_uint32"), 1)); | |
| EXPECT_EQ(304, | |
| reflection->GetRepeatedUInt64(message, F("repeated_uint64"), 1)); | |
| EXPECT_EQ(305, | |
| reflection->GetRepeatedInt32(message, F("repeated_sint32"), 1)); | |
| EXPECT_EQ(306, | |
| reflection->GetRepeatedInt64(message, F("repeated_sint64"), 1)); | |
| EXPECT_EQ(307, | |
| reflection->GetRepeatedUInt32(message, F("repeated_fixed32"), 1)); | |
| EXPECT_EQ(308, | |
| reflection->GetRepeatedUInt64(message, F("repeated_fixed64"), 1)); | |
| EXPECT_EQ(309, | |
| reflection->GetRepeatedInt32(message, F("repeated_sfixed32"), 1)); | |
| EXPECT_EQ(310, | |
| reflection->GetRepeatedInt64(message, F("repeated_sfixed64"), 1)); | |
| EXPECT_EQ(311, reflection->GetRepeatedFloat(message, F("repeated_float"), 1)); | |
| EXPECT_EQ(312, | |
| reflection->GetRepeatedDouble(message, F("repeated_double"), 1)); | |
| EXPECT_FALSE(reflection->GetRepeatedBool(message, F("repeated_bool"), 1)); | |
| EXPECT_EQ("315", | |
| reflection->GetRepeatedString(message, F("repeated_string"), 1)); | |
| EXPECT_EQ("316", | |
| reflection->GetRepeatedString(message, F("repeated_bytes"), 1)); | |
| EXPECT_EQ("315", reflection->GetRepeatedStringReference( | |
| message, F("repeated_string"), 1, &scratch)); | |
| EXPECT_EQ("316", reflection->GetRepeatedStringReference( | |
| message, F("repeated_bytes"), 1, &scratch)); | |
| sub_message = &reflection->GetRepeatedMessage(message, F("repeatedgroup"), 1); | |
| EXPECT_EQ(317, sub_message->GetReflection()->GetInt32(*sub_message, | |
| repeated_group_a_)); | |
| sub_message = | |
| &reflection->GetRepeatedMessage(message, F("repeated_nested_message"), 1); | |
| EXPECT_EQ(318, | |
| sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| sub_message = &reflection->GetRepeatedMessage( | |
| message, F("repeated_foreign_message"), 1); | |
| EXPECT_EQ(319, | |
| sub_message->GetReflection()->GetInt32(*sub_message, foreign_c_)); | |
| sub_message = | |
| &reflection->GetRepeatedMessage(message, F("repeated_import_message"), 1); | |
| EXPECT_EQ(320, | |
| sub_message->GetReflection()->GetInt32(*sub_message, import_d_)); | |
| sub_message = | |
| &reflection->GetRepeatedMessage(message, F("repeated_lazy_message"), 1); | |
| EXPECT_EQ(327, | |
| sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| PROTOBUF_IGNORE_DEPRECATION_START | |
| EXPECT_EQ(nested_baz_, | |
| reflection->GetRepeatedEnum(message, F("repeated_nested_enum"), 1)); | |
| EXPECT_EQ(foreign_baz_, reflection->GetRepeatedEnum( | |
| message, F("repeated_foreign_enum"), 1)); | |
| EXPECT_EQ(import_baz_, | |
| reflection->GetRepeatedEnum(message, F("repeated_import_enum"), 1)); | |
| PROTOBUF_IGNORE_DEPRECATION_STOP | |
| EXPECT_EQ("324", reflection->GetRepeatedString( | |
| message, F("repeated_string_piece"), 1)); | |
| EXPECT_EQ("324", reflection->GetRepeatedStringReference( | |
| message, F("repeated_string_piece"), 1, &scratch)); | |
| EXPECT_EQ("325", | |
| reflection->GetRepeatedString(message, F("repeated_cord"), 1)); | |
| EXPECT_EQ("325", reflection->GetRepeatedStringReference( | |
| message, F("repeated_cord"), 1, &scratch)); | |
| } | |
| inline void TestUtil::ReflectionTester::ExpectAllFieldsSetViaReflection3( | |
| const Message& message) { | |
| const Reflection* reflection = message.GetReflection(); | |
| std::string scratch; | |
| // ----------------------------------------------------------------- | |
| EXPECT_TRUE(reflection->HasField(message, F("default_int32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_int64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_uint32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_uint64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_sint32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_sint64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_fixed32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_fixed64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_sfixed32"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_sfixed64"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_float"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_double"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_bool"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_string"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_bytes"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_nested_enum"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_foreign_enum"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_import_enum"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_string_piece"))); | |
| EXPECT_TRUE(reflection->HasField(message, F("default_cord"))); | |
| EXPECT_EQ(401, reflection->GetInt32(message, F("default_int32"))); | |
| EXPECT_EQ(402, reflection->GetInt64(message, F("default_int64"))); | |
| EXPECT_EQ(403, reflection->GetUInt32(message, F("default_uint32"))); | |
| EXPECT_EQ(404, reflection->GetUInt64(message, F("default_uint64"))); | |
| EXPECT_EQ(405, reflection->GetInt32(message, F("default_sint32"))); | |
| EXPECT_EQ(406, reflection->GetInt64(message, F("default_sint64"))); | |
| EXPECT_EQ(407, reflection->GetUInt32(message, F("default_fixed32"))); | |
| EXPECT_EQ(408, reflection->GetUInt64(message, F("default_fixed64"))); | |
| EXPECT_EQ(409, reflection->GetInt32(message, F("default_sfixed32"))); | |
| EXPECT_EQ(410, reflection->GetInt64(message, F("default_sfixed64"))); | |
| EXPECT_EQ(411, reflection->GetFloat(message, F("default_float"))); | |
| EXPECT_EQ(412, reflection->GetDouble(message, F("default_double"))); | |
| EXPECT_FALSE(reflection->GetBool(message, F("default_bool"))); | |
| EXPECT_EQ("415", reflection->GetString(message, F("default_string"))); | |
| EXPECT_EQ("416", reflection->GetString(message, F("default_bytes"))); | |
| EXPECT_EQ("415", reflection->GetStringReference(message, F("default_string"), | |
| &scratch)); | |
| EXPECT_EQ("416", reflection->GetStringReference(message, F("default_bytes"), | |
| &scratch)); | |
| PROTOBUF_IGNORE_DEPRECATION_START | |
| EXPECT_EQ(nested_foo_, | |
| reflection->GetEnum(message, F("default_nested_enum"))); | |
| EXPECT_EQ(foreign_foo_, | |
| reflection->GetEnum(message, F("default_foreign_enum"))); | |
| EXPECT_EQ(import_foo_, | |
| reflection->GetEnum(message, F("default_import_enum"))); | |
| PROTOBUF_IGNORE_DEPRECATION_STOP | |
| EXPECT_EQ("424", reflection->GetString(message, F("default_string_piece"))); | |
| EXPECT_EQ("424", reflection->GetStringReference( | |
| message, F("default_string_piece"), &scratch)); | |
| EXPECT_EQ("425", reflection->GetString(message, F("default_cord"))); | |
| EXPECT_EQ("425", reflection->GetStringReference(message, F("default_cord"), | |
| &scratch)); | |
| } | |
| inline void TestUtil::ReflectionTester::ExpectPackedFieldsSetViaReflection( | |
| const Message& message) { | |
| const Reflection* reflection = message.GetReflection(); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_int32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_int64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_uint32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_uint64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_sint32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_sint64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_fixed32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_fixed64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_sfixed32"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_sfixed64"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_float"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_double"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_bool"))); | |
| ASSERT_EQ(2, reflection->FieldSize(message, F("packed_enum"))); | |
| EXPECT_EQ(601, reflection->GetRepeatedInt32(message, F("packed_int32"), 0)); | |
| EXPECT_EQ(602, reflection->GetRepeatedInt64(message, F("packed_int64"), 0)); | |
| EXPECT_EQ(603, reflection->GetRepeatedUInt32(message, F("packed_uint32"), 0)); | |
| EXPECT_EQ(604, reflection->GetRepeatedUInt64(message, F("packed_uint64"), 0)); | |
| EXPECT_EQ(605, reflection->GetRepeatedInt32(message, F("packed_sint32"), 0)); | |
| EXPECT_EQ(606, reflection->GetRepeatedInt64(message, F("packed_sint64"), 0)); | |
| EXPECT_EQ(607, | |
| reflection->GetRepeatedUInt32(message, F("packed_fixed32"), 0)); | |
| EXPECT_EQ(608, | |
| reflection->GetRepeatedUInt64(message, F("packed_fixed64"), 0)); | |
| EXPECT_EQ(609, | |
| reflection->GetRepeatedInt32(message, F("packed_sfixed32"), 0)); | |
| EXPECT_EQ(610, | |
| reflection->GetRepeatedInt64(message, F("packed_sfixed64"), 0)); | |
| EXPECT_EQ(611, reflection->GetRepeatedFloat(message, F("packed_float"), 0)); | |
| EXPECT_EQ(612, reflection->GetRepeatedDouble(message, F("packed_double"), 0)); | |
| EXPECT_TRUE(reflection->GetRepeatedBool(message, F("packed_bool"), 0)); | |
| PROTOBUF_IGNORE_DEPRECATION_START | |
| EXPECT_EQ(foreign_bar_, | |
| reflection->GetRepeatedEnum(message, F("packed_enum"), 0)); | |
| PROTOBUF_IGNORE_DEPRECATION_STOP | |
| EXPECT_EQ(701, reflection->GetRepeatedInt32(message, F("packed_int32"), 1)); | |
| EXPECT_EQ(702, reflection->GetRepeatedInt64(message, F("packed_int64"), 1)); | |
| EXPECT_EQ(703, reflection->GetRepeatedUInt32(message, F("packed_uint32"), 1)); | |
| EXPECT_EQ(704, reflection->GetRepeatedUInt64(message, F("packed_uint64"), 1)); | |
| EXPECT_EQ(705, reflection->GetRepeatedInt32(message, F("packed_sint32"), 1)); | |
| EXPECT_EQ(706, reflection->GetRepeatedInt64(message, F("packed_sint64"), 1)); | |
| EXPECT_EQ(707, | |
| reflection->GetRepeatedUInt32(message, F("packed_fixed32"), 1)); | |
| EXPECT_EQ(708, | |
| reflection->GetRepeatedUInt64(message, F("packed_fixed64"), 1)); | |
| EXPECT_EQ(709, | |
| reflection->GetRepeatedInt32(message, F("packed_sfixed32"), 1)); | |
| EXPECT_EQ(710, | |
| reflection->GetRepeatedInt64(message, F("packed_sfixed64"), 1)); | |
| EXPECT_EQ(711, reflection->GetRepeatedFloat(message, F("packed_float"), 1)); | |
| EXPECT_EQ(712, reflection->GetRepeatedDouble(message, F("packed_double"), 1)); | |
| EXPECT_FALSE(reflection->GetRepeatedBool(message, F("packed_bool"), 1)); | |
| PROTOBUF_IGNORE_DEPRECATION_START | |
| EXPECT_EQ(foreign_baz_, | |
| reflection->GetRepeatedEnum(message, F("packed_enum"), 1)); | |
| PROTOBUF_IGNORE_DEPRECATION_STOP | |
| } | |
| // ------------------------------------------------------------------- | |
| inline void TestUtil::ReflectionTester::ExpectClearViaReflection( | |
| const Message& message) { | |
| const Reflection* reflection = message.GetReflection(); | |
| std::string scratch; | |
| const Message* sub_message; | |
| // has_blah() should initially be false for all optional fields. | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_int32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_int64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_uint32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_uint64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_sint32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_sint64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_fixed32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_fixed64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_sfixed32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_sfixed64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_float"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_double"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_bool"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_string"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_bytes"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optionalgroup"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_nested_message"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_foreign_message"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_import_message"))); | |
| EXPECT_FALSE( | |
| reflection->HasField(message, F("optional_public_import_message"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_lazy_message"))); | |
| EXPECT_FALSE( | |
| reflection->HasField(message, F("optional_unverified_lazy_message"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_nested_enum"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_foreign_enum"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_import_enum"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_string_piece"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_cord"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("optional_bytes_cord"))); | |
| // Optional fields without defaults are set to zero or something like it. | |
| EXPECT_EQ(0, reflection->GetInt32(message, F("optional_int32"))); | |
| EXPECT_EQ(0, reflection->GetInt64(message, F("optional_int64"))); | |
| EXPECT_EQ(0, reflection->GetUInt32(message, F("optional_uint32"))); | |
| EXPECT_EQ(0, reflection->GetUInt64(message, F("optional_uint64"))); | |
| EXPECT_EQ(0, reflection->GetInt32(message, F("optional_sint32"))); | |
| EXPECT_EQ(0, reflection->GetInt64(message, F("optional_sint64"))); | |
| EXPECT_EQ(0, reflection->GetUInt32(message, F("optional_fixed32"))); | |
| EXPECT_EQ(0, reflection->GetUInt64(message, F("optional_fixed64"))); | |
| EXPECT_EQ(0, reflection->GetInt32(message, F("optional_sfixed32"))); | |
| EXPECT_EQ(0, reflection->GetInt64(message, F("optional_sfixed64"))); | |
| EXPECT_EQ(0, reflection->GetFloat(message, F("optional_float"))); | |
| EXPECT_EQ(0, reflection->GetDouble(message, F("optional_double"))); | |
| EXPECT_FALSE(reflection->GetBool(message, F("optional_bool"))); | |
| EXPECT_EQ("", reflection->GetString(message, F("optional_string"))); | |
| EXPECT_EQ("", reflection->GetString(message, F("optional_bytes"))); | |
| EXPECT_EQ("", reflection->GetStringReference(message, F("optional_string"), | |
| &scratch)); | |
| EXPECT_EQ("", reflection->GetStringReference(message, F("optional_bytes"), | |
| &scratch)); | |
| // Embedded messages should also be clear. | |
| sub_message = &reflection->GetMessage(message, F("optionalgroup")); | |
| EXPECT_FALSE(sub_message->GetReflection()->HasField(*sub_message, group_a_)); | |
| EXPECT_EQ(0, sub_message->GetReflection()->GetInt32(*sub_message, group_a_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_nested_message")); | |
| EXPECT_FALSE(sub_message->GetReflection()->HasField(*sub_message, nested_b_)); | |
| EXPECT_EQ(0, sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_foreign_message")); | |
| EXPECT_FALSE( | |
| sub_message->GetReflection()->HasField(*sub_message, foreign_c_)); | |
| EXPECT_EQ(0, | |
| sub_message->GetReflection()->GetInt32(*sub_message, foreign_c_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_import_message")); | |
| EXPECT_FALSE(sub_message->GetReflection()->HasField(*sub_message, import_d_)); | |
| EXPECT_EQ(0, sub_message->GetReflection()->GetInt32(*sub_message, import_d_)); | |
| sub_message = | |
| &reflection->GetMessage(message, F("optional_public_import_message")); | |
| EXPECT_FALSE(sub_message->GetReflection()->HasField(*sub_message, import_e_)); | |
| EXPECT_EQ(0, sub_message->GetReflection()->GetInt32(*sub_message, import_e_)); | |
| sub_message = &reflection->GetMessage(message, F("optional_lazy_message")); | |
| EXPECT_FALSE(sub_message->GetReflection()->HasField(*sub_message, nested_b_)); | |
| EXPECT_EQ(0, sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| sub_message = | |
| &reflection->GetMessage(message, F("optional_unverified_lazy_message")); | |
| EXPECT_FALSE(sub_message->GetReflection()->HasField(*sub_message, nested_b_)); | |
| EXPECT_EQ(0, sub_message->GetReflection()->GetInt32(*sub_message, nested_b_)); | |
| // Enums without defaults are set to the first value in the enum. | |
| PROTOBUF_IGNORE_DEPRECATION_START | |
| EXPECT_EQ(nested_foo_, | |
| reflection->GetEnum(message, F("optional_nested_enum"))); | |
| EXPECT_EQ(foreign_foo_, | |
| reflection->GetEnum(message, F("optional_foreign_enum"))); | |
| EXPECT_EQ(import_foo_, | |
| reflection->GetEnum(message, F("optional_import_enum"))); | |
| PROTOBUF_IGNORE_DEPRECATION_STOP | |
| EXPECT_EQ("", reflection->GetString(message, F("optional_string_piece"))); | |
| EXPECT_EQ("", reflection->GetStringReference( | |
| message, F("optional_string_piece"), &scratch)); | |
| EXPECT_EQ("", reflection->GetString(message, F("optional_cord"))); | |
| EXPECT_EQ("", reflection->GetStringReference(message, F("optional_cord"), | |
| &scratch)); | |
| EXPECT_EQ("", reflection->GetString(message, F("optional_bytes_cord"))); | |
| EXPECT_EQ("", reflection->GetStringReference( | |
| message, F("optional_bytes_cord"), &scratch)); | |
| EXPECT_EQ("", reflection->GetCord(message, F("optional_bytes_cord"))); | |
| // Repeated fields are empty. | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_int32"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_int64"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_uint32"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_uint64"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_sint32"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_sint64"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_fixed32"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_fixed64"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_sfixed32"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_sfixed64"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_float"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_double"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_bool"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_string"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_bytes"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeatedgroup"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_nested_message"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_foreign_message"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_import_message"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_lazy_message"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_nested_enum"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_foreign_enum"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_import_enum"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_string_piece"))); | |
| EXPECT_EQ(0, reflection->FieldSize(message, F("repeated_cord"))); | |
| // has_blah() should also be false for all default fields. | |
| EXPECT_FALSE(reflection->HasField(message, F("default_int32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_int64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_uint32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_uint64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_sint32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_sint64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_fixed32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_fixed64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_sfixed32"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_sfixed64"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_float"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_double"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_bool"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_string"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_bytes"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_nested_enum"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_foreign_enum"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_import_enum"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_string_piece"))); | |
| EXPECT_FALSE(reflection->HasField(message, F("default_cord"))); | |
| // Fields with defaults have their default values (duh). | |
| EXPECT_EQ(41, reflection->GetInt32(message, F("default_int32"))); | |
| EXPECT_EQ(42, reflection->GetInt64(message, F("default_int64"))); | |
| EXPECT_EQ(43, reflection->GetUInt32(message, F("default_uint32"))); | |
| EXPECT_EQ(44, reflection->GetUInt64(message, F("default_uint64"))); | |
| EXPECT_EQ(-45, reflection->GetInt32(message, F("default_sint32"))); | |
| EXPECT_EQ(46, reflection->GetInt64(message, F("default_sint64"))); | |
| EXPECT_EQ(47, reflection->GetUInt32(message, F("default_fixed32"))); | |
| EXPECT_EQ(48, reflection->GetUInt64(message, F("default_fixed64"))); | |
| EXPECT_EQ(49, reflection->GetInt32(message, F("default_sfixed32"))); | |
| EXPECT_EQ(-50, reflection->GetInt64(message, F("default_sfixed64"))); | |
| EXPECT_EQ(51.5, reflection->GetFloat(message, F("default_float"))); | |
| EXPECT_EQ(52e3, reflection->GetDouble(message, F("default_double"))); | |
| EXPECT_TRUE(reflection->GetBool(message, F("default_bool"))); | |
| EXPECT_EQ("hello", reflection->GetString(message, F("default_string"))); | |
| EXPECT_EQ("world", reflection->GetString(message, F("default_bytes"))); | |
| EXPECT_EQ("hello", reflection->GetStringReference( | |
| message, F("default_string"), &scratch)); | |
| EXPECT_EQ("world", reflection->GetStringReference(message, F("default_bytes"), | |
| &scratch)); | |
| PROTOBUF_IGNORE_DEPRECATION_START | |
| EXPECT_EQ(nested_bar_, | |
| reflection->GetEnum(message, F("default_nested_enum"))); | |
| EXPECT_EQ(foreign_bar_, | |
| reflection->GetEnum(message, F("default_foreign_enum"))); | |
| EXPECT_EQ(import_bar_, | |
| reflection->GetEnum(message, F("default_import_enum"))); | |
| PROTOBUF_IGNORE_DEPRECATION_STOP | |
| EXPECT_EQ("abc", reflection->GetString(message, F("default_string_piece"))); | |
| EXPECT_EQ("abc", reflection->GetStringReference( | |
| message, F("default_string_piece"), &scratch)); | |
| EXPECT_EQ("123", reflection->GetString(message, F("default_cord"))); | |
| EXPECT_EQ("123", reflection->GetStringReference(message, F("default_cord"), | |
| &scratch)); | |
| } | |
| // ------------------------------------------------------------------- | |
| inline void TestUtil::ReflectionTester::ModifyRepeatedFieldsViaReflection( | |
| Message* message) { | |
| const Reflection* reflection = message->GetReflection(); | |
| Message* sub_message; | |
| reflection->SetRepeatedInt32(message, F("repeated_int32"), 1, 501); | |
| reflection->SetRepeatedInt64(message, F("repeated_int64"), 1, 502); | |
| reflection->SetRepeatedUInt32(message, F("repeated_uint32"), 1, 503); | |
| reflection->SetRepeatedUInt64(message, F("repeated_uint64"), 1, 504); | |
| reflection->SetRepeatedInt32(message, F("repeated_sint32"), 1, 505); | |
| reflection->SetRepeatedInt64(message, F("repeated_sint64"), 1, 506); | |
| reflection->SetRepeatedUInt32(message, F("repeated_fixed32"), 1, 507); | |
| reflection->SetRepeatedUInt64(message, F("repeated_fixed64"), 1, 508); | |
| reflection->SetRepeatedInt32(message, F("repeated_sfixed32"), 1, 509); | |
| reflection->SetRepeatedInt64(message, F("repeated_sfixed64"), 1, 510); | |
| reflection->SetRepeatedFloat(message, F("repeated_float"), 1, 511); | |
| reflection->SetRepeatedDouble(message, F("repeated_double"), 1, 512); | |
| reflection->SetRepeatedBool(message, F("repeated_bool"), 1, true); | |
| reflection->SetRepeatedString(message, F("repeated_string"), 1, "515"); | |
| reflection->SetRepeatedString(message, F("repeated_bytes"), 1, "516"); | |
| sub_message = | |
| reflection->MutableRepeatedMessage(message, F("repeatedgroup"), 1); | |
| sub_message->GetReflection()->SetInt32(sub_message, repeated_group_a_, 517); | |
| sub_message = reflection->MutableRepeatedMessage( | |
| message, F("repeated_nested_message"), 1); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 518); | |
| sub_message = reflection->MutableRepeatedMessage( | |
| message, F("repeated_foreign_message"), 1); | |
| sub_message->GetReflection()->SetInt32(sub_message, foreign_c_, 519); | |
| sub_message = reflection->MutableRepeatedMessage( | |
| message, F("repeated_import_message"), 1); | |
| sub_message->GetReflection()->SetInt32(sub_message, import_d_, 520); | |
| sub_message = reflection->MutableRepeatedMessage( | |
| message, F("repeated_lazy_message"), 1); | |
| sub_message->GetReflection()->SetInt32(sub_message, nested_b_, 527); | |
| reflection->SetRepeatedEnum(message, F("repeated_nested_enum"), 1, | |
| nested_foo_); | |
| reflection->SetRepeatedEnum(message, F("repeated_foreign_enum"), 1, | |
| foreign_foo_); | |
| reflection->SetRepeatedEnum(message, F("repeated_import_enum"), 1, | |
| import_foo_); | |
| reflection->SetRepeatedString(message, F("repeated_string_piece"), 1, "524"); | |
| reflection->SetRepeatedString(message, F("repeated_cord"), 1, "525"); | |
| } | |
| inline void TestUtil::ReflectionTester::RemoveLastRepeatedsViaReflection( | |
| Message* message) { | |
| const Reflection* reflection = message->GetReflection(); | |
| std::vector<const FieldDescriptor*> output; | |
| reflection->ListFields(*message, &output); | |
| for (const FieldDescriptor* field : output) { | |
| if (!field->is_repeated()) continue; | |
| reflection->RemoveLast(message, field); | |
| } | |
| } | |
| inline void TestUtil::ReflectionTester::ReleaseLastRepeatedsViaReflection( | |
| Message* message, bool expect_extensions_notnull) { | |
| const Reflection* reflection = message->GetReflection(); | |
| std::vector<const FieldDescriptor*> output; | |
| reflection->ListFields(*message, &output); | |
| for (const FieldDescriptor* field : output) { | |
| if (!field->is_repeated()) continue; | |
| if (field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE) continue; | |
| Message* released = reflection->ReleaseLast(message, field); | |
| if (!field->is_extension() || expect_extensions_notnull) { | |
| ASSERT_TRUE(released != nullptr) | |
| << "ReleaseLast returned nullptr for: " << field->name(); | |
| } | |
| delete released; | |
| } | |
| } | |
| inline void TestUtil::ReflectionTester::SwapRepeatedsViaReflection( | |
| Message* message) { | |
| const Reflection* reflection = message->GetReflection(); | |
| std::vector<const FieldDescriptor*> output; | |
| reflection->ListFields(*message, &output); | |
| for (const FieldDescriptor* field : output) { | |
| if (!field->is_repeated()) continue; | |
| reflection->SwapElements(message, field, 0, 1); | |
| } | |
| } | |
| inline void TestUtil::ReflectionTester:: | |
| SetAllocatedOptionalMessageFieldsToNullViaReflection(Message* message) { | |
| const Reflection* reflection = message->GetReflection(); | |
| std::vector<const FieldDescriptor*> fields; | |
| reflection->ListFields(*message, &fields); | |
| for (const FieldDescriptor* field : fields) { | |
| if (field->is_required() || field->is_repeated() || | |
| field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE) | |
| continue; | |
| reflection->SetAllocatedMessage(message, nullptr, field); | |
| } | |
| } | |
| inline void TestUtil::ReflectionTester:: | |
| SetAllocatedOptionalMessageFieldsToMessageViaReflection( | |
| Message* from_message, Message* to_message) { | |
| EXPECT_EQ(from_message->GetDescriptor(), to_message->GetDescriptor()); | |
| const Reflection* from_reflection = from_message->GetReflection(); | |
| const Reflection* to_reflection = to_message->GetReflection(); | |
| std::vector<const FieldDescriptor*> fields; | |
| from_reflection->ListFields(*from_message, &fields); | |
| for (const FieldDescriptor* field : fields) { | |
| if (field->is_required() || field->is_repeated() || | |
| field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE) | |
| continue; | |
| Message* sub_message = from_reflection->ReleaseMessage(from_message, field); | |
| to_reflection->SetAllocatedMessage(to_message, sub_message, field); | |
| } | |
| } | |
| inline void TestUtil::ReflectionTester::ExpectMessagesReleasedViaReflection( | |
| Message* message, | |
| TestUtil::ReflectionTester::MessageReleaseState expected_release_state) { | |
| const Reflection* reflection = message->GetReflection(); | |
| static const char* fields[] = { | |
| "optionalgroup", | |
| "optional_nested_message", | |
| "optional_foreign_message", | |
| "optional_import_message", | |
| }; | |
| for (const char* field : fields) { | |
| Message* released = reflection->ReleaseMessage(message, F(field)); | |
| switch (expected_release_state) { | |
| case IS_NULL: | |
| EXPECT_TRUE(released == nullptr); | |
| break; | |
| case NOT_NULL: | |
| EXPECT_TRUE(released != nullptr); | |
| break; | |
| case CAN_BE_NULL: | |
| break; | |
| } | |
| delete released; | |
| EXPECT_FALSE(reflection->HasField(*message, F(field))); | |
| } | |
| } | |
| // Check that the passed-in serialization is the canonical serialization we | |
| // expect for a TestFieldOrderings message filled in by | |
| // SetAllFieldsAndExtensions(). | |
| inline void ExpectAllFieldsAndExtensionsInOrder(const std::string& serialized) { | |
| // We set each field individually, serialize separately, and concatenate all | |
| // the strings in canonical order to determine the expected serialization. | |
| std::string expected; | |
| unittest::TestFieldOrderings message; | |
| message.set_my_int(1); // Field 1. | |
| ABSL_CHECK(message.AppendToString(&expected)); | |
| message.Clear(); | |
| message.SetExtension(unittest::my_extension_int, 23); // Field 5. | |
| ABSL_CHECK(message.AppendToString(&expected)); | |
| message.Clear(); | |
| message.set_my_string("foo"); // Field 11. | |
| ABSL_CHECK(message.AppendToString(&expected)); | |
| message.Clear(); | |
| message.SetExtension(unittest::my_extension_string, "bar"); // Field 50. | |
| ABSL_CHECK(message.AppendToString(&expected)); | |
| message.Clear(); | |
| message.set_my_float(1.0); // Field 101. | |
| ABSL_CHECK(message.AppendToString(&expected)); | |
| message.Clear(); | |
| // We don't EXPECT_EQ() since we don't want to print raw bytes to stdout. | |
| EXPECT_TRUE(serialized == expected); | |
| } | |
| // Trait to gather all types and values used in the templates below for a | |
| // particular namespace. | |
| template <typename T> | |
| struct TestUtilTraits; | |
| // List all the extensions that are defined at namespace scope. | |
| #define PROTOBUF_TEST_UTIL_DECLARE_INPUT_EXTS_(ns, X) \ | |
| X(ns, my_extension_int); \ | |
| X(ns, my_extension_string); \ | |
| X(ns, optional_int32_extension); \ | |
| X(ns, optional_int64_extension); \ | |
| X(ns, optional_uint32_extension); \ | |
| X(ns, optional_uint64_extension); \ | |
| X(ns, optional_sint32_extension); \ | |
| X(ns, optional_sint64_extension); \ | |
| X(ns, optional_fixed32_extension); \ | |
| X(ns, optional_fixed64_extension); \ | |
| X(ns, optional_sfixed32_extension); \ | |
| X(ns, optional_sfixed64_extension); \ | |
| X(ns, optional_float_extension); \ | |
| X(ns, optional_double_extension); \ | |
| X(ns, optional_bool_extension); \ | |
| X(ns, optional_string_extension); \ | |
| X(ns, optional_bytes_extension); \ | |
| X(ns, optionalgroup_extension); \ | |
| X(ns, optional_nested_message_extension); \ | |
| X(ns, optional_foreign_message_extension); \ | |
| X(ns, optional_import_message_extension); \ | |
| X(ns, optional_nested_enum_extension); \ | |
| X(ns, optional_foreign_enum_extension); \ | |
| X(ns, optional_import_enum_extension); \ | |
| X(ns, optional_string_piece_extension); \ | |
| X(ns, optional_cord_extension); \ | |
| X(ns, optional_bytes_cord_extension); \ | |
| X(ns, optional_public_import_message_extension); \ | |
| X(ns, optional_lazy_message_extension); \ | |
| X(ns, optional_unverified_lazy_message_extension); \ | |
| X(ns, default_bool_extension); \ | |
| X(ns, default_bytes_extension); \ | |
| X(ns, default_cord_extension); \ | |
| X(ns, default_double_extension); \ | |
| X(ns, default_fixed32_extension); \ | |
| X(ns, default_fixed64_extension); \ | |
| X(ns, default_float_extension); \ | |
| X(ns, default_foreign_enum_extension); \ | |
| X(ns, default_import_enum_extension); \ | |
| X(ns, default_int32_extension); \ | |
| X(ns, default_int64_extension); \ | |
| X(ns, default_nested_enum_extension); \ | |
| X(ns, default_sfixed32_extension); \ | |
| X(ns, default_sfixed64_extension); \ | |
| X(ns, default_sint32_extension); \ | |
| X(ns, default_sint64_extension); \ | |
| X(ns, default_string_extension); \ | |
| X(ns, default_string_piece_extension); \ | |
| X(ns, default_uint32_extension); \ | |
| X(ns, default_uint64_extension); \ | |
| X(ns, repeated_bool_extension); \ | |
| X(ns, repeated_bytes_extension); \ | |
| X(ns, repeated_cord_extension); \ | |
| X(ns, repeated_double_extension); \ | |
| X(ns, repeated_fixed32_extension); \ | |
| X(ns, repeated_fixed64_extension); \ | |
| X(ns, repeated_float_extension); \ | |
| X(ns, repeated_foreign_enum_extension); \ | |
| X(ns, repeated_foreign_message_extension); \ | |
| X(ns, repeated_import_enum_extension); \ | |
| X(ns, repeated_import_message_extension); \ | |
| X(ns, repeated_int32_extension); \ | |
| X(ns, repeated_int64_extension); \ | |
| X(ns, repeated_lazy_message_extension); \ | |
| X(ns, repeated_nested_enum_extension); \ | |
| X(ns, repeated_nested_message_extension); \ | |
| X(ns, repeated_sfixed32_extension); \ | |
| X(ns, repeated_sfixed64_extension); \ | |
| X(ns, repeated_sint32_extension); \ | |
| X(ns, repeated_sint64_extension); \ | |
| X(ns, repeated_string_extension); \ | |
| X(ns, repeated_string_piece_extension); \ | |
| X(ns, repeated_uint32_extension); \ | |
| X(ns, repeated_uint64_extension); \ | |
| X(ns, repeatedgroup_extension); \ | |
| X(ns, oneof_uint32_extension); \ | |
| X(ns, oneof_nested_message_extension); \ | |
| X(ns, oneof_string_extension); \ | |
| X(ns, oneof_bytes_extension); \ | |
| X(ns, unpacked_bool_extension); \ | |
| X(ns, unpacked_double_extension); \ | |
| X(ns, unpacked_enum_extension); \ | |
| X(ns, unpacked_fixed32_extension); \ | |
| X(ns, unpacked_fixed64_extension); \ | |
| X(ns, unpacked_float_extension); \ | |
| X(ns, unpacked_int32_extension); \ | |
| X(ns, unpacked_int64_extension); \ | |
| X(ns, unpacked_sfixed32_extension); \ | |
| X(ns, unpacked_sfixed64_extension); \ | |
| X(ns, unpacked_sint32_extension); \ | |
| X(ns, unpacked_sint64_extension); \ | |
| X(ns, unpacked_uint32_extension); \ | |
| X(ns, unpacked_uint64_extension); \ | |
| X(ns, packed_int32_extension); \ | |
| X(ns, packed_int64_extension); \ | |
| X(ns, packed_uint32_extension); \ | |
| X(ns, packed_uint64_extension); \ | |
| X(ns, packed_sint32_extension); \ | |
| X(ns, packed_sint64_extension); \ | |
| X(ns, packed_fixed32_extension); \ | |
| X(ns, packed_fixed64_extension); \ | |
| X(ns, packed_sfixed32_extension); \ | |
| X(ns, packed_sfixed64_extension); \ | |
| X(ns, packed_float_extension); \ | |
| X(ns, packed_double_extension); \ | |
| X(ns, packed_bool_extension); \ | |
| X(ns, packed_enum_extension); | |
| #define PROTOBUF_TEST_UTIL_DECLARE_INPUT_EXT_VARIABLE_(ns, name) \ | |
| static constexpr auto& name = ns::name | |
| // Declare traits for the namespaces ns and import_ns. | |
| // It connects all namespace scoped names together. | |
| // This is needed so that functions that take some type X can find | |
| // declarations from the same namespace. | |
| #define PROTOBUF_TEST_UTIL_DECLARE_INPUT_IMPL(ns, import_ns) \ | |
| template <> \ | |
| struct google::protobuf::TestUtil::TestUtilTraits<::ns::TestAllExtensions> { \ | |
| PROTOBUF_TEST_UTIL_DECLARE_INPUT_EXTS_( \ | |
| ::ns, PROTOBUF_TEST_UTIL_DECLARE_INPUT_EXT_VARIABLE_); \ | |
| using TestAllTypes = ::ns::TestAllTypes; \ | |
| using TestRequired = ::ns::TestRequired; \ | |
| using NestedTestMessageSetContainer = ::ns::NestedTestMessageSetContainer; \ | |
| using OneBytes = ::ns::OneBytes; \ | |
| using OneString = ::ns::OneString; \ | |
| using MoreBytes = ::ns::MoreBytes; \ | |
| using MoreString = ::ns::MoreString; \ | |
| using TestEmptyMessage = ::ns::TestEmptyMessage; \ | |
| using TestRepeatedScalarDifferentTagSizes = \ | |
| ::ns::TestRepeatedScalarDifferentTagSizes; \ | |
| using TestRecursiveMessage = ::ns::TestRecursiveMessage; \ | |
| using Int32Message = ::ns::Int32Message; \ | |
| using Uint32Message = ::ns::Uint32Message; \ | |
| using Int64Message = ::ns::Int64Message; \ | |
| using Uint64Message = ::ns::Uint64Message; \ | |
| using BoolMessage = ::ns::BoolMessage; \ | |
| using RawMessageSet = ::ns::RawMessageSet; \ | |
| using TestFieldOrderings = ::ns::TestFieldOrderings; \ | |
| using TestMessageSetExtension1 = ::ns::TestMessageSetExtension1; \ | |
| using TestMessageSetExtension2 = ::ns::TestMessageSetExtension2; \ | |
| using TestMessageSet = \ | |
| decltype(TestMessageSetExtension1::message_set_extension)::Extendee; \ | |
| using TestOneofBackwardsCompatible = ::ns::TestOneofBackwardsCompatible; \ | |
| using TestOneof = ::ns::TestOneof; \ | |
| using TestOneof2 = ::ns::TestOneof2; \ | |
| using TestPackedExtensions = ::ns::TestPackedExtensions; \ | |
| using TestUnpackedTypes = ::ns::TestUnpackedTypes; \ | |
| using TestPackedTypes = ::ns::TestPackedTypes; \ | |
| using TestAllExtensions = ::ns::TestAllExtensions; \ | |
| static constexpr auto FOREIGN_FOO = ::ns::FOREIGN_FOO; \ | |
| static constexpr auto FOREIGN_BAR = ::ns::FOREIGN_BAR; \ | |
| static constexpr auto FOREIGN_BAZ = ::ns::FOREIGN_BAZ; \ | |
| static constexpr auto IMPORT_FOO = ::import_ns::IMPORT_FOO; \ | |
| static constexpr auto IMPORT_BAR = ::import_ns::IMPORT_BAR; \ | |
| static constexpr auto IMPORT_BAZ = ::import_ns::IMPORT_BAZ; \ | |
| }; \ | |
| template <> \ | |
| struct google::protobuf::TestUtil::TestUtilTraits<::ns::TestFieldOrderings> \ | |
| : google::protobuf::TestUtil::TestUtilTraits<::ns::TestAllExtensions> {}; \ | |
| template <> \ | |
| struct google::protobuf::TestUtil::TestUtilTraits<::ns::TestAllTypes> \ | |
| : google::protobuf::TestUtil::TestUtilTraits<::ns::TestAllExtensions> {}; \ | |
| template <> \ | |
| struct google::protobuf::TestUtil::TestUtilTraits<::ns::TestPackedExtensions> \ | |
| : google::protobuf::TestUtil::TestUtilTraits<::ns::TestAllExtensions> {}; \ | |
| template <> \ | |
| struct google::protobuf::TestUtil::TestUtilTraits<::ns::TestUnpackedExtensions> \ | |
| : google::protobuf::TestUtil::TestUtilTraits<::ns::TestAllExtensions> {} | |
| #define PROTOBUF_TEST_UTIL_DECLARE_INPUT(ns_suffix) \ | |
| PROTOBUF_TEST_UTIL_DECLARE_INPUT_IMPL(proto2_unittest##ns_suffix, \ | |
| proto2_unittest_import##ns_suffix) | |
| // Set every field in the message to a unique value. | |
| template <typename TestAllTypes> | |
| void SetAllFields(TestAllTypes* message); | |
| template <typename TestAllTypes> | |
| void SetOptionalFields(TestAllTypes* message); | |
| template <typename TestAllTypes> | |
| void AddRepeatedFields1(TestAllTypes* message); | |
| template <typename TestAllTypes> | |
| void AddRepeatedFields2(TestAllTypes* message); | |
| template <typename TestAllTypes> | |
| void SetDefaultFields(TestAllTypes* message); | |
| template <typename TestAllTypes> | |
| void SetOneofFields(TestAllTypes* message); | |
| template <typename TestPackedTypes> | |
| void SetPackedFields(TestPackedTypes* message); | |
| template <typename TestUnpackedTypes> | |
| void SetUnpackedFields(TestUnpackedTypes* message); | |
| template <typename TestOneof2> | |
| void SetOneof1(TestOneof2* message); | |
| template <typename TestOneof2> | |
| void SetOneof2(TestOneof2* message); | |
| template <typename TestAllExtensions> | |
| void SetAllExtensions(TestAllExtensions* message); | |
| template <typename TestAllExtensions> | |
| void SetOneofFieldsExtensions(TestAllExtensions* message); | |
| template <typename TestFieldOrderings> | |
| void SetAllFieldsAndExtensions(TestFieldOrderings* message); | |
| template <typename TestPackedExtensions> | |
| void SetPackedExtensions(TestPackedExtensions* message); | |
| // Use the repeated versions of the set_*() accessors to modify all the | |
| // repeated fields of the message (which should already have been | |
| // initialized with Set*Fields()). Set*Fields() itself only tests | |
| // the add_*() accessors. | |
| template <typename TestAllTypes> | |
| void ModifyRepeatedFields(TestAllTypes* message); | |
| template <typename TestAllExtensions> | |
| void ModifyRepeatedExtensions(TestAllExtensions* message); | |
| // Check that all fields have the values that they should have after | |
| // Set*Fields() is called. | |
| template <typename TestAllTypes> | |
| void ExpectAllFieldsSet(const TestAllTypes& message); | |
| template <typename TestPackedTypes> | |
| void ExpectPackedFieldsSet(const TestPackedTypes& message); | |
| template <typename TestUnpackedTypes> | |
| void ExpectUnpackedFieldsSet(const TestUnpackedTypes& message); | |
| template <typename TestOneof2> | |
| void ExpectOneofSet1(const TestOneof2& message); | |
| template <typename TestOneof2> | |
| void ExpectOneofSet2(const TestOneof2& message); | |
| template <typename TestPackedExtensions> | |
| void ExpectPackedExtensionsSet(const TestPackedExtensions& message); | |
| template <typename TestUnpackedExtensions> | |
| void ExpectUnpackedExtensionsSet(const TestUnpackedExtensions& message); | |
| template <typename TestPackedExtensions> | |
| void ExpectLastRepeatedExtensionsRemovedPacked( | |
| const TestPackedExtensions& message); | |
| template <typename TestAllTypes> | |
| void ExpectLastRepeatedsReleased(const TestAllTypes& message); | |
| template <typename TestAllExtensions> | |
| void ExpectLastRepeatedExtensionsReleased(const TestAllExtensions& message); | |
| // Expect that the message is modified as would be expected from | |
| // Modify*Fields(). | |
| template <typename TestAllTypes> | |
| void ExpectRepeatedFieldsModified(const TestAllTypes& message); | |
| template <typename TestAllExtensions> | |
| void ExpectRepeatedExtensionsModified(const TestAllExtensions& message); | |
| // Check that all fields have their default values. | |
| template <typename TestAllTypes> | |
| void ExpectClear(const TestAllTypes& message); | |
| template <typename TestOneof2> | |
| void ExpectOneofClear(const TestOneof2& message); | |
| template <typename TestAllExtensions> | |
| void ExpectExtensionsClear(const TestAllExtensions& message); | |
| // Check that all repeated fields have had their last elements removed. | |
| template <typename TestAllTypes> | |
| void ExpectLastRepeatedsRemoved(const TestAllTypes& message); | |
| template <typename TestAllExtensions> | |
| void ExpectLastRepeatedExtensionsRemoved(const TestAllExtensions& message); | |
| // Check that all repeated fields have had their first and last elements | |
| // swapped. | |
| template <typename TestAllTypes> | |
| void ExpectRepeatedsSwapped(const TestAllTypes& message); | |
| template <typename TestAllExtensions> | |
| void ExpectRepeatedExtensionsSwapped(const TestAllExtensions& message); | |
| template <typename TestOneof2> | |
| void ExpectAtMostOneFieldSetInOneof(const TestOneof2& message); | |
| template <typename TestAllTypes> | |
| void SetAllFields(TestAllTypes* message) { | |
| SetOptionalFields(message); | |
| AddRepeatedFields1(message); | |
| AddRepeatedFields2(message); | |
| SetDefaultFields(message); | |
| SetOneofFields(message); | |
| } | |
| // Helper aliases to extract the different enum types from the message type. | |
| // Allow to find the types without using namespaces. | |
| template <typename T> | |
| auto ForeignEnumF() -> decltype(T().optional_foreign_enum()); | |
| template <typename T> | |
| auto ForeignEnumF() -> decltype(T().packed_enum(0)); | |
| template <typename T> | |
| auto ForeignEnumF() -> decltype(T().unpacked_enum(0)); | |
| template <typename T> | |
| using ForeignEnum = decltype(ForeignEnumF<T>()); | |
| template <typename T> | |
| using ImportEnum = decltype(T().optional_import_enum()); | |
| template <typename TestAllTypes> | |
| void SetOptionalFields(TestAllTypes* message) { | |
| message->set_optional_int32(101); | |
| message->set_optional_int64(102); | |
| message->set_optional_uint32(103); | |
| message->set_optional_uint64(104); | |
| message->set_optional_sint32(105); | |
| message->set_optional_sint64(106); | |
| message->set_optional_fixed32(107); | |
| message->set_optional_fixed64(108); | |
| message->set_optional_sfixed32(109); | |
| message->set_optional_sfixed64(110); | |
| message->set_optional_float(111); | |
| message->set_optional_double(112); | |
| message->set_optional_bool(true); | |
| message->set_optional_string("115"); | |
| message->set_optional_bytes("116"); | |
| message->mutable_optionalgroup()->set_a(117); | |
| message->mutable_optional_nested_message()->set_bb(118); | |
| message->mutable_optional_foreign_message()->set_c(119); | |
| message->mutable_optional_import_message()->set_d(120); | |
| message->mutable_optional_public_import_message()->set_e(126); | |
| message->mutable_optional_lazy_message()->set_bb(127); | |
| message->mutable_optional_unverified_lazy_message()->set_bb(128); | |
| message->set_optional_nested_enum(TestAllTypes::BAZ); | |
| message->set_optional_foreign_enum(ForeignEnum<TestAllTypes>::FOREIGN_BAZ); | |
| message->set_optional_import_enum(ImportEnum<TestAllTypes>::IMPORT_BAZ); | |
| // StringPiece and Cord fields are only accessible via reflection in the | |
| // open source release; see comments in compiler/cpp/string_field.cc. | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| message->GetReflection()->SetString( | |
| message, | |
| message->GetDescriptor()->FindFieldByName("optional_string_piece"), | |
| "124"); | |
| message->GetReflection()->SetString( | |
| message, message->GetDescriptor()->FindFieldByName("optional_cord"), | |
| "125"); | |
| #endif // !PROTOBUF_TEST_NO_DESCRIPTORS | |
| message->set_optional_bytes_cord("optional bytes cord"); | |
| } | |
| // ------------------------------------------------------------------- | |
| template <typename TestAllTypes> | |
| void AddRepeatedFields1(TestAllTypes* message) { | |
| message->add_repeated_int32(201); | |
| message->add_repeated_int64(202); | |
| message->add_repeated_uint32(203); | |
| message->add_repeated_uint64(204); | |
| message->add_repeated_sint32(205); | |
| message->add_repeated_sint64(206); | |
| message->add_repeated_fixed32(207); | |
| message->add_repeated_fixed64(208); | |
| message->add_repeated_sfixed32(209); | |
| message->add_repeated_sfixed64(210); | |
| message->add_repeated_float(211); | |
| message->add_repeated_double(212); | |
| message->add_repeated_bool(true); | |
| message->add_repeated_string("215"); | |
| message->add_repeated_bytes("216"); | |
| message->add_repeatedgroup()->set_a(217); | |
| message->add_repeated_nested_message()->set_bb(218); | |
| message->add_repeated_foreign_message()->set_c(219); | |
| message->add_repeated_import_message()->set_d(220); | |
| message->add_repeated_lazy_message()->set_bb(227); | |
| message->add_repeated_nested_enum(TestAllTypes::BAR); | |
| message->add_repeated_foreign_enum(ForeignEnum<TestAllTypes>::FOREIGN_BAR); | |
| message->add_repeated_import_enum(ImportEnum<TestAllTypes>::IMPORT_BAR); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| message->GetReflection()->AddString( | |
| message, | |
| message->GetDescriptor()->FindFieldByName("repeated_string_piece"), | |
| "224"); | |
| message->GetReflection()->AddString( | |
| message, message->GetDescriptor()->FindFieldByName("repeated_cord"), | |
| "225"); | |
| #endif // !PROTOBUF_TEST_NO_DESCRIPTORS | |
| } | |
| template <typename TestAllTypes> | |
| void AddRepeatedFields2(TestAllTypes* message) { | |
| // Add a second one of each field. | |
| message->add_repeated_int32(301); | |
| message->add_repeated_int64(302); | |
| message->add_repeated_uint32(303); | |
| message->add_repeated_uint64(304); | |
| message->add_repeated_sint32(305); | |
| message->add_repeated_sint64(306); | |
| message->add_repeated_fixed32(307); | |
| message->add_repeated_fixed64(308); | |
| message->add_repeated_sfixed32(309); | |
| message->add_repeated_sfixed64(310); | |
| message->add_repeated_float(311); | |
| message->add_repeated_double(312); | |
| message->add_repeated_bool(false); | |
| message->add_repeated_string("315"); | |
| message->add_repeated_bytes("316"); | |
| message->add_repeatedgroup()->set_a(317); | |
| message->add_repeated_nested_message()->set_bb(318); | |
| message->add_repeated_foreign_message()->set_c(319); | |
| message->add_repeated_import_message()->set_d(320); | |
| message->add_repeated_lazy_message()->set_bb(327); | |
| message->add_repeated_nested_enum(TestAllTypes::BAZ); | |
| message->add_repeated_foreign_enum(ForeignEnum<TestAllTypes>::FOREIGN_BAZ); | |
| message->add_repeated_import_enum(ImportEnum<TestAllTypes>::IMPORT_BAZ); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| message->GetReflection()->AddString( | |
| message, | |
| message->GetDescriptor()->FindFieldByName("repeated_string_piece"), | |
| "324"); | |
| message->GetReflection()->AddString( | |
| message, message->GetDescriptor()->FindFieldByName("repeated_cord"), | |
| "325"); | |
| #endif // !PROTOBUF_TEST_NO_DESCRIPTORS | |
| } | |
| template <typename TestAllTypes> | |
| void SetDefaultFields(TestAllTypes* message) { | |
| message->set_default_int32(401); | |
| message->set_default_int64(402); | |
| message->set_default_uint32(403); | |
| message->set_default_uint64(404); | |
| message->set_default_sint32(405); | |
| message->set_default_sint64(406); | |
| message->set_default_fixed32(407); | |
| message->set_default_fixed64(408); | |
| message->set_default_sfixed32(409); | |
| message->set_default_sfixed64(410); | |
| message->set_default_float(411); | |
| message->set_default_double(412); | |
| message->set_default_bool(false); | |
| message->set_default_string("415"); | |
| message->set_default_bytes("416"); | |
| message->set_default_nested_enum(TestAllTypes::FOO); | |
| message->set_default_foreign_enum(ForeignEnum<TestAllTypes>::FOREIGN_FOO); | |
| message->set_default_import_enum(ImportEnum<TestAllTypes>::IMPORT_FOO); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| message->GetReflection()->SetString( | |
| message, | |
| message->GetDescriptor()->FindFieldByName("default_string_piece"), "424"); | |
| message->GetReflection()->SetString( | |
| message, message->GetDescriptor()->FindFieldByName("default_cord"), | |
| "425"); | |
| #endif // !PROTOBUF_TEST_NO_DESCRIPTORS | |
| } | |
| template <typename TestAllTypes> | |
| void ModifyRepeatedFields(TestAllTypes* message) { | |
| message->set_repeated_int32(1, 501); | |
| message->set_repeated_int64(1, 502); | |
| message->set_repeated_uint32(1, 503); | |
| message->set_repeated_uint64(1, 504); | |
| message->set_repeated_sint32(1, 505); | |
| message->set_repeated_sint64(1, 506); | |
| message->set_repeated_fixed32(1, 507); | |
| message->set_repeated_fixed64(1, 508); | |
| message->set_repeated_sfixed32(1, 509); | |
| message->set_repeated_sfixed64(1, 510); | |
| message->set_repeated_float(1, 511); | |
| message->set_repeated_double(1, 512); | |
| message->set_repeated_bool(1, true); | |
| message->set_repeated_string(1, "515"); | |
| message->set_repeated_bytes(1, "516"); | |
| message->mutable_repeatedgroup(1)->set_a(517); | |
| message->mutable_repeated_nested_message(1)->set_bb(518); | |
| message->mutable_repeated_foreign_message(1)->set_c(519); | |
| message->mutable_repeated_import_message(1)->set_d(520); | |
| message->mutable_repeated_lazy_message(1)->set_bb(527); | |
| message->set_repeated_nested_enum(1, TestAllTypes::FOO); | |
| message->set_repeated_foreign_enum(1, ForeignEnum<TestAllTypes>::FOREIGN_FOO); | |
| message->set_repeated_import_enum(1, ImportEnum<TestAllTypes>::IMPORT_FOO); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| message->GetReflection()->SetRepeatedString( | |
| message, | |
| message->GetDescriptor()->FindFieldByName("repeated_string_piece"), 1, | |
| "524"); | |
| message->GetReflection()->SetRepeatedString( | |
| message, message->GetDescriptor()->FindFieldByName("repeated_cord"), 1, | |
| "525"); | |
| #endif // !PROTOBUF_TEST_NO_DESCRIPTORS | |
| } | |
| template <typename TestAllTypes> | |
| void SetOneofFields(TestAllTypes* message) { | |
| message->set_oneof_uint32(601); | |
| message->mutable_oneof_nested_message()->set_bb(602); | |
| message->mutable_oneof_lazy_nested_message()->set_bb(605); | |
| message->set_oneof_string("603"); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| message->GetReflection()->SetString( | |
| message, message->GetDescriptor()->FindFieldByName("oneof_cord"), "606"); | |
| message->GetReflection()->SetString( | |
| message, message->GetDescriptor()->FindFieldByName("oneof_string_piece"), | |
| "607"); | |
| #endif // !PROTOBUF_TEST_NO_DESCRIPTORS | |
| // Must be last because tests are expecting it. | |
| message->set_oneof_bytes("604"); | |
| } | |
| template <typename TestAllTypes> | |
| void ExpectAllFieldsSet(const TestAllTypes& message) { | |
| EXPECT_TRUE(message.has_optional_int32()); | |
| EXPECT_TRUE(message.has_optional_int64()); | |
| EXPECT_TRUE(message.has_optional_uint32()); | |
| EXPECT_TRUE(message.has_optional_uint64()); | |
| EXPECT_TRUE(message.has_optional_sint32()); | |
| EXPECT_TRUE(message.has_optional_sint64()); | |
| EXPECT_TRUE(message.has_optional_fixed32()); | |
| EXPECT_TRUE(message.has_optional_fixed64()); | |
| EXPECT_TRUE(message.has_optional_sfixed32()); | |
| EXPECT_TRUE(message.has_optional_sfixed64()); | |
| EXPECT_TRUE(message.has_optional_float()); | |
| EXPECT_TRUE(message.has_optional_double()); | |
| EXPECT_TRUE(message.has_optional_bool()); | |
| EXPECT_TRUE(message.has_optional_string()); | |
| EXPECT_TRUE(message.has_optional_bytes()); | |
| EXPECT_TRUE(message.has_optionalgroup()); | |
| EXPECT_TRUE(message.has_optional_nested_message()); | |
| EXPECT_TRUE(message.has_optional_foreign_message()); | |
| EXPECT_TRUE(message.has_optional_import_message()); | |
| EXPECT_TRUE(message.has_optional_public_import_message()); | |
| EXPECT_TRUE(message.has_optional_lazy_message()); | |
| EXPECT_TRUE(message.has_optional_unverified_lazy_message()); | |
| EXPECT_TRUE(message.optionalgroup().has_a()); | |
| EXPECT_TRUE(message.optional_nested_message().has_bb()); | |
| EXPECT_TRUE(message.optional_foreign_message().has_c()); | |
| EXPECT_TRUE(message.optional_import_message().has_d()); | |
| EXPECT_TRUE(message.optional_public_import_message().has_e()); | |
| EXPECT_TRUE(message.optional_lazy_message().has_bb()); | |
| EXPECT_TRUE(message.optional_unverified_lazy_message().has_bb()); | |
| EXPECT_TRUE(message.has_optional_nested_enum()); | |
| EXPECT_TRUE(message.has_optional_foreign_enum()); | |
| EXPECT_TRUE(message.has_optional_import_enum()); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| EXPECT_TRUE(message.has_optional_string_piece()); | |
| EXPECT_TRUE(message.has_optional_cord()); | |
| #endif | |
| EXPECT_TRUE(message.has_optional_bytes_cord()); | |
| EXPECT_EQ(101, message.optional_int32()); | |
| EXPECT_EQ(102, message.optional_int64()); | |
| EXPECT_EQ(103, message.optional_uint32()); | |
| EXPECT_EQ(104, message.optional_uint64()); | |
| EXPECT_EQ(105, message.optional_sint32()); | |
| EXPECT_EQ(106, message.optional_sint64()); | |
| EXPECT_EQ(107, message.optional_fixed32()); | |
| EXPECT_EQ(108, message.optional_fixed64()); | |
| EXPECT_EQ(109, message.optional_sfixed32()); | |
| EXPECT_EQ(110, message.optional_sfixed64()); | |
| EXPECT_EQ(111, message.optional_float()); | |
| EXPECT_EQ(112, message.optional_double()); | |
| EXPECT_TRUE(message.optional_bool()); | |
| EXPECT_EQ("115", message.optional_string()); | |
| EXPECT_EQ("116", message.optional_bytes()); | |
| EXPECT_EQ(117, message.optionalgroup().a()); | |
| EXPECT_EQ(118, message.optional_nested_message().bb()); | |
| EXPECT_EQ(119, message.optional_foreign_message().c()); | |
| EXPECT_EQ(120, message.optional_import_message().d()); | |
| EXPECT_EQ(126, message.optional_public_import_message().e()); | |
| EXPECT_EQ(127, message.optional_lazy_message().bb()); | |
| EXPECT_EQ(128, message.optional_unverified_lazy_message().bb()); | |
| EXPECT_EQ(TestAllTypes::BAZ, message.optional_nested_enum()); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_BAZ, | |
| message.optional_foreign_enum()); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_BAZ, | |
| message.optional_import_enum()); | |
| EXPECT_EQ("optional bytes cord", message.optional_bytes_cord()); | |
| // ----------------------------------------------------------------- | |
| ASSERT_EQ(2, message.repeated_int32_size()); | |
| ASSERT_EQ(2, message.repeated_int64_size()); | |
| ASSERT_EQ(2, message.repeated_uint32_size()); | |
| ASSERT_EQ(2, message.repeated_uint64_size()); | |
| ASSERT_EQ(2, message.repeated_sint32_size()); | |
| ASSERT_EQ(2, message.repeated_sint64_size()); | |
| ASSERT_EQ(2, message.repeated_fixed32_size()); | |
| ASSERT_EQ(2, message.repeated_fixed64_size()); | |
| ASSERT_EQ(2, message.repeated_sfixed32_size()); | |
| ASSERT_EQ(2, message.repeated_sfixed64_size()); | |
| ASSERT_EQ(2, message.repeated_float_size()); | |
| ASSERT_EQ(2, message.repeated_double_size()); | |
| ASSERT_EQ(2, message.repeated_bool_size()); | |
| ASSERT_EQ(2, message.repeated_string_size()); | |
| ASSERT_EQ(2, message.repeated_bytes_size()); | |
| ASSERT_EQ(2, message.repeatedgroup_size()); | |
| ASSERT_EQ(2, message.repeated_nested_message_size()); | |
| ASSERT_EQ(2, message.repeated_foreign_message_size()); | |
| ASSERT_EQ(2, message.repeated_import_message_size()); | |
| ASSERT_EQ(2, message.repeated_lazy_message_size()); | |
| ASSERT_EQ(2, message.repeated_nested_enum_size()); | |
| ASSERT_EQ(2, message.repeated_foreign_enum_size()); | |
| ASSERT_EQ(2, message.repeated_import_enum_size()); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| ASSERT_EQ(2, message.repeated_string_piece_size()); | |
| ASSERT_EQ(2, message.repeated_cord_size()); | |
| #endif | |
| EXPECT_EQ(201, message.repeated_int32(0)); | |
| EXPECT_EQ(202, message.repeated_int64(0)); | |
| EXPECT_EQ(203, message.repeated_uint32(0)); | |
| EXPECT_EQ(204, message.repeated_uint64(0)); | |
| EXPECT_EQ(205, message.repeated_sint32(0)); | |
| EXPECT_EQ(206, message.repeated_sint64(0)); | |
| EXPECT_EQ(207, message.repeated_fixed32(0)); | |
| EXPECT_EQ(208, message.repeated_fixed64(0)); | |
| EXPECT_EQ(209, message.repeated_sfixed32(0)); | |
| EXPECT_EQ(210, message.repeated_sfixed64(0)); | |
| EXPECT_EQ(211, message.repeated_float(0)); | |
| EXPECT_EQ(212, message.repeated_double(0)); | |
| EXPECT_TRUE(message.repeated_bool(0)); | |
| EXPECT_EQ("215", message.repeated_string(0)); | |
| EXPECT_EQ("216", message.repeated_bytes(0)); | |
| EXPECT_EQ(217, message.repeatedgroup(0).a()); | |
| EXPECT_EQ(218, message.repeated_nested_message(0).bb()); | |
| EXPECT_EQ(219, message.repeated_foreign_message(0).c()); | |
| EXPECT_EQ(220, message.repeated_import_message(0).d()); | |
| EXPECT_EQ(227, message.repeated_lazy_message(0).bb()); | |
| EXPECT_EQ(TestAllTypes::BAR, message.repeated_nested_enum(0)); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_BAR, | |
| message.repeated_foreign_enum(0)); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_BAR, | |
| message.repeated_import_enum(0)); | |
| EXPECT_EQ(301, message.repeated_int32(1)); | |
| EXPECT_EQ(302, message.repeated_int64(1)); | |
| EXPECT_EQ(303, message.repeated_uint32(1)); | |
| EXPECT_EQ(304, message.repeated_uint64(1)); | |
| EXPECT_EQ(305, message.repeated_sint32(1)); | |
| EXPECT_EQ(306, message.repeated_sint64(1)); | |
| EXPECT_EQ(307, message.repeated_fixed32(1)); | |
| EXPECT_EQ(308, message.repeated_fixed64(1)); | |
| EXPECT_EQ(309, message.repeated_sfixed32(1)); | |
| EXPECT_EQ(310, message.repeated_sfixed64(1)); | |
| EXPECT_EQ(311, message.repeated_float(1)); | |
| EXPECT_EQ(312, message.repeated_double(1)); | |
| EXPECT_FALSE(message.repeated_bool(1)); | |
| EXPECT_EQ("315", message.repeated_string(1)); | |
| EXPECT_EQ("316", message.repeated_bytes(1)); | |
| EXPECT_EQ(317, message.repeatedgroup(1).a()); | |
| EXPECT_EQ(318, message.repeated_nested_message(1).bb()); | |
| EXPECT_EQ(319, message.repeated_foreign_message(1).c()); | |
| EXPECT_EQ(320, message.repeated_import_message(1).d()); | |
| EXPECT_EQ(327, message.repeated_lazy_message(1).bb()); | |
| EXPECT_EQ(TestAllTypes::BAZ, message.repeated_nested_enum(1)); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_BAZ, | |
| message.repeated_foreign_enum(1)); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_BAZ, | |
| message.repeated_import_enum(1)); | |
| // ----------------------------------------------------------------- | |
| EXPECT_TRUE(message.has_default_int32()); | |
| EXPECT_TRUE(message.has_default_int64()); | |
| EXPECT_TRUE(message.has_default_uint32()); | |
| EXPECT_TRUE(message.has_default_uint64()); | |
| EXPECT_TRUE(message.has_default_sint32()); | |
| EXPECT_TRUE(message.has_default_sint64()); | |
| EXPECT_TRUE(message.has_default_fixed32()); | |
| EXPECT_TRUE(message.has_default_fixed64()); | |
| EXPECT_TRUE(message.has_default_sfixed32()); | |
| EXPECT_TRUE(message.has_default_sfixed64()); | |
| EXPECT_TRUE(message.has_default_float()); | |
| EXPECT_TRUE(message.has_default_double()); | |
| EXPECT_TRUE(message.has_default_bool()); | |
| EXPECT_TRUE(message.has_default_string()); | |
| EXPECT_TRUE(message.has_default_bytes()); | |
| EXPECT_TRUE(message.has_default_nested_enum()); | |
| EXPECT_TRUE(message.has_default_foreign_enum()); | |
| EXPECT_TRUE(message.has_default_import_enum()); | |
| EXPECT_EQ(401, message.default_int32()); | |
| EXPECT_EQ(402, message.default_int64()); | |
| EXPECT_EQ(403, message.default_uint32()); | |
| EXPECT_EQ(404, message.default_uint64()); | |
| EXPECT_EQ(405, message.default_sint32()); | |
| EXPECT_EQ(406, message.default_sint64()); | |
| EXPECT_EQ(407, message.default_fixed32()); | |
| EXPECT_EQ(408, message.default_fixed64()); | |
| EXPECT_EQ(409, message.default_sfixed32()); | |
| EXPECT_EQ(410, message.default_sfixed64()); | |
| EXPECT_EQ(411, message.default_float()); | |
| EXPECT_EQ(412, message.default_double()); | |
| EXPECT_FALSE(message.default_bool()); | |
| EXPECT_EQ("415", message.default_string()); | |
| EXPECT_EQ("416", message.default_bytes()); | |
| EXPECT_EQ(TestAllTypes::FOO, message.default_nested_enum()); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_FOO, | |
| message.default_foreign_enum()); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_FOO, | |
| message.default_import_enum()); | |
| EXPECT_FALSE(message.has_oneof_uint32()); | |
| EXPECT_FALSE(message.has_oneof_nested_message()); | |
| EXPECT_FALSE(message.has_oneof_string()); | |
| EXPECT_TRUE(message.has_oneof_bytes()); | |
| EXPECT_EQ("604", message.oneof_bytes()); | |
| } | |
| template <typename TestAllTypes> | |
| void ExpectClear(const TestAllTypes& message) { | |
| // has_blah() should initially be false for all optional fields. | |
| EXPECT_FALSE(message.has_optional_int32()); | |
| EXPECT_FALSE(message.has_optional_int64()); | |
| EXPECT_FALSE(message.has_optional_uint32()); | |
| EXPECT_FALSE(message.has_optional_uint64()); | |
| EXPECT_FALSE(message.has_optional_sint32()); | |
| EXPECT_FALSE(message.has_optional_sint64()); | |
| EXPECT_FALSE(message.has_optional_fixed32()); | |
| EXPECT_FALSE(message.has_optional_fixed64()); | |
| EXPECT_FALSE(message.has_optional_sfixed32()); | |
| EXPECT_FALSE(message.has_optional_sfixed64()); | |
| EXPECT_FALSE(message.has_optional_float()); | |
| EXPECT_FALSE(message.has_optional_double()); | |
| EXPECT_FALSE(message.has_optional_bool()); | |
| EXPECT_FALSE(message.has_optional_string()); | |
| EXPECT_FALSE(message.has_optional_bytes()); | |
| EXPECT_FALSE(message.has_optionalgroup()); | |
| EXPECT_FALSE(message.has_optional_nested_message()); | |
| EXPECT_FALSE(message.has_optional_foreign_message()); | |
| EXPECT_FALSE(message.has_optional_import_message()); | |
| EXPECT_FALSE(message.has_optional_public_import_message()); | |
| EXPECT_FALSE(message.has_optional_lazy_message()); | |
| EXPECT_FALSE(message.has_optional_unverified_lazy_message()); | |
| EXPECT_FALSE(message.has_optional_nested_enum()); | |
| EXPECT_FALSE(message.has_optional_foreign_enum()); | |
| EXPECT_FALSE(message.has_optional_import_enum()); | |
| EXPECT_FALSE(message.has_optional_string_piece()); | |
| EXPECT_FALSE(message.has_optional_cord()); | |
| EXPECT_FALSE(message.has_optional_bytes_cord()); | |
| // Optional fields without defaults are set to zero or something like it. | |
| EXPECT_EQ(0, message.optional_int32()); | |
| EXPECT_EQ(0, message.optional_int64()); | |
| EXPECT_EQ(0, message.optional_uint32()); | |
| EXPECT_EQ(0, message.optional_uint64()); | |
| EXPECT_EQ(0, message.optional_sint32()); | |
| EXPECT_EQ(0, message.optional_sint64()); | |
| EXPECT_EQ(0, message.optional_fixed32()); | |
| EXPECT_EQ(0, message.optional_fixed64()); | |
| EXPECT_EQ(0, message.optional_sfixed32()); | |
| EXPECT_EQ(0, message.optional_sfixed64()); | |
| EXPECT_EQ(0, message.optional_float()); | |
| EXPECT_EQ(0, message.optional_double()); | |
| EXPECT_FALSE(message.optional_bool()); | |
| EXPECT_EQ("", message.optional_string()); | |
| EXPECT_EQ("", message.optional_bytes()); | |
| // Embedded messages should also be clear. | |
| EXPECT_FALSE(message.optionalgroup().has_a()); | |
| EXPECT_FALSE(message.optional_nested_message().has_bb()); | |
| EXPECT_FALSE(message.optional_foreign_message().has_c()); | |
| EXPECT_FALSE(message.optional_import_message().has_d()); | |
| EXPECT_FALSE(message.optional_public_import_message().has_e()); | |
| EXPECT_FALSE(message.optional_lazy_message().has_bb()); | |
| EXPECT_FALSE(message.optional_unverified_lazy_message().has_bb()); | |
| EXPECT_EQ(0, message.optionalgroup().a()); | |
| EXPECT_EQ(0, message.optional_nested_message().bb()); | |
| EXPECT_EQ(0, message.optional_foreign_message().c()); | |
| EXPECT_EQ(0, message.optional_import_message().d()); | |
| EXPECT_EQ(0, message.optional_public_import_message().e()); | |
| EXPECT_EQ(0, message.optional_lazy_message().bb()); | |
| EXPECT_EQ(0, message.optional_unverified_lazy_message().bb()); | |
| // Enums without defaults are set to the first value in the enum. | |
| EXPECT_EQ(TestAllTypes::FOO, message.optional_nested_enum()); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_FOO, | |
| message.optional_foreign_enum()); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_FOO, | |
| message.optional_import_enum()); | |
| EXPECT_EQ("", message.optional_bytes_cord()); | |
| // Repeated fields are empty. | |
| EXPECT_EQ(0, message.repeated_int32_size()); | |
| EXPECT_EQ(0, message.repeated_int64_size()); | |
| EXPECT_EQ(0, message.repeated_uint32_size()); | |
| EXPECT_EQ(0, message.repeated_uint64_size()); | |
| EXPECT_EQ(0, message.repeated_sint32_size()); | |
| EXPECT_EQ(0, message.repeated_sint64_size()); | |
| EXPECT_EQ(0, message.repeated_fixed32_size()); | |
| EXPECT_EQ(0, message.repeated_fixed64_size()); | |
| EXPECT_EQ(0, message.repeated_sfixed32_size()); | |
| EXPECT_EQ(0, message.repeated_sfixed64_size()); | |
| EXPECT_EQ(0, message.repeated_float_size()); | |
| EXPECT_EQ(0, message.repeated_double_size()); | |
| EXPECT_EQ(0, message.repeated_bool_size()); | |
| EXPECT_EQ(0, message.repeated_string_size()); | |
| EXPECT_EQ(0, message.repeated_bytes_size()); | |
| EXPECT_EQ(0, message.repeatedgroup_size()); | |
| EXPECT_EQ(0, message.repeated_nested_message_size()); | |
| EXPECT_EQ(0, message.repeated_foreign_message_size()); | |
| EXPECT_EQ(0, message.repeated_import_message_size()); | |
| EXPECT_EQ(0, message.repeated_lazy_message_size()); | |
| EXPECT_EQ(0, message.repeated_nested_enum_size()); | |
| EXPECT_EQ(0, message.repeated_foreign_enum_size()); | |
| EXPECT_EQ(0, message.repeated_import_enum_size()); | |
| EXPECT_EQ(0, message.repeated_string_piece_size()); | |
| EXPECT_EQ(0, message.repeated_cord_size()); | |
| // has_blah() should also be false for all default fields. | |
| EXPECT_FALSE(message.has_default_int32()); | |
| EXPECT_FALSE(message.has_default_int64()); | |
| EXPECT_FALSE(message.has_default_uint32()); | |
| EXPECT_FALSE(message.has_default_uint64()); | |
| EXPECT_FALSE(message.has_default_sint32()); | |
| EXPECT_FALSE(message.has_default_sint64()); | |
| EXPECT_FALSE(message.has_default_fixed32()); | |
| EXPECT_FALSE(message.has_default_fixed64()); | |
| EXPECT_FALSE(message.has_default_sfixed32()); | |
| EXPECT_FALSE(message.has_default_sfixed64()); | |
| EXPECT_FALSE(message.has_default_float()); | |
| EXPECT_FALSE(message.has_default_double()); | |
| EXPECT_FALSE(message.has_default_bool()); | |
| EXPECT_FALSE(message.has_default_string()); | |
| EXPECT_FALSE(message.has_default_bytes()); | |
| EXPECT_FALSE(message.has_default_nested_enum()); | |
| EXPECT_FALSE(message.has_default_foreign_enum()); | |
| EXPECT_FALSE(message.has_default_import_enum()); | |
| // Fields with defaults have their default values (duh). | |
| EXPECT_EQ(41, message.default_int32()); | |
| EXPECT_EQ(42, message.default_int64()); | |
| EXPECT_EQ(43, message.default_uint32()); | |
| EXPECT_EQ(44, message.default_uint64()); | |
| EXPECT_EQ(-45, message.default_sint32()); | |
| EXPECT_EQ(46, message.default_sint64()); | |
| EXPECT_EQ(47, message.default_fixed32()); | |
| EXPECT_EQ(48, message.default_fixed64()); | |
| EXPECT_EQ(49, message.default_sfixed32()); | |
| EXPECT_EQ(-50, message.default_sfixed64()); | |
| EXPECT_EQ(51.5, message.default_float()); | |
| EXPECT_EQ(52e3, message.default_double()); | |
| EXPECT_TRUE(message.default_bool()); | |
| EXPECT_EQ("hello", message.default_string()); | |
| EXPECT_EQ("world", message.default_bytes()); | |
| EXPECT_EQ(TestAllTypes::BAR, message.default_nested_enum()); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_BAR, | |
| message.default_foreign_enum()); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_BAR, | |
| message.default_import_enum()); | |
| EXPECT_FALSE(message.has_oneof_uint32()); | |
| EXPECT_FALSE(message.has_oneof_nested_message()); | |
| EXPECT_FALSE(message.has_oneof_string()); | |
| EXPECT_FALSE(message.has_oneof_bytes()); | |
| } | |
| template <typename TestAllTypes> | |
| void ExpectRepeatedFieldsModified(const TestAllTypes& message) { | |
| // ModifyRepeatedFields only sets the second repeated element of each | |
| // field. In addition to verifying this, we also verify that the first | |
| // element and size were *not* modified. | |
| ASSERT_EQ(2, message.repeated_int32_size()); | |
| ASSERT_EQ(2, message.repeated_int64_size()); | |
| ASSERT_EQ(2, message.repeated_uint32_size()); | |
| ASSERT_EQ(2, message.repeated_uint64_size()); | |
| ASSERT_EQ(2, message.repeated_sint32_size()); | |
| ASSERT_EQ(2, message.repeated_sint64_size()); | |
| ASSERT_EQ(2, message.repeated_fixed32_size()); | |
| ASSERT_EQ(2, message.repeated_fixed64_size()); | |
| ASSERT_EQ(2, message.repeated_sfixed32_size()); | |
| ASSERT_EQ(2, message.repeated_sfixed64_size()); | |
| ASSERT_EQ(2, message.repeated_float_size()); | |
| ASSERT_EQ(2, message.repeated_double_size()); | |
| ASSERT_EQ(2, message.repeated_bool_size()); | |
| ASSERT_EQ(2, message.repeated_string_size()); | |
| ASSERT_EQ(2, message.repeated_bytes_size()); | |
| ASSERT_EQ(2, message.repeatedgroup_size()); | |
| ASSERT_EQ(2, message.repeated_nested_message_size()); | |
| ASSERT_EQ(2, message.repeated_foreign_message_size()); | |
| ASSERT_EQ(2, message.repeated_import_message_size()); | |
| ASSERT_EQ(2, message.repeated_lazy_message_size()); | |
| ASSERT_EQ(2, message.repeated_nested_enum_size()); | |
| ASSERT_EQ(2, message.repeated_foreign_enum_size()); | |
| ASSERT_EQ(2, message.repeated_import_enum_size()); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| ASSERT_EQ(2, message.repeated_string_piece_size()); | |
| ASSERT_EQ(2, message.repeated_cord_size()); | |
| #endif | |
| EXPECT_EQ(201, message.repeated_int32(0)); | |
| EXPECT_EQ(202, message.repeated_int64(0)); | |
| EXPECT_EQ(203, message.repeated_uint32(0)); | |
| EXPECT_EQ(204, message.repeated_uint64(0)); | |
| EXPECT_EQ(205, message.repeated_sint32(0)); | |
| EXPECT_EQ(206, message.repeated_sint64(0)); | |
| EXPECT_EQ(207, message.repeated_fixed32(0)); | |
| EXPECT_EQ(208, message.repeated_fixed64(0)); | |
| EXPECT_EQ(209, message.repeated_sfixed32(0)); | |
| EXPECT_EQ(210, message.repeated_sfixed64(0)); | |
| EXPECT_EQ(211, message.repeated_float(0)); | |
| EXPECT_EQ(212, message.repeated_double(0)); | |
| EXPECT_TRUE(message.repeated_bool(0)); | |
| EXPECT_EQ("215", message.repeated_string(0)); | |
| EXPECT_EQ("216", message.repeated_bytes(0)); | |
| EXPECT_EQ(217, message.repeatedgroup(0).a()); | |
| EXPECT_EQ(218, message.repeated_nested_message(0).bb()); | |
| EXPECT_EQ(219, message.repeated_foreign_message(0).c()); | |
| EXPECT_EQ(220, message.repeated_import_message(0).d()); | |
| EXPECT_EQ(227, message.repeated_lazy_message(0).bb()); | |
| EXPECT_EQ(TestAllTypes::BAR, message.repeated_nested_enum(0)); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_BAR, | |
| message.repeated_foreign_enum(0)); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_BAR, | |
| message.repeated_import_enum(0)); | |
| // Actually verify the second (modified) elements now. | |
| EXPECT_EQ(501, message.repeated_int32(1)); | |
| EXPECT_EQ(502, message.repeated_int64(1)); | |
| EXPECT_EQ(503, message.repeated_uint32(1)); | |
| EXPECT_EQ(504, message.repeated_uint64(1)); | |
| EXPECT_EQ(505, message.repeated_sint32(1)); | |
| EXPECT_EQ(506, message.repeated_sint64(1)); | |
| EXPECT_EQ(507, message.repeated_fixed32(1)); | |
| EXPECT_EQ(508, message.repeated_fixed64(1)); | |
| EXPECT_EQ(509, message.repeated_sfixed32(1)); | |
| EXPECT_EQ(510, message.repeated_sfixed64(1)); | |
| EXPECT_EQ(511, message.repeated_float(1)); | |
| EXPECT_EQ(512, message.repeated_double(1)); | |
| EXPECT_TRUE(message.repeated_bool(1)); | |
| EXPECT_EQ("515", message.repeated_string(1)); | |
| EXPECT_EQ("516", message.repeated_bytes(1)); | |
| EXPECT_EQ(517, message.repeatedgroup(1).a()); | |
| EXPECT_EQ(518, message.repeated_nested_message(1).bb()); | |
| EXPECT_EQ(519, message.repeated_foreign_message(1).c()); | |
| EXPECT_EQ(520, message.repeated_import_message(1).d()); | |
| EXPECT_EQ(527, message.repeated_lazy_message(1).bb()); | |
| EXPECT_EQ(TestAllTypes::FOO, message.repeated_nested_enum(1)); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_FOO, | |
| message.repeated_foreign_enum(1)); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_FOO, | |
| message.repeated_import_enum(1)); | |
| } | |
| template <typename TestAllTypes> | |
| void ExpectLastRepeatedsRemoved(const TestAllTypes& message) { | |
| ASSERT_EQ(1, message.repeated_int32_size()); | |
| ASSERT_EQ(1, message.repeated_int64_size()); | |
| ASSERT_EQ(1, message.repeated_uint32_size()); | |
| ASSERT_EQ(1, message.repeated_uint64_size()); | |
| ASSERT_EQ(1, message.repeated_sint32_size()); | |
| ASSERT_EQ(1, message.repeated_sint64_size()); | |
| ASSERT_EQ(1, message.repeated_fixed32_size()); | |
| ASSERT_EQ(1, message.repeated_fixed64_size()); | |
| ASSERT_EQ(1, message.repeated_sfixed32_size()); | |
| ASSERT_EQ(1, message.repeated_sfixed64_size()); | |
| ASSERT_EQ(1, message.repeated_float_size()); | |
| ASSERT_EQ(1, message.repeated_double_size()); | |
| ASSERT_EQ(1, message.repeated_bool_size()); | |
| ASSERT_EQ(1, message.repeated_string_size()); | |
| ASSERT_EQ(1, message.repeated_bytes_size()); | |
| ASSERT_EQ(1, message.repeatedgroup_size()); | |
| ASSERT_EQ(1, message.repeated_nested_message_size()); | |
| ASSERT_EQ(1, message.repeated_foreign_message_size()); | |
| ASSERT_EQ(1, message.repeated_import_message_size()); | |
| ASSERT_EQ(1, message.repeated_import_message_size()); | |
| ASSERT_EQ(1, message.repeated_nested_enum_size()); | |
| ASSERT_EQ(1, message.repeated_foreign_enum_size()); | |
| ASSERT_EQ(1, message.repeated_import_enum_size()); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| ASSERT_EQ(1, message.repeated_string_piece_size()); | |
| ASSERT_EQ(1, message.repeated_cord_size()); | |
| #endif | |
| // Test that the remaining element is the correct one. | |
| EXPECT_EQ(201, message.repeated_int32(0)); | |
| EXPECT_EQ(202, message.repeated_int64(0)); | |
| EXPECT_EQ(203, message.repeated_uint32(0)); | |
| EXPECT_EQ(204, message.repeated_uint64(0)); | |
| EXPECT_EQ(205, message.repeated_sint32(0)); | |
| EXPECT_EQ(206, message.repeated_sint64(0)); | |
| EXPECT_EQ(207, message.repeated_fixed32(0)); | |
| EXPECT_EQ(208, message.repeated_fixed64(0)); | |
| EXPECT_EQ(209, message.repeated_sfixed32(0)); | |
| EXPECT_EQ(210, message.repeated_sfixed64(0)); | |
| EXPECT_EQ(211, message.repeated_float(0)); | |
| EXPECT_EQ(212, message.repeated_double(0)); | |
| EXPECT_TRUE(message.repeated_bool(0)); | |
| EXPECT_EQ("215", message.repeated_string(0)); | |
| EXPECT_EQ("216", message.repeated_bytes(0)); | |
| EXPECT_EQ(217, message.repeatedgroup(0).a()); | |
| EXPECT_EQ(218, message.repeated_nested_message(0).bb()); | |
| EXPECT_EQ(219, message.repeated_foreign_message(0).c()); | |
| EXPECT_EQ(220, message.repeated_import_message(0).d()); | |
| EXPECT_EQ(220, message.repeated_import_message(0).d()); | |
| EXPECT_EQ(TestAllTypes::BAR, message.repeated_nested_enum(0)); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_BAR, | |
| message.repeated_foreign_enum(0)); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_BAR, | |
| message.repeated_import_enum(0)); | |
| } | |
| template <typename TestAllTypes> | |
| void ExpectRepeatedsSwapped(const TestAllTypes& message) { | |
| ASSERT_EQ(2, message.repeated_int32_size()); | |
| ASSERT_EQ(2, message.repeated_int64_size()); | |
| ASSERT_EQ(2, message.repeated_uint32_size()); | |
| ASSERT_EQ(2, message.repeated_uint64_size()); | |
| ASSERT_EQ(2, message.repeated_sint32_size()); | |
| ASSERT_EQ(2, message.repeated_sint64_size()); | |
| ASSERT_EQ(2, message.repeated_fixed32_size()); | |
| ASSERT_EQ(2, message.repeated_fixed64_size()); | |
| ASSERT_EQ(2, message.repeated_sfixed32_size()); | |
| ASSERT_EQ(2, message.repeated_sfixed64_size()); | |
| ASSERT_EQ(2, message.repeated_float_size()); | |
| ASSERT_EQ(2, message.repeated_double_size()); | |
| ASSERT_EQ(2, message.repeated_bool_size()); | |
| ASSERT_EQ(2, message.repeated_string_size()); | |
| ASSERT_EQ(2, message.repeated_bytes_size()); | |
| ASSERT_EQ(2, message.repeatedgroup_size()); | |
| ASSERT_EQ(2, message.repeated_nested_message_size()); | |
| ASSERT_EQ(2, message.repeated_foreign_message_size()); | |
| ASSERT_EQ(2, message.repeated_import_message_size()); | |
| ASSERT_EQ(2, message.repeated_import_message_size()); | |
| ASSERT_EQ(2, message.repeated_nested_enum_size()); | |
| ASSERT_EQ(2, message.repeated_foreign_enum_size()); | |
| ASSERT_EQ(2, message.repeated_import_enum_size()); | |
| #ifndef PROTOBUF_TEST_NO_DESCRIPTORS | |
| ASSERT_EQ(2, message.repeated_string_piece_size()); | |
| ASSERT_EQ(2, message.repeated_cord_size()); | |
| #endif | |
| // Test that the first element and second element are flipped. | |
| EXPECT_EQ(201, message.repeated_int32(1)); | |
| EXPECT_EQ(202, message.repeated_int64(1)); | |
| EXPECT_EQ(203, message.repeated_uint32(1)); | |
| EXPECT_EQ(204, message.repeated_uint64(1)); | |
| EXPECT_EQ(205, message.repeated_sint32(1)); | |
| EXPECT_EQ(206, message.repeated_sint64(1)); | |
| EXPECT_EQ(207, message.repeated_fixed32(1)); | |
| EXPECT_EQ(208, message.repeated_fixed64(1)); | |
| EXPECT_EQ(209, message.repeated_sfixed32(1)); | |
| EXPECT_EQ(210, message.repeated_sfixed64(1)); | |
| EXPECT_EQ(211, message.repeated_float(1)); | |
| EXPECT_EQ(212, message.repeated_double(1)); | |
| EXPECT_TRUE(message.repeated_bool(1)); | |
| EXPECT_EQ("215", message.repeated_string(1)); | |
| EXPECT_EQ("216", message.repeated_bytes(1)); | |
| EXPECT_EQ(217, message.repeatedgroup(1).a()); | |
| EXPECT_EQ(218, message.repeated_nested_message(1).bb()); | |
| EXPECT_EQ(219, message.repeated_foreign_message(1).c()); | |
| EXPECT_EQ(220, message.repeated_import_message(1).d()); | |
| EXPECT_EQ(220, message.repeated_import_message(1).d()); | |
| EXPECT_EQ(TestAllTypes::BAR, message.repeated_nested_enum(1)); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_BAR, | |
| message.repeated_foreign_enum(1)); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_BAR, | |
| message.repeated_import_enum(1)); | |
| EXPECT_EQ(301, message.repeated_int32(0)); | |
| EXPECT_EQ(302, message.repeated_int64(0)); | |
| EXPECT_EQ(303, message.repeated_uint32(0)); | |
| EXPECT_EQ(304, message.repeated_uint64(0)); | |
| EXPECT_EQ(305, message.repeated_sint32(0)); | |
| EXPECT_EQ(306, message.repeated_sint64(0)); | |
| EXPECT_EQ(307, message.repeated_fixed32(0)); | |
| EXPECT_EQ(308, message.repeated_fixed64(0)); | |
| EXPECT_EQ(309, message.repeated_sfixed32(0)); | |
| EXPECT_EQ(310, message.repeated_sfixed64(0)); | |
| EXPECT_EQ(311, message.repeated_float(0)); | |
| EXPECT_EQ(312, message.repeated_double(0)); | |
| EXPECT_FALSE(message.repeated_bool(0)); | |
| EXPECT_EQ("315", message.repeated_string(0)); | |
| EXPECT_EQ("316", message.repeated_bytes(0)); | |
| EXPECT_EQ(317, message.repeatedgroup(0).a()); | |
| EXPECT_EQ(318, message.repeated_nested_message(0).bb()); | |
| EXPECT_EQ(319, message.repeated_foreign_message(0).c()); | |
| EXPECT_EQ(320, message.repeated_import_message(0).d()); | |
| EXPECT_EQ(320, message.repeated_import_message(0).d()); | |
| EXPECT_EQ(TestAllTypes::BAZ, message.repeated_nested_enum(0)); | |
| EXPECT_EQ(ForeignEnum<TestAllTypes>::FOREIGN_BAZ, | |
| message.repeated_foreign_enum(0)); | |
| EXPECT_EQ(ImportEnum<TestAllTypes>::IMPORT_BAZ, | |
| message.repeated_import_enum(0)); | |
| } | |
| template <typename TestPackedTypes> | |
| void SetPackedFields(TestPackedTypes* message) { | |
| message->add_packed_int32(601); | |
| message->add_packed_int64(602); | |
| message->add_packed_uint32(603); | |
| message->add_packed_uint64(604); | |
| message->add_packed_sint32(605); | |
| message->add_packed_sint64(606); | |
| message->add_packed_fixed32(607); | |
| message->add_packed_fixed64(608); | |
| message->add_packed_sfixed32(609); | |
| message->add_packed_sfixed64(610); | |
| message->add_packed_float(611); | |
| message->add_packed_double(612); | |
| message->add_packed_bool(true); | |
| message->add_packed_enum(ForeignEnum<TestPackedTypes>::FOREIGN_BAR); | |
| // add a second one of each field | |
| message->add_packed_int32(701); | |
| message->add_packed_int64(702); | |
| message->add_packed_uint32(703); | |
| message->add_packed_uint64(704); | |
| message->add_packed_sint32(705); | |
| message->add_packed_sint64(706); | |
| message->add_packed_fixed32(707); | |
| message->add_packed_fixed64(708); | |
| message->add_packed_sfixed32(709); | |
| message->add_packed_sfixed64(710); | |
| message->add_packed_float(711); | |
| message->add_packed_double(712); | |
| message->add_packed_bool(false); | |
| message->add_packed_enum(ForeignEnum<TestPackedTypes>::FOREIGN_BAZ); | |
| } | |
| template <typename TestPackedTypes> | |
| void ExpectPackedFieldsSet(const TestPackedTypes& message) { | |
| ASSERT_EQ(2, message.packed_int32_size()); | |
| ASSERT_EQ(2, message.packed_int64_size()); | |
| ASSERT_EQ(2, message.packed_uint32_size()); | |
| ASSERT_EQ(2, message.packed_uint64_size()); | |
| ASSERT_EQ(2, message.packed_sint32_size()); | |
| ASSERT_EQ(2, message.packed_sint64_size()); | |
| ASSERT_EQ(2, message.packed_fixed32_size()); | |
| ASSERT_EQ(2, message.packed_fixed64_size()); | |
| ASSERT_EQ(2, message.packed_sfixed32_size()); | |
| ASSERT_EQ(2, message.packed_sfixed64_size()); | |
| ASSERT_EQ(2, message.packed_float_size()); | |
| ASSERT_EQ(2, message.packed_double_size()); | |
| ASSERT_EQ(2, message.packed_bool_size()); | |
| ASSERT_EQ(2, message.packed_enum_size()); | |
| EXPECT_EQ(601, message.packed_int32(0)); | |
| EXPECT_EQ(602, message.packed_int64(0)); | |
| EXPECT_EQ(603, message.packed_uint32(0)); | |
| EXPECT_EQ(604, message.packed_uint64(0)); | |
| EXPECT_EQ(605, message.packed_sint32(0)); | |
| EXPECT_EQ(606, message.packed_sint64(0)); | |
| EXPECT_EQ(607, message.packed_fixed32(0)); | |
| EXPECT_EQ(608, message.packed_fixed64(0)); | |
| EXPECT_EQ(609, message.packed_sfixed32(0)); | |
| EXPECT_EQ(610, message.packed_sfixed64(0)); | |
| EXPECT_EQ(611, message.packed_float(0)); | |
| EXPECT_EQ(612, message.packed_double(0)); | |
| EXPECT_TRUE(message.packed_bool(0)); | |
| EXPECT_EQ(ForeignEnum<TestPackedTypes>::FOREIGN_BAR, message.packed_enum(0)); | |
| EXPECT_EQ(701, message.packed_int32(1)); | |
| EXPECT_EQ(702, message.packed_int64(1)); | |
| EXPECT_EQ(703, message.packed_uint32(1)); | |
| EXPECT_EQ(704, message.packed_uint64(1)); | |
| EXPECT_EQ(705, message.packed_sint32(1)); | |
| EXPECT_EQ(706, message.packed_sint64(1)); | |
| EXPECT_EQ(707, message.packed_fixed32(1)); | |
| EXPECT_EQ(708, message.packed_fixed64(1)); | |
| EXPECT_EQ(709, message.packed_sfixed32(1)); | |
| EXPECT_EQ(710, message.packed_sfixed64(1)); | |
| EXPECT_EQ(711, message.packed_float(1)); | |
| EXPECT_EQ(712, message.packed_double(1)); | |
| EXPECT_FALSE(message.packed_bool(1)); | |
| EXPECT_EQ(ForeignEnum<TestPackedTypes>::FOREIGN_BAZ, message.packed_enum(1)); | |
| } | |
| template <typename TestUnpackedTypes> | |
| void SetUnpackedFields(TestUnpackedTypes* message) { | |
| // The values applied here must match those of SetPackedFields. | |
| message->add_unpacked_int32(601); | |
| message->add_unpacked_int64(602); | |
| message->add_unpacked_uint32(603); | |
| message->add_unpacked_uint64(604); | |
| message->add_unpacked_sint32(605); | |
| message->add_unpacked_sint64(606); | |
| message->add_unpacked_fixed32(607); | |
| message->add_unpacked_fixed64(608); | |
| message->add_unpacked_sfixed32(609); | |
| message->add_unpacked_sfixed64(610); | |
| message->add_unpacked_float(611); | |
| message->add_unpacked_double(612); | |
| message->add_unpacked_bool(true); | |
| message->add_unpacked_enum(ForeignEnum<TestUnpackedTypes>::FOREIGN_BAR); | |
| // add a second one of each field | |
| message->add_unpacked_int32(701); | |
| message->add_unpacked_int64(702); | |
| message->add_unpacked_uint32(703); | |
| message->add_unpacked_uint64(704); | |
| message->add_unpacked_sint32(705); | |
| message->add_unpacked_sint64(706); | |
| message->add_unpacked_fixed32(707); | |
| message->add_unpacked_fixed64(708); | |
| message->add_unpacked_sfixed32(709); | |
| message->add_unpacked_sfixed64(710); | |
| message->add_unpacked_float(711); | |
| message->add_unpacked_double(712); | |
| message->add_unpacked_bool(false); | |
| message->add_unpacked_enum(ForeignEnum<TestUnpackedTypes>::FOREIGN_BAZ); | |
| } | |
| // ------------------------------------------------------------------- | |
| template <typename TestUnpackedTypes> | |
| void ExpectUnpackedFieldsSet(const TestUnpackedTypes& message) { | |
| // The values expected here must match those of ExpectPackedFieldsSet. | |
| ASSERT_EQ(2, message.unpacked_int32_size()); | |
| ASSERT_EQ(2, message.unpacked_int64_size()); | |
| ASSERT_EQ(2, message.unpacked_uint32_size()); | |
| ASSERT_EQ(2, message.unpacked_uint64_size()); | |
| ASSERT_EQ(2, message.unpacked_sint32_size()); | |
| ASSERT_EQ(2, message.unpacked_sint64_size()); | |
| ASSERT_EQ(2, message.unpacked_fixed32_size()); | |
| ASSERT_EQ(2, message.unpacked_fixed64_size()); | |
| ASSERT_EQ(2, message.unpacked_sfixed32_size()); | |
| ASSERT_EQ(2, message.unpacked_sfixed64_size()); | |
| ASSERT_EQ(2, message.unpacked_float_size()); | |
| ASSERT_EQ(2, message.unpacked_double_size()); | |
| ASSERT_EQ(2, message.unpacked_bool_size()); | |
| ASSERT_EQ(2, message.unpacked_enum_size()); | |
| EXPECT_EQ(601, message.unpacked_int32(0)); | |
| EXPECT_EQ(602, message.unpacked_int64(0)); | |
| EXPECT_EQ(603, message.unpacked_uint32(0)); | |
| EXPECT_EQ(604, message.unpacked_uint64(0)); | |
| EXPECT_EQ(605, message.unpacked_sint32(0)); | |
| EXPECT_EQ(606, message.unpacked_sint64(0)); | |
| EXPECT_EQ(607, message.unpacked_fixed32(0)); | |
| EXPECT_EQ(608, message.unpacked_fixed64(0)); | |
| EXPECT_EQ(609, message.unpacked_sfixed32(0)); | |
| EXPECT_EQ(610, message.unpacked_sfixed64(0)); | |
| EXPECT_EQ(611, message.unpacked_float(0)); | |
| EXPECT_EQ(612, message.unpacked_double(0)); | |
| EXPECT_TRUE(message.unpacked_bool(0)); | |
| EXPECT_EQ(ForeignEnum<TestUnpackedTypes>::FOREIGN_BAR, | |
| message.unpacked_enum(0)); | |
| EXPECT_EQ(701, message.unpacked_int32(1)); | |
| EXPECT_EQ(702, message.unpacked_int64(1)); | |
| EXPECT_EQ(703, message.unpacked_uint32(1)); | |
| EXPECT_EQ(704, message.unpacked_uint64(1)); | |
| EXPECT_EQ(705, message.unpacked_sint32(1)); | |
| EXPECT_EQ(706, message.unpacked_sint64(1)); | |
| EXPECT_EQ(707, message.unpacked_fixed32(1)); | |
| EXPECT_EQ(708, message.unpacked_fixed64(1)); | |
| EXPECT_EQ(709, message.unpacked_sfixed32(1)); | |
| EXPECT_EQ(710, message.unpacked_sfixed64(1)); | |
| EXPECT_EQ(711, message.unpacked_float(1)); | |
| EXPECT_EQ(712, message.unpacked_double(1)); | |
| EXPECT_FALSE(message.unpacked_bool(1)); | |
| EXPECT_EQ(ForeignEnum<TestUnpackedTypes>::FOREIGN_BAZ, | |
| message.unpacked_enum(1)); | |
| } | |
| template <typename TestOneof2> | |
| void ExpectAtMostOneFieldSetInOneof(const TestOneof2& message) { | |
| int count = 0; | |
| if (message.has_foo_int()) count++; | |
| if (message.has_foo_string()) count++; | |
| if (message.has_foo_bytes()) count++; | |
| if (message.has_foo_enum()) count++; | |
| if (message.has_foo_message()) count++; | |
| if (message.has_foogroup()) count++; | |
| if (message.has_foo_lazy_message()) count++; | |
| if (message.has_foo_bytes_cord()) count++; | |
| EXPECT_LE(count, 1); | |
| count = 0; | |
| if (message.has_bar_int()) count++; | |
| if (message.has_bar_string()) count++; | |
| if (message.has_bar_bytes()) count++; | |
| if (message.has_bar_enum()) count++; | |
| EXPECT_TRUE(count == 0 || count == 1); | |
| } | |
| template <typename TestOneof2> | |
| void SetOneof1(TestOneof2* message) { | |
| message->mutable_foo_lazy_message()->set_moo_int(100); | |
| message->set_bar_string("101"); | |
| message->set_baz_int(102); | |
| message->set_baz_string("103"); | |
| } | |
| template <typename TestOneof2> | |
| void SetOneof2(TestOneof2* message) { | |
| message->set_foo_int(200); | |
| message->set_bar_enum(TestOneof2::BAZ); | |
| message->set_baz_int(202); | |
| message->set_baz_string("203"); | |
| } | |
| template <typename TestOneof2> | |
| void ExpectOneofSet1(const TestOneof2& message) { | |
| ExpectAtMostOneFieldSetInOneof(message); | |
| EXPECT_TRUE(message.has_foo_lazy_message()); | |
| EXPECT_TRUE(message.foo_lazy_message().has_moo_int()); | |
| EXPECT_TRUE(message.has_bar_string()); | |
| EXPECT_TRUE(message.has_baz_int()); | |
| EXPECT_TRUE(message.has_baz_string()); | |
| ASSERT_EQ(0, message.foo_lazy_message().corge_int_size()); | |
| EXPECT_EQ(100, message.foo_lazy_message().moo_int()); | |
| EXPECT_EQ("101", message.bar_string()); | |
| EXPECT_EQ(102, message.baz_int()); | |
| EXPECT_EQ("103", message.baz_string()); | |
| } | |
| template <typename TestOneof2> | |
| void ExpectOneofSet2(const TestOneof2& message) { | |
| ExpectAtMostOneFieldSetInOneof(message); | |
| EXPECT_TRUE(message.has_foo_int()); | |
| EXPECT_TRUE(message.has_bar_enum()); | |
| EXPECT_TRUE(message.has_baz_int()); | |
| EXPECT_TRUE(message.has_baz_string()); | |
| EXPECT_EQ(200, message.foo_int()); | |
| EXPECT_EQ(TestOneof2::BAZ, message.bar_enum()); | |
| EXPECT_EQ(202, message.baz_int()); | |
| EXPECT_EQ("203", message.baz_string()); | |
| } | |
| template <typename TestOneof2> | |
| void ExpectOneofClear(const TestOneof2& message) { | |
| EXPECT_FALSE(message.has_foo_int()); | |
| EXPECT_FALSE(message.has_foo_string()); | |
| EXPECT_FALSE(message.has_foo_bytes()); | |
| EXPECT_FALSE(message.has_foo_enum()); | |
| EXPECT_FALSE(message.has_foo_message()); | |
| EXPECT_FALSE(message.has_foogroup()); | |
| EXPECT_FALSE(message.has_foo_lazy_message()); | |
| EXPECT_FALSE(message.has_foo_bytes_cord()); | |
| EXPECT_FALSE(message.has_bar_int()); | |
| EXPECT_FALSE(message.has_bar_string()); | |
| EXPECT_FALSE(message.has_bar_bytes()); | |
| EXPECT_FALSE(message.has_bar_enum()); | |
| EXPECT_FALSE(message.has_baz_int()); | |
| EXPECT_FALSE(message.has_baz_string()); | |
| EXPECT_EQ(TestOneof2::FOO_NOT_SET, message.foo_case()); | |
| EXPECT_EQ(TestOneof2::BAR_NOT_SET, message.bar_case()); | |
| } | |
| template <typename TestAllExtensions> | |
| void SetAllExtensions(TestAllExtensions* message) { | |
| using Traits = TestUtilTraits<TestAllExtensions>; | |
| message->SetExtension(Traits::optional_int32_extension, 101); | |
| message->SetExtension(Traits::optional_int64_extension, 102); | |
| message->SetExtension(Traits::optional_uint32_extension, 103); | |
| message->SetExtension(Traits::optional_uint64_extension, 104); | |
| message->SetExtension(Traits::optional_sint32_extension, 105); | |
| message->SetExtension(Traits::optional_sint64_extension, 106); | |
| message->SetExtension(Traits::optional_fixed32_extension, 107); | |
| message->SetExtension(Traits::optional_fixed64_extension, 108); | |
| message->SetExtension(Traits::optional_sfixed32_extension, 109); | |
| message->SetExtension(Traits::optional_sfixed64_extension, 110); | |
| message->SetExtension(Traits::optional_float_extension, 111); | |
| message->SetExtension(Traits::optional_double_extension, 112); | |
| message->SetExtension(Traits::optional_bool_extension, true); | |
| message->SetExtension(Traits::optional_string_extension, "115"); | |
| message->SetExtension(Traits::optional_bytes_extension, "116"); | |
| message->MutableExtension(Traits::optionalgroup_extension)->set_a(117); | |
| message->MutableExtension(Traits::optional_nested_message_extension) | |
| ->set_bb(118); | |
| message->MutableExtension(Traits::optional_foreign_message_extension) | |
| ->set_c(119); | |
| message->MutableExtension(Traits::optional_import_message_extension) | |
| ->set_d(120); | |
| message->SetExtension(Traits::optional_nested_enum_extension, | |
| Traits::TestAllTypes::BAZ); | |
| message->SetExtension(Traits::optional_foreign_enum_extension, | |
| Traits::FOREIGN_BAZ); | |
| message->SetExtension(Traits::optional_import_enum_extension, | |
| Traits::IMPORT_BAZ); | |
| message->SetExtension(Traits::optional_string_piece_extension, "124"); | |
| message->SetExtension(Traits::optional_cord_extension, "125"); | |
| message->SetExtension(Traits::optional_bytes_cord_extension, | |
| "optional bytes cord"); | |
| message->MutableExtension(Traits::optional_public_import_message_extension) | |
| ->set_e(126); | |
| message->MutableExtension(Traits::optional_lazy_message_extension) | |
| ->set_bb(127); | |
| message->MutableExtension(Traits::optional_unverified_lazy_message_extension) | |
| ->set_bb(128); | |
| // ----------------------------------------------------------------- | |
| message->AddExtension(Traits::repeated_int32_extension, 201); | |
| message->AddExtension(Traits::repeated_int64_extension, 202); | |
| message->AddExtension(Traits::repeated_uint32_extension, 203); | |
| message->AddExtension(Traits::repeated_uint64_extension, 204); | |
| message->AddExtension(Traits::repeated_sint32_extension, 205); | |
| message->AddExtension(Traits::repeated_sint64_extension, 206); | |
| message->AddExtension(Traits::repeated_fixed32_extension, 207); | |
| message->AddExtension(Traits::repeated_fixed64_extension, 208); | |
| message->AddExtension(Traits::repeated_sfixed32_extension, 209); | |
| message->AddExtension(Traits::repeated_sfixed64_extension, 210); | |
| message->AddExtension(Traits::repeated_float_extension, 211); | |
| message->AddExtension(Traits::repeated_double_extension, 212); | |
| message->AddExtension(Traits::repeated_bool_extension, true); | |
| message->AddExtension(Traits::repeated_string_extension, "215"); | |
| message->AddExtension(Traits::repeated_bytes_extension, "216"); | |
| message->AddExtension(Traits::repeatedgroup_extension)->set_a(217); | |
| message->AddExtension(Traits::repeated_nested_message_extension)->set_bb(218); | |
| message->AddExtension(Traits::repeated_foreign_message_extension)->set_c(219); | |
| message->AddExtension(Traits::repeated_import_message_extension)->set_d(220); | |
| message->AddExtension(Traits::repeated_lazy_message_extension)->set_bb(227); | |
| message->AddExtension(Traits::repeated_nested_enum_extension, | |
| Traits::TestAllTypes::BAR); | |
| message->AddExtension(Traits::repeated_foreign_enum_extension, | |
| Traits::FOREIGN_BAR); | |
| message->AddExtension(Traits::repeated_import_enum_extension, | |
| Traits::IMPORT_BAR); | |
| message->AddExtension(Traits::repeated_string_piece_extension, "224"); | |
| message->AddExtension(Traits::repeated_cord_extension, "225"); | |
| // Add a second one of each field. | |
| message->AddExtension(Traits::repeated_int32_extension, 301); | |
| message->AddExtension(Traits::repeated_int64_extension, 302); | |
| message->AddExtension(Traits::repeated_uint32_extension, 303); | |
| message->AddExtension(Traits::repeated_uint64_extension, 304); | |
| message->AddExtension(Traits::repeated_sint32_extension, 305); | |
| message->AddExtension(Traits::repeated_sint64_extension, 306); | |
| message->AddExtension(Traits::repeated_fixed32_extension, 307); | |
| message->AddExtension(Traits::repeated_fixed64_extension, 308); | |
| message->AddExtension(Traits::repeated_sfixed32_extension, 309); | |
| message->AddExtension(Traits::repeated_sfixed64_extension, 310); | |
| message->AddExtension(Traits::repeated_float_extension, 311); | |
| message->AddExtension(Traits::repeated_double_extension, 312); | |
| message->AddExtension(Traits::repeated_bool_extension, false); | |
| message->AddExtension(Traits::repeated_string_extension, "315"); | |
| message->AddExtension(Traits::repeated_bytes_extension, "316"); | |
| message->AddExtension(Traits::repeatedgroup_extension)->set_a(317); | |
| message->AddExtension(Traits::repeated_nested_message_extension)->set_bb(318); | |
| message->AddExtension(Traits::repeated_foreign_message_extension)->set_c(319); | |
| message->AddExtension(Traits::repeated_import_message_extension)->set_d(320); | |
| message->AddExtension(Traits::repeated_lazy_message_extension)->set_bb(327); | |
| message->AddExtension(Traits::repeated_nested_enum_extension, | |
| Traits::TestAllTypes::BAZ); | |
| message->AddExtension(Traits::repeated_foreign_enum_extension, | |
| Traits::FOREIGN_BAZ); | |
| message->AddExtension(Traits::repeated_import_enum_extension, | |
| Traits::IMPORT_BAZ); | |
| message->AddExtension(Traits::repeated_string_piece_extension, "324"); | |
| message->AddExtension(Traits::repeated_cord_extension, "325"); | |
| // ----------------------------------------------------------------- | |
| message->SetExtension(Traits::default_int32_extension, 401); | |
| message->SetExtension(Traits::default_int64_extension, 402); | |
| message->SetExtension(Traits::default_uint32_extension, 403); | |
| message->SetExtension(Traits::default_uint64_extension, 404); | |
| message->SetExtension(Traits::default_sint32_extension, 405); | |
| message->SetExtension(Traits::default_sint64_extension, 406); | |
| message->SetExtension(Traits::default_fixed32_extension, 407); | |
| message->SetExtension(Traits::default_fixed64_extension, 408); | |
| message->SetExtension(Traits::default_sfixed32_extension, 409); | |
| message->SetExtension(Traits::default_sfixed64_extension, 410); | |
| message->SetExtension(Traits::default_float_extension, 411); | |
| message->SetExtension(Traits::default_double_extension, 412); | |
| message->SetExtension(Traits::default_bool_extension, false); | |
| message->SetExtension(Traits::default_string_extension, "415"); | |
| message->SetExtension(Traits::default_bytes_extension, "416"); | |
| message->SetExtension(Traits::default_nested_enum_extension, | |
| Traits::TestAllTypes::FOO); | |
| message->SetExtension(Traits::default_foreign_enum_extension, | |
| Traits::FOREIGN_FOO); | |
| message->SetExtension(Traits::default_import_enum_extension, | |
| Traits::IMPORT_FOO); | |
| message->SetExtension(Traits::default_string_piece_extension, "424"); | |
| message->SetExtension(Traits::default_cord_extension, "425"); | |
| SetOneofFieldsExtensions(message); | |
| } | |
| template <typename TestAllExtensions> | |
| void SetOneofFieldsExtensions(TestAllExtensions* message) { | |
| using Traits = TestUtilTraits<TestAllExtensions>; | |
| message->SetExtension(Traits::oneof_uint32_extension, 601); | |
| message->MutableExtension(Traits::oneof_nested_message_extension) | |
| ->set_bb(602); | |
| message->SetExtension(Traits::oneof_string_extension, "603"); | |
| message->SetExtension(Traits::oneof_bytes_extension, "604"); | |
| } | |
| template <typename TestAllExtensions> | |
| void ModifyRepeatedExtensions(TestAllExtensions* message) { | |
| using Traits = TestUtilTraits<TestAllExtensions>; | |
| message->SetExtension(Traits::repeated_int32_extension, 1, 501); | |
| message->SetExtension(Traits::repeated_int64_extension, 1, 502); | |
| message->SetExtension(Traits::repeated_uint32_extension, 1, 503); | |
| message->SetExtension(Traits::repeated_uint64_extension, 1, 504); | |
| message->SetExtension(Traits::repeated_sint32_extension, 1, 505); | |
| message->SetExtension(Traits::repeated_sint64_extension, 1, 506); | |
| message->SetExtension(Traits::repeated_fixed32_extension, 1, 507); | |
| message->SetExtension(Traits::repeated_fixed64_extension, 1, 508); | |
| message->SetExtension(Traits::repeated_sfixed32_extension, 1, 509); | |
| message->SetExtension(Traits::repeated_sfixed64_extension, 1, 510); | |
| message->SetExtension(Traits::repeated_float_extension, 1, 511); | |
| message->SetExtension(Traits::repeated_double_extension, 1, 512); | |
| message->SetExtension(Traits::repeated_bool_extension, 1, true); | |
| message->SetExtension(Traits::repeated_string_extension, 1, "515"); | |
| message->SetExtension(Traits::repeated_bytes_extension, 1, "516"); | |
| message->MutableExtension(Traits::repeatedgroup_extension, 1)->set_a(517); | |
| message->MutableExtension(Traits::repeated_nested_message_extension, 1) | |
| ->set_bb(518); | |
| message->MutableExtension(Traits::repeated_foreign_message_extension, 1) | |
| ->set_c(519); | |
| message->MutableExtension(Traits::repeated_import_message_extension, 1) | |
| ->set_d(520); | |
| message->MutableExtension(Traits::repeated_lazy_message_extension, 1) | |
| ->set_bb(527); | |
| message->SetExtension(Traits::repeated_nested_enum_extension, 1, | |
| Traits::TestAllTypes::FOO); | |
| message->SetExtension(Traits::repeated_foreign_enum_extension, 1, | |
| Traits::FOREIGN_FOO); | |
| message->SetExtension(Traits::repeated_import_enum_extension, 1, | |
| Traits::IMPORT_FOO); | |
| message->SetExtension(Traits::repeated_string_piece_extension, 1, "524"); | |
| message->SetExtension(Traits::repeated_cord_extension, 1, "525"); | |
| } | |
| template <typename TestAllExtensions> | |
| void ExpectAllExtensionsSet(const TestAllExtensions& message) { | |
| using Traits = TestUtilTraits<TestAllExtensions>; | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_int32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_int64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_uint32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_uint64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_sint32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_sint64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_fixed32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_fixed64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_sfixed32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_sfixed64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_float_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_double_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_bool_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_string_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_bytes_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optionalgroup_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_nested_message_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_foreign_message_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_import_message_extension)); | |
| EXPECT_TRUE( | |
| message.HasExtension(Traits::optional_public_import_message_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_lazy_message_extension)); | |
| EXPECT_TRUE( | |
| message.HasExtension(Traits::optional_unverified_lazy_message_extension)); | |
| EXPECT_TRUE(message.GetExtension(Traits::optionalgroup_extension).has_a()); | |
| EXPECT_TRUE( | |
| message.GetExtension(Traits::optional_nested_message_extension).has_bb()); | |
| EXPECT_TRUE( | |
| message.GetExtension(Traits::optional_foreign_message_extension).has_c()); | |
| EXPECT_TRUE( | |
| message.GetExtension(Traits::optional_import_message_extension).has_d()); | |
| EXPECT_TRUE( | |
| message.GetExtension(Traits::optional_public_import_message_extension) | |
| .has_e()); | |
| EXPECT_TRUE( | |
| message.GetExtension(Traits::optional_lazy_message_extension).has_bb()); | |
| EXPECT_TRUE( | |
| message.GetExtension(Traits::optional_unverified_lazy_message_extension) | |
| .has_bb()); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_nested_enum_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_foreign_enum_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_import_enum_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_string_piece_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_cord_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::optional_bytes_cord_extension)); | |
| EXPECT_EQ(101, message.GetExtension(Traits::optional_int32_extension)); | |
| EXPECT_EQ(102, message.GetExtension(Traits::optional_int64_extension)); | |
| EXPECT_EQ(103, message.GetExtension(Traits::optional_uint32_extension)); | |
| EXPECT_EQ(104, message.GetExtension(Traits::optional_uint64_extension)); | |
| EXPECT_EQ(105, message.GetExtension(Traits::optional_sint32_extension)); | |
| EXPECT_EQ(106, message.GetExtension(Traits::optional_sint64_extension)); | |
| EXPECT_EQ(107, message.GetExtension(Traits::optional_fixed32_extension)); | |
| EXPECT_EQ(108, message.GetExtension(Traits::optional_fixed64_extension)); | |
| EXPECT_EQ(109, message.GetExtension(Traits::optional_sfixed32_extension)); | |
| EXPECT_EQ(110, message.GetExtension(Traits::optional_sfixed64_extension)); | |
| EXPECT_EQ(111, message.GetExtension(Traits::optional_float_extension)); | |
| EXPECT_EQ(112, message.GetExtension(Traits::optional_double_extension)); | |
| EXPECT_TRUE(message.GetExtension(Traits::optional_bool_extension)); | |
| EXPECT_EQ("115", message.GetExtension(Traits::optional_string_extension)); | |
| EXPECT_EQ("116", message.GetExtension(Traits::optional_bytes_extension)); | |
| EXPECT_EQ(117, message.GetExtension(Traits::optionalgroup_extension).a()); | |
| EXPECT_EQ( | |
| 118, | |
| message.GetExtension(Traits::optional_nested_message_extension).bb()); | |
| EXPECT_EQ( | |
| 119, | |
| message.GetExtension(Traits::optional_foreign_message_extension).c()); | |
| EXPECT_EQ( | |
| 120, message.GetExtension(Traits::optional_import_message_extension).d()); | |
| EXPECT_EQ(Traits::TestAllTypes::BAZ, | |
| message.GetExtension(Traits::optional_nested_enum_extension)); | |
| EXPECT_EQ(Traits::FOREIGN_BAZ, | |
| message.GetExtension(Traits::optional_foreign_enum_extension)); | |
| EXPECT_EQ(Traits::IMPORT_BAZ, | |
| message.GetExtension(Traits::optional_import_enum_extension)); | |
| EXPECT_EQ("124", | |
| message.GetExtension(Traits::optional_string_piece_extension)); | |
| EXPECT_EQ("125", message.GetExtension(Traits::optional_cord_extension)); | |
| EXPECT_EQ("optional bytes cord", | |
| message.GetExtension(Traits::optional_bytes_cord_extension)); | |
| EXPECT_EQ( | |
| 126, | |
| message.GetExtension(Traits::optional_public_import_message_extension) | |
| .e()); | |
| EXPECT_EQ(127, | |
| message.GetExtension(Traits::optional_lazy_message_extension).bb()); | |
| EXPECT_EQ( | |
| 128, | |
| message.GetExtension(Traits::optional_unverified_lazy_message_extension) | |
| .bb()); | |
| // ----------------------------------------------------------------- | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_int32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_int64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_uint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_uint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_fixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_fixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sfixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sfixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_float_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_double_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_bool_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_string_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_bytes_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeatedgroup_extension)); | |
| ASSERT_EQ(2, | |
| message.ExtensionSize(Traits::repeated_nested_message_extension)); | |
| ASSERT_EQ(2, | |
| message.ExtensionSize(Traits::repeated_foreign_message_extension)); | |
| ASSERT_EQ(2, | |
| message.ExtensionSize(Traits::repeated_import_message_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_lazy_message_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_nested_enum_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_foreign_enum_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_import_enum_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_string_piece_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_cord_extension)); | |
| EXPECT_EQ(201, message.GetExtension(Traits::repeated_int32_extension, 0)); | |
| EXPECT_EQ(202, message.GetExtension(Traits::repeated_int64_extension, 0)); | |
| EXPECT_EQ(203, message.GetExtension(Traits::repeated_uint32_extension, 0)); | |
| EXPECT_EQ(204, message.GetExtension(Traits::repeated_uint64_extension, 0)); | |
| EXPECT_EQ(205, message.GetExtension(Traits::repeated_sint32_extension, 0)); | |
| EXPECT_EQ(206, message.GetExtension(Traits::repeated_sint64_extension, 0)); | |
| EXPECT_EQ(207, message.GetExtension(Traits::repeated_fixed32_extension, 0)); | |
| EXPECT_EQ(208, message.GetExtension(Traits::repeated_fixed64_extension, 0)); | |
| EXPECT_EQ(209, message.GetExtension(Traits::repeated_sfixed32_extension, 0)); | |
| EXPECT_EQ(210, message.GetExtension(Traits::repeated_sfixed64_extension, 0)); | |
| EXPECT_EQ(211, message.GetExtension(Traits::repeated_float_extension, 0)); | |
| EXPECT_EQ(212, message.GetExtension(Traits::repeated_double_extension, 0)); | |
| EXPECT_TRUE(message.GetExtension(Traits::repeated_bool_extension, 0)); | |
| EXPECT_EQ("215", message.GetExtension(Traits::repeated_string_extension, 0)); | |
| EXPECT_EQ("216", message.GetExtension(Traits::repeated_bytes_extension, 0)); | |
| EXPECT_EQ(217, message.GetExtension(Traits::repeatedgroup_extension, 0).a()); | |
| EXPECT_EQ( | |
| 218, | |
| message.GetExtension(Traits::repeated_nested_message_extension, 0).bb()); | |
| EXPECT_EQ( | |
| 219, | |
| message.GetExtension(Traits::repeated_foreign_message_extension, 0).c()); | |
| EXPECT_EQ( | |
| 220, | |
| message.GetExtension(Traits::repeated_import_message_extension, 0).d()); | |
| EXPECT_EQ( | |
| 227, | |
| message.GetExtension(Traits::repeated_lazy_message_extension, 0).bb()); | |
| EXPECT_EQ(Traits::TestAllTypes::BAR, | |
| message.GetExtension(Traits::repeated_nested_enum_extension, 0)); | |
| EXPECT_EQ(Traits::FOREIGN_BAR, | |
| message.GetExtension(Traits::repeated_foreign_enum_extension, 0)); | |
| EXPECT_EQ(Traits::IMPORT_BAR, | |
| message.GetExtension(Traits::repeated_import_enum_extension, 0)); | |
| EXPECT_EQ("224", | |
| message.GetExtension(Traits::repeated_string_piece_extension, 0)); | |
| EXPECT_EQ("225", message.GetExtension(Traits::repeated_cord_extension, 0)); | |
| EXPECT_EQ(301, message.GetExtension(Traits::repeated_int32_extension, 1)); | |
| EXPECT_EQ(302, message.GetExtension(Traits::repeated_int64_extension, 1)); | |
| EXPECT_EQ(303, message.GetExtension(Traits::repeated_uint32_extension, 1)); | |
| EXPECT_EQ(304, message.GetExtension(Traits::repeated_uint64_extension, 1)); | |
| EXPECT_EQ(305, message.GetExtension(Traits::repeated_sint32_extension, 1)); | |
| EXPECT_EQ(306, message.GetExtension(Traits::repeated_sint64_extension, 1)); | |
| EXPECT_EQ(307, message.GetExtension(Traits::repeated_fixed32_extension, 1)); | |
| EXPECT_EQ(308, message.GetExtension(Traits::repeated_fixed64_extension, 1)); | |
| EXPECT_EQ(309, message.GetExtension(Traits::repeated_sfixed32_extension, 1)); | |
| EXPECT_EQ(310, message.GetExtension(Traits::repeated_sfixed64_extension, 1)); | |
| EXPECT_EQ(311, message.GetExtension(Traits::repeated_float_extension, 1)); | |
| EXPECT_EQ(312, message.GetExtension(Traits::repeated_double_extension, 1)); | |
| EXPECT_FALSE(message.GetExtension(Traits::repeated_bool_extension, 1)); | |
| EXPECT_EQ("315", message.GetExtension(Traits::repeated_string_extension, 1)); | |
| EXPECT_EQ("316", message.GetExtension(Traits::repeated_bytes_extension, 1)); | |
| EXPECT_EQ(317, message.GetExtension(Traits::repeatedgroup_extension, 1).a()); | |
| EXPECT_EQ( | |
| 318, | |
| message.GetExtension(Traits::repeated_nested_message_extension, 1).bb()); | |
| EXPECT_EQ( | |
| 319, | |
| message.GetExtension(Traits::repeated_foreign_message_extension, 1).c()); | |
| EXPECT_EQ( | |
| 320, | |
| message.GetExtension(Traits::repeated_import_message_extension, 1).d()); | |
| EXPECT_EQ( | |
| 327, | |
| message.GetExtension(Traits::repeated_lazy_message_extension, 1).bb()); | |
| EXPECT_EQ(Traits::TestAllTypes::BAZ, | |
| message.GetExtension(Traits::repeated_nested_enum_extension, 1)); | |
| EXPECT_EQ(Traits::FOREIGN_BAZ, | |
| message.GetExtension(Traits::repeated_foreign_enum_extension, 1)); | |
| EXPECT_EQ(Traits::IMPORT_BAZ, | |
| message.GetExtension(Traits::repeated_import_enum_extension, 1)); | |
| EXPECT_EQ("324", | |
| message.GetExtension(Traits::repeated_string_piece_extension, 1)); | |
| EXPECT_EQ("325", message.GetExtension(Traits::repeated_cord_extension, 1)); | |
| // ----------------------------------------------------------------- | |
| EXPECT_TRUE(message.HasExtension(Traits::default_int32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_int64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_uint32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_uint64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_sint32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_sint64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_fixed32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_fixed64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_sfixed32_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_sfixed64_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_float_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_double_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_bool_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_string_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_bytes_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_nested_enum_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_foreign_enum_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_import_enum_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_string_piece_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::default_cord_extension)); | |
| EXPECT_EQ(401, message.GetExtension(Traits::default_int32_extension)); | |
| EXPECT_EQ(402, message.GetExtension(Traits::default_int64_extension)); | |
| EXPECT_EQ(403, message.GetExtension(Traits::default_uint32_extension)); | |
| EXPECT_EQ(404, message.GetExtension(Traits::default_uint64_extension)); | |
| EXPECT_EQ(405, message.GetExtension(Traits::default_sint32_extension)); | |
| EXPECT_EQ(406, message.GetExtension(Traits::default_sint64_extension)); | |
| EXPECT_EQ(407, message.GetExtension(Traits::default_fixed32_extension)); | |
| EXPECT_EQ(408, message.GetExtension(Traits::default_fixed64_extension)); | |
| EXPECT_EQ(409, message.GetExtension(Traits::default_sfixed32_extension)); | |
| EXPECT_EQ(410, message.GetExtension(Traits::default_sfixed64_extension)); | |
| EXPECT_EQ(411, message.GetExtension(Traits::default_float_extension)); | |
| EXPECT_EQ(412, message.GetExtension(Traits::default_double_extension)); | |
| EXPECT_FALSE(message.GetExtension(Traits::default_bool_extension)); | |
| EXPECT_EQ("415", message.GetExtension(Traits::default_string_extension)); | |
| EXPECT_EQ("416", message.GetExtension(Traits::default_bytes_extension)); | |
| EXPECT_EQ(Traits::TestAllTypes::FOO, | |
| message.GetExtension(Traits::default_nested_enum_extension)); | |
| EXPECT_EQ(Traits::FOREIGN_FOO, | |
| message.GetExtension(Traits::default_foreign_enum_extension)); | |
| EXPECT_EQ(Traits::IMPORT_FOO, | |
| message.GetExtension(Traits::default_import_enum_extension)); | |
| EXPECT_EQ("424", | |
| message.GetExtension(Traits::default_string_piece_extension)); | |
| EXPECT_EQ("425", message.GetExtension(Traits::default_cord_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::oneof_uint32_extension)); | |
| EXPECT_TRUE( | |
| message.GetExtension(Traits::oneof_nested_message_extension).has_bb()); | |
| EXPECT_TRUE(message.HasExtension(Traits::oneof_string_extension)); | |
| EXPECT_TRUE(message.HasExtension(Traits::oneof_bytes_extension)); | |
| EXPECT_EQ(601, message.GetExtension(Traits::oneof_uint32_extension)); | |
| EXPECT_EQ(602, | |
| message.GetExtension(Traits::oneof_nested_message_extension).bb()); | |
| EXPECT_EQ("603", message.GetExtension(Traits::oneof_string_extension)); | |
| EXPECT_EQ("604", message.GetExtension(Traits::oneof_bytes_extension)); | |
| } | |
| template <typename TestAllExtensions> | |
| void ExpectExtensionsClear(const TestAllExtensions& message) { | |
| using Traits = TestUtilTraits<TestAllExtensions>; | |
| std::string serialized; | |
| ASSERT_TRUE(message.SerializeToString(&serialized)); | |
| EXPECT_EQ("", serialized); | |
| EXPECT_EQ(0, message.ByteSizeLong()); | |
| // has_blah() should initially be false for all optional fields. | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_int32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_int64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_uint32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_uint64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_sint32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_sint64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_fixed32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_fixed64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_sfixed32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_sfixed64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_float_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_double_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_bool_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_string_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_bytes_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optionalgroup_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_nested_message_extension)); | |
| EXPECT_FALSE( | |
| message.HasExtension(Traits::optional_foreign_message_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_import_message_extension)); | |
| EXPECT_FALSE( | |
| message.HasExtension(Traits::optional_public_import_message_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_lazy_message_extension)); | |
| EXPECT_FALSE( | |
| message.HasExtension(Traits::optional_unverified_lazy_message_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_nested_enum_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_foreign_enum_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_import_enum_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_string_piece_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_cord_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::optional_bytes_cord_extension)); | |
| // Optional fields without defaults are set to zero or something like it. | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_int32_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_int64_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_uint32_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_uint64_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_sint32_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_sint64_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_fixed32_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_fixed64_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_sfixed32_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_sfixed64_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_float_extension)); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optional_double_extension)); | |
| EXPECT_FALSE(message.GetExtension(Traits::optional_bool_extension)); | |
| EXPECT_EQ("", message.GetExtension(Traits::optional_string_extension)); | |
| EXPECT_EQ("", message.GetExtension(Traits::optional_bytes_extension)); | |
| // Embedded messages should also be clear. | |
| EXPECT_FALSE(message.GetExtension(Traits::optionalgroup_extension).has_a()); | |
| EXPECT_FALSE( | |
| message.GetExtension(Traits::optional_nested_message_extension).has_bb()); | |
| EXPECT_FALSE( | |
| message.GetExtension(Traits::optional_foreign_message_extension).has_c()); | |
| EXPECT_FALSE( | |
| message.GetExtension(Traits::optional_import_message_extension).has_d()); | |
| EXPECT_FALSE( | |
| message.GetExtension(Traits::optional_public_import_message_extension) | |
| .has_e()); | |
| EXPECT_FALSE( | |
| message.GetExtension(Traits::optional_lazy_message_extension).has_bb()); | |
| EXPECT_FALSE( | |
| message.GetExtension(Traits::optional_unverified_lazy_message_extension) | |
| .has_bb()); | |
| EXPECT_EQ(0, message.GetExtension(Traits::optionalgroup_extension).a()); | |
| EXPECT_EQ( | |
| 0, message.GetExtension(Traits::optional_nested_message_extension).bb()); | |
| EXPECT_EQ( | |
| 0, message.GetExtension(Traits::optional_foreign_message_extension).c()); | |
| EXPECT_EQ( | |
| 0, message.GetExtension(Traits::optional_import_message_extension).d()); | |
| EXPECT_EQ( | |
| 0, message.GetExtension(Traits::optional_public_import_message_extension) | |
| .e()); | |
| EXPECT_EQ(0, | |
| message.GetExtension(Traits::optional_lazy_message_extension).bb()); | |
| EXPECT_EQ( | |
| 0, | |
| message.GetExtension(Traits::optional_unverified_lazy_message_extension) | |
| .bb()); | |
| // Enums without defaults are set to the first value in the enum. | |
| EXPECT_EQ(Traits::TestAllTypes::FOO, | |
| message.GetExtension(Traits::optional_nested_enum_extension)); | |
| EXPECT_EQ(Traits::FOREIGN_FOO, | |
| message.GetExtension(Traits::optional_foreign_enum_extension)); | |
| EXPECT_EQ(Traits::IMPORT_FOO, | |
| message.GetExtension(Traits::optional_import_enum_extension)); | |
| EXPECT_EQ("", message.GetExtension(Traits::optional_string_piece_extension)); | |
| EXPECT_EQ("", message.GetExtension(Traits::optional_cord_extension)); | |
| EXPECT_EQ("", message.GetExtension(Traits::optional_bytes_cord_extension)); | |
| // Repeated fields are empty. | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_int32_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_int64_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_uint32_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_uint64_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_sint32_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_sint64_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_fixed32_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_fixed64_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_sfixed32_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_sfixed64_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_float_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_double_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_bool_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_string_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_bytes_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeatedgroup_extension)); | |
| EXPECT_EQ(0, | |
| message.ExtensionSize(Traits::repeated_nested_message_extension)); | |
| EXPECT_EQ(0, | |
| message.ExtensionSize(Traits::repeated_foreign_message_extension)); | |
| EXPECT_EQ(0, | |
| message.ExtensionSize(Traits::repeated_import_message_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_lazy_message_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_nested_enum_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_foreign_enum_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_import_enum_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_string_piece_extension)); | |
| EXPECT_EQ(0, message.ExtensionSize(Traits::repeated_cord_extension)); | |
| // has_blah() should also be false for all default fields. | |
| EXPECT_FALSE(message.HasExtension(Traits::default_int32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_int64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_uint32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_uint64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_sint32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_sint64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_fixed32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_fixed64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_sfixed32_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_sfixed64_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_float_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_double_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_bool_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_string_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_bytes_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_nested_enum_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_foreign_enum_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_import_enum_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_string_piece_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::default_cord_extension)); | |
| // Fields with defaults have their default values (duh). | |
| EXPECT_EQ(41, message.GetExtension(Traits::default_int32_extension)); | |
| EXPECT_EQ(42, message.GetExtension(Traits::default_int64_extension)); | |
| EXPECT_EQ(43, message.GetExtension(Traits::default_uint32_extension)); | |
| EXPECT_EQ(44, message.GetExtension(Traits::default_uint64_extension)); | |
| EXPECT_EQ(-45, message.GetExtension(Traits::default_sint32_extension)); | |
| EXPECT_EQ(46, message.GetExtension(Traits::default_sint64_extension)); | |
| EXPECT_EQ(47, message.GetExtension(Traits::default_fixed32_extension)); | |
| EXPECT_EQ(48, message.GetExtension(Traits::default_fixed64_extension)); | |
| EXPECT_EQ(49, message.GetExtension(Traits::default_sfixed32_extension)); | |
| EXPECT_EQ(-50, message.GetExtension(Traits::default_sfixed64_extension)); | |
| EXPECT_EQ(51.5, message.GetExtension(Traits::default_float_extension)); | |
| EXPECT_EQ(52e3, message.GetExtension(Traits::default_double_extension)); | |
| EXPECT_TRUE(message.GetExtension(Traits::default_bool_extension)); | |
| EXPECT_EQ("hello", message.GetExtension(Traits::default_string_extension)); | |
| EXPECT_EQ("world", message.GetExtension(Traits::default_bytes_extension)); | |
| EXPECT_EQ(Traits::TestAllTypes::BAR, | |
| message.GetExtension(Traits::default_nested_enum_extension)); | |
| EXPECT_EQ(Traits::FOREIGN_BAR, | |
| message.GetExtension(Traits::default_foreign_enum_extension)); | |
| EXPECT_EQ(Traits::IMPORT_BAR, | |
| message.GetExtension(Traits::default_import_enum_extension)); | |
| EXPECT_EQ("abc", | |
| message.GetExtension(Traits::default_string_piece_extension)); | |
| EXPECT_EQ("123", message.GetExtension(Traits::default_cord_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::oneof_uint32_extension)); | |
| EXPECT_FALSE( | |
| message.GetExtension(Traits::oneof_nested_message_extension).has_bb()); | |
| EXPECT_FALSE(message.HasExtension(Traits::oneof_string_extension)); | |
| EXPECT_FALSE(message.HasExtension(Traits::oneof_bytes_extension)); | |
| } | |
| template <typename TestAllExtensions> | |
| void ExpectRepeatedExtensionsModified(const TestAllExtensions& message) { | |
| using Traits = TestUtilTraits<TestAllExtensions>; | |
| // ModifyRepeatedFields only sets the second repeated element of each | |
| // field. In addition to verifying this, we also verify that the first | |
| // element and size were *not* modified. | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_int32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_int64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_uint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_uint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_fixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_fixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sfixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sfixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_float_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_double_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_bool_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_string_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_bytes_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeatedgroup_extension)); | |
| ASSERT_EQ(2, | |
| message.ExtensionSize(Traits::repeated_nested_message_extension)); | |
| ASSERT_EQ(2, | |
| message.ExtensionSize(Traits::repeated_foreign_message_extension)); | |
| ASSERT_EQ(2, | |
| message.ExtensionSize(Traits::repeated_import_message_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_lazy_message_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_nested_enum_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_foreign_enum_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_import_enum_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_string_piece_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_cord_extension)); | |
| EXPECT_EQ(201, message.GetExtension(Traits::repeated_int32_extension, 0)); | |
| EXPECT_EQ(202, message.GetExtension(Traits::repeated_int64_extension, 0)); | |
| EXPECT_EQ(203, message.GetExtension(Traits::repeated_uint32_extension, 0)); | |
| EXPECT_EQ(204, message.GetExtension(Traits::repeated_uint64_extension, 0)); | |
| EXPECT_EQ(205, message.GetExtension(Traits::repeated_sint32_extension, 0)); | |
| EXPECT_EQ(206, message.GetExtension(Traits::repeated_sint64_extension, 0)); | |
| EXPECT_EQ(207, message.GetExtension(Traits::repeated_fixed32_extension, 0)); | |
| EXPECT_EQ(208, message.GetExtension(Traits::repeated_fixed64_extension, 0)); | |
| EXPECT_EQ(209, message.GetExtension(Traits::repeated_sfixed32_extension, 0)); | |
| EXPECT_EQ(210, message.GetExtension(Traits::repeated_sfixed64_extension, 0)); | |
| EXPECT_EQ(211, message.GetExtension(Traits::repeated_float_extension, 0)); | |
| EXPECT_EQ(212, message.GetExtension(Traits::repeated_double_extension, 0)); | |
| EXPECT_TRUE(message.GetExtension(Traits::repeated_bool_extension, 0)); | |
| EXPECT_EQ("215", message.GetExtension(Traits::repeated_string_extension, 0)); | |
| EXPECT_EQ("216", message.GetExtension(Traits::repeated_bytes_extension, 0)); | |
| EXPECT_EQ(217, message.GetExtension(Traits::repeatedgroup_extension, 0).a()); | |
| EXPECT_EQ( | |
| 218, | |
| message.GetExtension(Traits::repeated_nested_message_extension, 0).bb()); | |
| EXPECT_EQ( | |
| 219, | |
| message.GetExtension(Traits::repeated_foreign_message_extension, 0).c()); | |
| EXPECT_EQ( | |
| 220, | |
| message.GetExtension(Traits::repeated_import_message_extension, 0).d()); | |
| EXPECT_EQ( | |
| 227, | |
| message.GetExtension(Traits::repeated_lazy_message_extension, 0).bb()); | |
| EXPECT_EQ(Traits::TestAllTypes::BAR, | |
| message.GetExtension(Traits::repeated_nested_enum_extension, 0)); | |
| EXPECT_EQ(Traits::FOREIGN_BAR, | |
| message.GetExtension(Traits::repeated_foreign_enum_extension, 0)); | |
| EXPECT_EQ(Traits::IMPORT_BAR, | |
| message.GetExtension(Traits::repeated_import_enum_extension, 0)); | |
| EXPECT_EQ("224", | |
| message.GetExtension(Traits::repeated_string_piece_extension, 0)); | |
| EXPECT_EQ("225", message.GetExtension(Traits::repeated_cord_extension, 0)); | |
| // Actually verify the second (modified) elements now. | |
| EXPECT_EQ(501, message.GetExtension(Traits::repeated_int32_extension, 1)); | |
| EXPECT_EQ(502, message.GetExtension(Traits::repeated_int64_extension, 1)); | |
| EXPECT_EQ(503, message.GetExtension(Traits::repeated_uint32_extension, 1)); | |
| EXPECT_EQ(504, message.GetExtension(Traits::repeated_uint64_extension, 1)); | |
| EXPECT_EQ(505, message.GetExtension(Traits::repeated_sint32_extension, 1)); | |
| EXPECT_EQ(506, message.GetExtension(Traits::repeated_sint64_extension, 1)); | |
| EXPECT_EQ(507, message.GetExtension(Traits::repeated_fixed32_extension, 1)); | |
| EXPECT_EQ(508, message.GetExtension(Traits::repeated_fixed64_extension, 1)); | |
| EXPECT_EQ(509, message.GetExtension(Traits::repeated_sfixed32_extension, 1)); | |
| EXPECT_EQ(510, message.GetExtension(Traits::repeated_sfixed64_extension, 1)); | |
| EXPECT_EQ(511, message.GetExtension(Traits::repeated_float_extension, 1)); | |
| EXPECT_EQ(512, message.GetExtension(Traits::repeated_double_extension, 1)); | |
| EXPECT_TRUE(message.GetExtension(Traits::repeated_bool_extension, 1)); | |
| EXPECT_EQ("515", message.GetExtension(Traits::repeated_string_extension, 1)); | |
| EXPECT_EQ("516", message.GetExtension(Traits::repeated_bytes_extension, 1)); | |
| EXPECT_EQ(517, message.GetExtension(Traits::repeatedgroup_extension, 1).a()); | |
| EXPECT_EQ( | |
| 518, | |
| message.GetExtension(Traits::repeated_nested_message_extension, 1).bb()); | |
| EXPECT_EQ( | |
| 519, | |
| message.GetExtension(Traits::repeated_foreign_message_extension, 1).c()); | |
| EXPECT_EQ( | |
| 520, | |
| message.GetExtension(Traits::repeated_import_message_extension, 1).d()); | |
| EXPECT_EQ( | |
| 527, | |
| message.GetExtension(Traits::repeated_lazy_message_extension, 1).bb()); | |
| EXPECT_EQ(Traits::TestAllTypes::FOO, | |
| message.GetExtension(Traits::repeated_nested_enum_extension, 1)); | |
| EXPECT_EQ(Traits::FOREIGN_FOO, | |
| message.GetExtension(Traits::repeated_foreign_enum_extension, 1)); | |
| EXPECT_EQ(Traits::IMPORT_FOO, | |
| message.GetExtension(Traits::repeated_import_enum_extension, 1)); | |
| EXPECT_EQ("524", | |
| message.GetExtension(Traits::repeated_string_piece_extension, 1)); | |
| EXPECT_EQ("525", message.GetExtension(Traits::repeated_cord_extension, 1)); | |
| } | |
| template <typename TestAllExtensions> | |
| void ExpectLastRepeatedExtensionsRemoved(const TestAllExtensions& message) { | |
| using Traits = TestUtilTraits<TestAllExtensions>; | |
| // Test that one element was removed. | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_int32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_int64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_uint32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_uint64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_sint32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_sint64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_fixed32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_fixed64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_sfixed32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_sfixed64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_float_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_double_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_bool_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_string_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_bytes_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeatedgroup_extension)); | |
| ASSERT_EQ(1, | |
| message.ExtensionSize(Traits::repeated_nested_message_extension)); | |
| ASSERT_EQ(1, | |
| message.ExtensionSize(Traits::repeated_foreign_message_extension)); | |
| ASSERT_EQ(1, | |
| message.ExtensionSize(Traits::repeated_import_message_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_lazy_message_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_nested_enum_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_foreign_enum_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_import_enum_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_string_piece_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_cord_extension)); | |
| // Test that the remaining element is the correct one. | |
| EXPECT_EQ(201, message.GetExtension(Traits::repeated_int32_extension, 0)); | |
| EXPECT_EQ(202, message.GetExtension(Traits::repeated_int64_extension, 0)); | |
| EXPECT_EQ(203, message.GetExtension(Traits::repeated_uint32_extension, 0)); | |
| EXPECT_EQ(204, message.GetExtension(Traits::repeated_uint64_extension, 0)); | |
| EXPECT_EQ(205, message.GetExtension(Traits::repeated_sint32_extension, 0)); | |
| EXPECT_EQ(206, message.GetExtension(Traits::repeated_sint64_extension, 0)); | |
| EXPECT_EQ(207, message.GetExtension(Traits::repeated_fixed32_extension, 0)); | |
| EXPECT_EQ(208, message.GetExtension(Traits::repeated_fixed64_extension, 0)); | |
| EXPECT_EQ(209, message.GetExtension(Traits::repeated_sfixed32_extension, 0)); | |
| EXPECT_EQ(210, message.GetExtension(Traits::repeated_sfixed64_extension, 0)); | |
| EXPECT_EQ(211, message.GetExtension(Traits::repeated_float_extension, 0)); | |
| EXPECT_EQ(212, message.GetExtension(Traits::repeated_double_extension, 0)); | |
| EXPECT_TRUE(message.GetExtension(Traits::repeated_bool_extension, 0)); | |
| EXPECT_EQ("215", message.GetExtension(Traits::repeated_string_extension, 0)); | |
| EXPECT_EQ("216", message.GetExtension(Traits::repeated_bytes_extension, 0)); | |
| EXPECT_EQ(217, message.GetExtension(Traits::repeatedgroup_extension, 0).a()); | |
| EXPECT_EQ( | |
| 218, | |
| message.GetExtension(Traits::repeated_nested_message_extension, 0).bb()); | |
| EXPECT_EQ( | |
| 219, | |
| message.GetExtension(Traits::repeated_foreign_message_extension, 0).c()); | |
| EXPECT_EQ( | |
| 220, | |
| message.GetExtension(Traits::repeated_import_message_extension, 0).d()); | |
| EXPECT_EQ( | |
| 227, | |
| message.GetExtension(Traits::repeated_lazy_message_extension, 0).bb()); | |
| EXPECT_EQ(Traits::TestAllTypes::BAR, | |
| message.GetExtension(Traits::repeated_nested_enum_extension, 0)); | |
| EXPECT_EQ(Traits::FOREIGN_BAR, | |
| message.GetExtension(Traits::repeated_foreign_enum_extension, 0)); | |
| EXPECT_EQ(Traits::IMPORT_BAR, | |
| message.GetExtension(Traits::repeated_import_enum_extension, 0)); | |
| EXPECT_EQ("224", | |
| message.GetExtension(Traits::repeated_string_piece_extension, 0)); | |
| EXPECT_EQ("225", message.GetExtension(Traits::repeated_cord_extension, 0)); | |
| } | |
| template <typename TestAllExtensions> | |
| void ExpectRepeatedExtensionsSwapped(const TestAllExtensions& message) { | |
| using Traits = TestUtilTraits<TestAllExtensions>; | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_int32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_int64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_uint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_uint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_fixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_fixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sfixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_sfixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_float_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_double_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_bool_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_string_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_bytes_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeatedgroup_extension)); | |
| ASSERT_EQ(2, | |
| message.ExtensionSize(Traits::repeated_nested_message_extension)); | |
| ASSERT_EQ(2, | |
| message.ExtensionSize(Traits::repeated_foreign_message_extension)); | |
| ASSERT_EQ(2, | |
| message.ExtensionSize(Traits::repeated_import_message_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_lazy_message_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_nested_enum_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_foreign_enum_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_import_enum_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_string_piece_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::repeated_cord_extension)); | |
| EXPECT_EQ(201, message.GetExtension(Traits::repeated_int32_extension, 1)); | |
| EXPECT_EQ(202, message.GetExtension(Traits::repeated_int64_extension, 1)); | |
| EXPECT_EQ(203, message.GetExtension(Traits::repeated_uint32_extension, 1)); | |
| EXPECT_EQ(204, message.GetExtension(Traits::repeated_uint64_extension, 1)); | |
| EXPECT_EQ(205, message.GetExtension(Traits::repeated_sint32_extension, 1)); | |
| EXPECT_EQ(206, message.GetExtension(Traits::repeated_sint64_extension, 1)); | |
| EXPECT_EQ(207, message.GetExtension(Traits::repeated_fixed32_extension, 1)); | |
| EXPECT_EQ(208, message.GetExtension(Traits::repeated_fixed64_extension, 1)); | |
| EXPECT_EQ(209, message.GetExtension(Traits::repeated_sfixed32_extension, 1)); | |
| EXPECT_EQ(210, message.GetExtension(Traits::repeated_sfixed64_extension, 1)); | |
| EXPECT_EQ(211, message.GetExtension(Traits::repeated_float_extension, 1)); | |
| EXPECT_EQ(212, message.GetExtension(Traits::repeated_double_extension, 1)); | |
| EXPECT_TRUE(message.GetExtension(Traits::repeated_bool_extension, 1)); | |
| EXPECT_EQ("215", message.GetExtension(Traits::repeated_string_extension, 1)); | |
| EXPECT_EQ("216", message.GetExtension(Traits::repeated_bytes_extension, 1)); | |
| EXPECT_EQ(217, message.GetExtension(Traits::repeatedgroup_extension, 1).a()); | |
| EXPECT_EQ( | |
| 218, | |
| message.GetExtension(Traits::repeated_nested_message_extension, 1).bb()); | |
| EXPECT_EQ( | |
| 219, | |
| message.GetExtension(Traits::repeated_foreign_message_extension, 1).c()); | |
| EXPECT_EQ( | |
| 220, | |
| message.GetExtension(Traits::repeated_import_message_extension, 1).d()); | |
| EXPECT_EQ( | |
| 227, | |
| message.GetExtension(Traits::repeated_lazy_message_extension, 1).bb()); | |
| EXPECT_EQ(Traits::TestAllTypes::BAR, | |
| message.GetExtension(Traits::repeated_nested_enum_extension, 1)); | |
| EXPECT_EQ(Traits::FOREIGN_BAR, | |
| message.GetExtension(Traits::repeated_foreign_enum_extension, 1)); | |
| EXPECT_EQ(Traits::IMPORT_BAR, | |
| message.GetExtension(Traits::repeated_import_enum_extension, 1)); | |
| EXPECT_EQ("224", | |
| message.GetExtension(Traits::repeated_string_piece_extension, 1)); | |
| EXPECT_EQ("225", message.GetExtension(Traits::repeated_cord_extension, 1)); | |
| EXPECT_EQ(301, message.GetExtension(Traits::repeated_int32_extension, 0)); | |
| EXPECT_EQ(302, message.GetExtension(Traits::repeated_int64_extension, 0)); | |
| EXPECT_EQ(303, message.GetExtension(Traits::repeated_uint32_extension, 0)); | |
| EXPECT_EQ(304, message.GetExtension(Traits::repeated_uint64_extension, 0)); | |
| EXPECT_EQ(305, message.GetExtension(Traits::repeated_sint32_extension, 0)); | |
| EXPECT_EQ(306, message.GetExtension(Traits::repeated_sint64_extension, 0)); | |
| EXPECT_EQ(307, message.GetExtension(Traits::repeated_fixed32_extension, 0)); | |
| EXPECT_EQ(308, message.GetExtension(Traits::repeated_fixed64_extension, 0)); | |
| EXPECT_EQ(309, message.GetExtension(Traits::repeated_sfixed32_extension, 0)); | |
| EXPECT_EQ(310, message.GetExtension(Traits::repeated_sfixed64_extension, 0)); | |
| EXPECT_EQ(311, message.GetExtension(Traits::repeated_float_extension, 0)); | |
| EXPECT_EQ(312, message.GetExtension(Traits::repeated_double_extension, 0)); | |
| EXPECT_FALSE(message.GetExtension(Traits::repeated_bool_extension, 0)); | |
| EXPECT_EQ("315", message.GetExtension(Traits::repeated_string_extension, 0)); | |
| EXPECT_EQ("316", message.GetExtension(Traits::repeated_bytes_extension, 0)); | |
| EXPECT_EQ(317, message.GetExtension(Traits::repeatedgroup_extension, 0).a()); | |
| EXPECT_EQ( | |
| 318, | |
| message.GetExtension(Traits::repeated_nested_message_extension, 0).bb()); | |
| EXPECT_EQ( | |
| 319, | |
| message.GetExtension(Traits::repeated_foreign_message_extension, 0).c()); | |
| EXPECT_EQ( | |
| 320, | |
| message.GetExtension(Traits::repeated_import_message_extension, 0).d()); | |
| EXPECT_EQ( | |
| 327, | |
| message.GetExtension(Traits::repeated_lazy_message_extension, 0).bb()); | |
| EXPECT_EQ(Traits::TestAllTypes::BAZ, | |
| message.GetExtension(Traits::repeated_nested_enum_extension, 0)); | |
| EXPECT_EQ(Traits::FOREIGN_BAZ, | |
| message.GetExtension(Traits::repeated_foreign_enum_extension, 0)); | |
| EXPECT_EQ(Traits::IMPORT_BAZ, | |
| message.GetExtension(Traits::repeated_import_enum_extension, 0)); | |
| EXPECT_EQ("324", | |
| message.GetExtension(Traits::repeated_string_piece_extension, 0)); | |
| EXPECT_EQ("325", message.GetExtension(Traits::repeated_cord_extension, 0)); | |
| } | |
| template <typename TestFieldOrderings> | |
| void SetAllFieldsAndExtensions(TestFieldOrderings* message) { | |
| using Traits = TestUtilTraits<TestFieldOrderings>; | |
| message->set_my_int(1); | |
| message->set_my_string("foo"); | |
| message->set_my_float(1.0); | |
| message->SetExtension(Traits::my_extension_int, 23); | |
| message->SetExtension(Traits::my_extension_string, "bar"); | |
| } | |
| template <typename TestPackedExtensions> | |
| void SetPackedExtensions(TestPackedExtensions* message) { | |
| using Traits = TestUtilTraits<TestPackedExtensions>; | |
| message->AddExtension(Traits::packed_int32_extension, 601); | |
| message->AddExtension(Traits::packed_int64_extension, 602); | |
| message->AddExtension(Traits::packed_uint32_extension, 603); | |
| message->AddExtension(Traits::packed_uint64_extension, 604); | |
| message->AddExtension(Traits::packed_sint32_extension, 605); | |
| message->AddExtension(Traits::packed_sint64_extension, 606); | |
| message->AddExtension(Traits::packed_fixed32_extension, 607); | |
| message->AddExtension(Traits::packed_fixed64_extension, 608); | |
| message->AddExtension(Traits::packed_sfixed32_extension, 609); | |
| message->AddExtension(Traits::packed_sfixed64_extension, 610); | |
| message->AddExtension(Traits::packed_float_extension, 611); | |
| message->AddExtension(Traits::packed_double_extension, 612); | |
| message->AddExtension(Traits::packed_bool_extension, true); | |
| message->AddExtension(Traits::packed_enum_extension, Traits::FOREIGN_BAR); | |
| // add a second one of each field | |
| message->AddExtension(Traits::packed_int32_extension, 701); | |
| message->AddExtension(Traits::packed_int64_extension, 702); | |
| message->AddExtension(Traits::packed_uint32_extension, 703); | |
| message->AddExtension(Traits::packed_uint64_extension, 704); | |
| message->AddExtension(Traits::packed_sint32_extension, 705); | |
| message->AddExtension(Traits::packed_sint64_extension, 706); | |
| message->AddExtension(Traits::packed_fixed32_extension, 707); | |
| message->AddExtension(Traits::packed_fixed64_extension, 708); | |
| message->AddExtension(Traits::packed_sfixed32_extension, 709); | |
| message->AddExtension(Traits::packed_sfixed64_extension, 710); | |
| message->AddExtension(Traits::packed_float_extension, 711); | |
| message->AddExtension(Traits::packed_double_extension, 712); | |
| message->AddExtension(Traits::packed_bool_extension, false); | |
| message->AddExtension(Traits::packed_enum_extension, Traits::FOREIGN_BAZ); | |
| } | |
| template <typename TestPackedExtensions> | |
| void ExpectPackedExtensionsSet(const TestPackedExtensions& message) { | |
| using Traits = TestUtilTraits<TestPackedExtensions>; | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_int32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_int64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_uint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_uint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_sint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_sint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_fixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_fixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_sfixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_sfixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_float_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_double_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_bool_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::packed_enum_extension)); | |
| EXPECT_EQ(601, message.GetExtension(Traits::packed_int32_extension, 0)); | |
| EXPECT_EQ(602, message.GetExtension(Traits::packed_int64_extension, 0)); | |
| EXPECT_EQ(603, message.GetExtension(Traits::packed_uint32_extension, 0)); | |
| EXPECT_EQ(604, message.GetExtension(Traits::packed_uint64_extension, 0)); | |
| EXPECT_EQ(605, message.GetExtension(Traits::packed_sint32_extension, 0)); | |
| EXPECT_EQ(606, message.GetExtension(Traits::packed_sint64_extension, 0)); | |
| EXPECT_EQ(607, message.GetExtension(Traits::packed_fixed32_extension, 0)); | |
| EXPECT_EQ(608, message.GetExtension(Traits::packed_fixed64_extension, 0)); | |
| EXPECT_EQ(609, message.GetExtension(Traits::packed_sfixed32_extension, 0)); | |
| EXPECT_EQ(610, message.GetExtension(Traits::packed_sfixed64_extension, 0)); | |
| EXPECT_EQ(611, message.GetExtension(Traits::packed_float_extension, 0)); | |
| EXPECT_EQ(612, message.GetExtension(Traits::packed_double_extension, 0)); | |
| EXPECT_TRUE(message.GetExtension(Traits::packed_bool_extension, 0)); | |
| EXPECT_EQ(Traits::FOREIGN_BAR, | |
| message.GetExtension(Traits::packed_enum_extension, 0)); | |
| EXPECT_EQ(701, message.GetExtension(Traits::packed_int32_extension, 1)); | |
| EXPECT_EQ(702, message.GetExtension(Traits::packed_int64_extension, 1)); | |
| EXPECT_EQ(703, message.GetExtension(Traits::packed_uint32_extension, 1)); | |
| EXPECT_EQ(704, message.GetExtension(Traits::packed_uint64_extension, 1)); | |
| EXPECT_EQ(705, message.GetExtension(Traits::packed_sint32_extension, 1)); | |
| EXPECT_EQ(706, message.GetExtension(Traits::packed_sint64_extension, 1)); | |
| EXPECT_EQ(707, message.GetExtension(Traits::packed_fixed32_extension, 1)); | |
| EXPECT_EQ(708, message.GetExtension(Traits::packed_fixed64_extension, 1)); | |
| EXPECT_EQ(709, message.GetExtension(Traits::packed_sfixed32_extension, 1)); | |
| EXPECT_EQ(710, message.GetExtension(Traits::packed_sfixed64_extension, 1)); | |
| EXPECT_EQ(711, message.GetExtension(Traits::packed_float_extension, 1)); | |
| EXPECT_EQ(712, message.GetExtension(Traits::packed_double_extension, 1)); | |
| EXPECT_FALSE(message.GetExtension(Traits::packed_bool_extension, 1)); | |
| EXPECT_EQ(Traits::FOREIGN_BAZ, | |
| message.GetExtension(Traits::packed_enum_extension, 1)); | |
| } | |
| template <typename TestUnpackedExtensions> | |
| void ExpectUnpackedExtensionsSet(const TestUnpackedExtensions& message) { | |
| using Traits = TestUtilTraits<TestUnpackedExtensions>; | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_int32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_int64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_uint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_uint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_sint32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_sint64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_fixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_fixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_sfixed32_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_sfixed64_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_float_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_double_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_bool_extension)); | |
| ASSERT_EQ(2, message.ExtensionSize(Traits::unpacked_enum_extension)); | |
| EXPECT_EQ(601, message.GetExtension(Traits::unpacked_int32_extension, 0)); | |
| EXPECT_EQ(602, message.GetExtension(Traits::unpacked_int64_extension, 0)); | |
| EXPECT_EQ(603, message.GetExtension(Traits::unpacked_uint32_extension, 0)); | |
| EXPECT_EQ(604, message.GetExtension(Traits::unpacked_uint64_extension, 0)); | |
| EXPECT_EQ(605, message.GetExtension(Traits::unpacked_sint32_extension, 0)); | |
| EXPECT_EQ(606, message.GetExtension(Traits::unpacked_sint64_extension, 0)); | |
| EXPECT_EQ(607, message.GetExtension(Traits::unpacked_fixed32_extension, 0)); | |
| EXPECT_EQ(608, message.GetExtension(Traits::unpacked_fixed64_extension, 0)); | |
| EXPECT_EQ(609, message.GetExtension(Traits::unpacked_sfixed32_extension, 0)); | |
| EXPECT_EQ(610, message.GetExtension(Traits::unpacked_sfixed64_extension, 0)); | |
| EXPECT_EQ(611, message.GetExtension(Traits::unpacked_float_extension, 0)); | |
| EXPECT_EQ(612, message.GetExtension(Traits::unpacked_double_extension, 0)); | |
| EXPECT_EQ(true, message.GetExtension(Traits::unpacked_bool_extension, 0)); | |
| EXPECT_EQ(Traits::FOREIGN_BAR, | |
| message.GetExtension(Traits::unpacked_enum_extension, 0)); | |
| EXPECT_EQ(701, message.GetExtension(Traits::unpacked_int32_extension, 1)); | |
| EXPECT_EQ(702, message.GetExtension(Traits::unpacked_int64_extension, 1)); | |
| EXPECT_EQ(703, message.GetExtension(Traits::unpacked_uint32_extension, 1)); | |
| EXPECT_EQ(704, message.GetExtension(Traits::unpacked_uint64_extension, 1)); | |
| EXPECT_EQ(705, message.GetExtension(Traits::unpacked_sint32_extension, 1)); | |
| EXPECT_EQ(706, message.GetExtension(Traits::unpacked_sint64_extension, 1)); | |
| EXPECT_EQ(707, message.GetExtension(Traits::unpacked_fixed32_extension, 1)); | |
| EXPECT_EQ(708, message.GetExtension(Traits::unpacked_fixed64_extension, 1)); | |
| EXPECT_EQ(709, message.GetExtension(Traits::unpacked_sfixed32_extension, 1)); | |
| EXPECT_EQ(710, message.GetExtension(Traits::unpacked_sfixed64_extension, 1)); | |
| EXPECT_EQ(711, message.GetExtension(Traits::unpacked_float_extension, 1)); | |
| EXPECT_EQ(712, message.GetExtension(Traits::unpacked_double_extension, 1)); | |
| EXPECT_FALSE(message.GetExtension(Traits::unpacked_bool_extension, 1)); | |
| EXPECT_EQ(Traits::FOREIGN_BAZ, | |
| message.GetExtension(Traits::unpacked_enum_extension, 1)); | |
| } | |
| template <typename TestPackedExtensions> | |
| void ExpectLastRepeatedExtensionsRemovedPacked( | |
| const TestPackedExtensions& message) { | |
| using Traits = TestUtilTraits<TestPackedExtensions>; | |
| // Test that one element was removed. | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_int32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_int64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_uint32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_uint64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_sint32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_sint64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_fixed32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_fixed64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_sfixed32_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_sfixed64_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_float_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_double_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_bool_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::packed_enum_extension)); | |
| // Test that the remaining element is the correct one. | |
| EXPECT_EQ(601, message.GetExtension(Traits::packed_int32_extension, 0)); | |
| EXPECT_EQ(602, message.GetExtension(Traits::packed_int64_extension, 0)); | |
| EXPECT_EQ(603, message.GetExtension(Traits::packed_uint32_extension, 0)); | |
| EXPECT_EQ(604, message.GetExtension(Traits::packed_uint64_extension, 0)); | |
| EXPECT_EQ(605, message.GetExtension(Traits::packed_sint32_extension, 0)); | |
| EXPECT_EQ(606, message.GetExtension(Traits::packed_sint64_extension, 0)); | |
| EXPECT_EQ(607, message.GetExtension(Traits::packed_fixed32_extension, 0)); | |
| EXPECT_EQ(608, message.GetExtension(Traits::packed_fixed64_extension, 0)); | |
| EXPECT_EQ(609, message.GetExtension(Traits::packed_sfixed32_extension, 0)); | |
| EXPECT_EQ(610, message.GetExtension(Traits::packed_sfixed64_extension, 0)); | |
| EXPECT_EQ(611, message.GetExtension(Traits::packed_float_extension, 0)); | |
| EXPECT_EQ(612, message.GetExtension(Traits::packed_double_extension, 0)); | |
| EXPECT_TRUE(message.GetExtension(Traits::packed_bool_extension, 0)); | |
| EXPECT_EQ(Traits::FOREIGN_BAR, | |
| message.GetExtension(Traits::packed_enum_extension, 0)); | |
| } | |
| template <typename TestAllTypes> | |
| void ExpectLastRepeatedsReleased(const TestAllTypes& message) { | |
| ASSERT_EQ(1, message.repeatedgroup_size()); | |
| ASSERT_EQ(1, message.repeated_nested_message_size()); | |
| ASSERT_EQ(1, message.repeated_foreign_message_size()); | |
| ASSERT_EQ(1, message.repeated_import_message_size()); | |
| ASSERT_EQ(1, message.repeated_import_message_size()); | |
| EXPECT_EQ(217, message.repeatedgroup(0).a()); | |
| EXPECT_EQ(218, message.repeated_nested_message(0).bb()); | |
| EXPECT_EQ(219, message.repeated_foreign_message(0).c()); | |
| EXPECT_EQ(220, message.repeated_import_message(0).d()); | |
| EXPECT_EQ(220, message.repeated_import_message(0).d()); | |
| } | |
| template <typename TestAllExtensions> | |
| void ExpectLastRepeatedExtensionsReleased(const TestAllExtensions& message) { | |
| using Traits = TestUtilTraits<TestAllExtensions>; | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeatedgroup_extension)); | |
| ASSERT_EQ(1, | |
| message.ExtensionSize(Traits::repeated_nested_message_extension)); | |
| ASSERT_EQ(1, | |
| message.ExtensionSize(Traits::repeated_foreign_message_extension)); | |
| ASSERT_EQ(1, | |
| message.ExtensionSize(Traits::repeated_import_message_extension)); | |
| ASSERT_EQ(1, message.ExtensionSize(Traits::repeated_lazy_message_extension)); | |
| EXPECT_EQ(217, message.GetExtension(Traits::repeatedgroup_extension, 0).a()); | |
| EXPECT_EQ( | |
| 218, | |
| message.GetExtension(Traits::repeated_nested_message_extension, 0).bb()); | |
| EXPECT_EQ( | |
| 219, | |
| message.GetExtension(Traits::repeated_foreign_message_extension, 0).c()); | |
| EXPECT_EQ( | |
| 220, | |
| message.GetExtension(Traits::repeated_import_message_extension, 0).d()); | |
| EXPECT_EQ( | |
| 227, | |
| message.GetExtension(Traits::repeated_lazy_message_extension, 0).bb()); | |
| } | |
| } // namespace TestUtil | |
| } // namespace protobuf | |
| } // namespace google | |
| // Declare the default trait so that most users don't need to do it. | |
| PROTOBUF_TEST_UTIL_DECLARE_INPUT(); | |
| #include "google/protobuf/port_undef.inc" | |
| #endif // GOOGLE_PROTOBUF_TEST_UTIL_H__ |