// Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. // https://developers.google.com/protocol-buffers/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include namespace google { namespace protobuf { class MapTestUtil { public: // Set every field in the TestMap message to a unique value. static void SetMapFields(UNITTEST::TestMap* message); // Set every field in the TestArenaMap message to a unique value. static void SetArenaMapFields(UNITTEST::TestArenaMap* message); // Set every field in the message to a default value. static void SetMapFieldsInitialized(UNITTEST::TestMap* message); // Modify all the map fields of the message (which should already have been // initialized with SetMapFields()). static void ModifyMapFields(UNITTEST::TestMap* message); // Check that all fields have the values that they should have after // SetMapFields() is called. static void ExpectMapFieldsSet(const UNITTEST::TestMap& message); // Check that all fields have the values that they should have after // SetMapFields() is called for TestArenaMap. static void ExpectArenaMapFieldsSet(const UNITTEST::TestArenaMap& message); // Check that all fields have the values that they should have after // SetMapFieldsInitialized() is called. static void ExpectMapFieldsSetInitialized(const UNITTEST::TestMap& message); // Expect that the message is modified as would be expected from // ModifyMapFields(). static void ExpectMapFieldsModified(const UNITTEST::TestMap& message); // Check that all fields are empty. static void ExpectClear(const UNITTEST::TestMap& message); // Check that all map fields have the given size. static void ExpectMapsSize(const UNITTEST::TestMap& message, int size); // Get pointers of map entries at given index. static std::vector GetMapEntries( const UNITTEST::TestMap& message, int index); // Get pointers of map entries from release. static std::vector GetMapEntriesFromRelease( UNITTEST::TestMap* message); }; inline void MapTestUtil::SetMapFields(UNITTEST::TestMap* message) { MapTestUtilImpl::SetMapFields(message); } inline void MapTestUtil::SetArenaMapFields(UNITTEST::TestArenaMap* message) { MapTestUtilImpl::SetArenaMapFields(message); } inline void MapTestUtil::SetMapFieldsInitialized(UNITTEST::TestMap* message) { MapTestUtilImpl::SetMapFieldsInitialized(message); } inline void MapTestUtil::ModifyMapFields(UNITTEST::TestMap* message) { MapTestUtilImpl::ModifyMapFields( message); } inline void MapTestUtil::ExpectClear(const UNITTEST::TestMap& message) { MapTestUtilImpl::ExpectClear(message); } inline void MapTestUtil::ExpectMapFieldsSet(const UNITTEST::TestMap& message) { MapTestUtilImpl::ExpectMapFieldsSet(message); } inline void MapTestUtil::ExpectArenaMapFieldsSet( const UNITTEST::TestArenaMap& message) { MapTestUtilImpl::ExpectArenaMapFieldsSet< UNITTEST::MapEnum, UNITTEST::MAP_ENUM_BAR, UNITTEST::MAP_ENUM_BAZ>( message); } inline void MapTestUtil::ExpectMapFieldsSetInitialized( const UNITTEST::TestMap& message) { MapTestUtilImpl::ExpectMapFieldsSetInitialized( message); } inline void MapTestUtil::ExpectMapFieldsModified( const UNITTEST::TestMap& message) { MapTestUtilImpl::ExpectMapFieldsModified< UNITTEST::MapEnum, UNITTEST::MAP_ENUM_BAR, UNITTEST::MAP_ENUM_FOO>( message); } inline void MapTestUtil::ExpectMapsSize(const UNITTEST::TestMap& message, int size) { const Descriptor* descriptor = message.GetDescriptor(); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_int32_int32"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_int64_int64"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_uint32_uint32"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_uint64_uint64"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_sint32_sint32"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_sint64_sint64"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_fixed32_fixed32"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_fixed64_fixed64"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_sfixed32_sfixed32"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_sfixed64_sfixed64"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_int32_float"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_int32_double"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_bool_bool"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_string_string"))); EXPECT_EQ(size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_int32_bytes"))); EXPECT_EQ( size, message.GetReflection()->FieldSize( message, descriptor->FindFieldByName("map_int32_foreign_message"))); } inline std::vector MapTestUtil::GetMapEntries( const UNITTEST::TestMap& message, int index) { const Descriptor* descriptor = message.GetDescriptor(); std::vector result; result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_int32_int32"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_int64_int64"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_uint32_uint32"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_uint64_uint64"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_sint32_sint32"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_sint64_sint64"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_fixed32_fixed32"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_fixed64_fixed64"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_sfixed32_sfixed32"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_sfixed64_sfixed64"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_int32_float"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_int32_double"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_bool_bool"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_string_string"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_int32_bytes"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_int32_enum"), index)); result.push_back(&message.GetReflection()->GetRepeatedMessage( message, descriptor->FindFieldByName("map_int32_foreign_message"), index)); return result; } inline std::vector MapTestUtil::GetMapEntriesFromRelease( UNITTEST::TestMap* message) { const Descriptor* descriptor = message->GetDescriptor(); std::vector result; result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_int32_int32"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_int64_int64"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_uint32_uint32"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_uint64_uint64"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_sint32_sint32"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_sint64_sint64"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_fixed32_fixed32"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_fixed64_fixed64"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_sfixed32_sfixed32"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_sfixed64_sfixed64"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_int32_float"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_int32_double"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_bool_bool"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_string_string"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_int32_bytes"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_int32_enum"))); result.push_back(message->GetReflection()->ReleaseLast( message, descriptor->FindFieldByName("map_int32_foreign_message"))); return result; } } // namespace protobuf } // namespace google