1// -*- c++ -*- 2// Protocol Buffers - Google's data interchange format 3// Copyright 2008 Google Inc. All rights reserved. 4// 5// Use of this source code is governed by a BSD-style 6// license that can be found in the LICENSE file or at 7// https://developers.google.com/open-source/licenses/bsd 8 9#include "google/protobuf/descriptor.h" 10#include "google/protobuf/map_test_util_impl.h" 11#include "google/protobuf/message.h" 12 13namespace google { 14namespace protobuf { 15 16class MapTestUtil { 17 public: 18 // Set every field in the TestMap message to a unique value. 19 static void SetMapFields(UNITTEST::TestMap* message); 20 21 // Set every field in the TestArenaMap message to a unique value. 22 static void SetArenaMapFields(UNITTEST::TestArenaMap* message); 23 24 // Set every field in the message to a default value. 25 static void SetMapFieldsInitialized(UNITTEST::TestMap* message); 26 27 // Modify all the map fields of the message (which should already have been 28 // initialized with SetMapFields()). 29 static void ModifyMapFields(UNITTEST::TestMap* message); 30 31 // Check that all fields have the values that they should have after 32 // SetMapFields() is called. 33 static void ExpectMapFieldsSet(const UNITTEST::TestMap& message); 34 35 // Check that all fields have the values that they should have after 36 // SetMapFields() is called for TestArenaMap. 37 static void ExpectArenaMapFieldsSet(const UNITTEST::TestArenaMap& message); 38 39 // Check that all fields have the values that they should have after 40 // SetMapFieldsInitialized() is called. 41 static void ExpectMapFieldsSetInitialized(const UNITTEST::TestMap& message); 42 43 // Expect that the message is modified as would be expected from 44 // ModifyMapFields(). 45 static void ExpectMapFieldsModified(const UNITTEST::TestMap& message); 46 47 // Check that all fields are empty. 48 static void ExpectClear(const UNITTEST::TestMap& message); 49 50 // Check that all map fields have the given size. 51 static void ExpectMapsSize(const UNITTEST::TestMap& message, int size); 52 53 // Get pointers of map entries at given index. 54 static std::vector<const Message*> GetMapEntries( 55 const UNITTEST::TestMap& message, int index); 56 57 // Get pointers of map entries from release. 58 static std::vector<const Message*> GetMapEntriesFromRelease( 59 UNITTEST::TestMap* message); 60}; 61 62inline void MapTestUtil::SetMapFields(UNITTEST::TestMap* message) { 63 MapTestUtilImpl::SetMapFields<UNITTEST::MapEnum, UNITTEST::MAP_ENUM_BAR, 64 UNITTEST::MAP_ENUM_BAZ>(message); 65} 66 67inline void MapTestUtil::SetArenaMapFields(UNITTEST::TestArenaMap* message) { 68 MapTestUtilImpl::SetArenaMapFields<UNITTEST::MapEnum, UNITTEST::MAP_ENUM_BAR, 69 UNITTEST::MAP_ENUM_BAZ>(message); 70} 71 72inline void MapTestUtil::SetMapFieldsInitialized(UNITTEST::TestMap* message) { 73 MapTestUtilImpl::SetMapFieldsInitialized(message); 74} 75 76inline void MapTestUtil::ModifyMapFields(UNITTEST::TestMap* message) { 77 MapTestUtilImpl::ModifyMapFields<UNITTEST::MapEnum, UNITTEST::MAP_ENUM_FOO>( 78 message); 79} 80 81inline void MapTestUtil::ExpectClear(const UNITTEST::TestMap& message) { 82 MapTestUtilImpl::ExpectClear(message); 83} 84 85inline void MapTestUtil::ExpectMapFieldsSet(const UNITTEST::TestMap& message) { 86 MapTestUtilImpl::ExpectMapFieldsSet<UNITTEST::MapEnum, UNITTEST::MAP_ENUM_BAR, 87 UNITTEST::MAP_ENUM_BAZ>(message); 88} 89 90inline void MapTestUtil::ExpectArenaMapFieldsSet( 91 const UNITTEST::TestArenaMap& message) { 92 MapTestUtilImpl::ExpectArenaMapFieldsSet< 93 UNITTEST::MapEnum, UNITTEST::MAP_ENUM_BAR, UNITTEST::MAP_ENUM_BAZ>( 94 message); 95} 96 97inline void MapTestUtil::ExpectMapFieldsSetInitialized( 98 const UNITTEST::TestMap& message) { 99 MapTestUtilImpl::ExpectMapFieldsSetInitialized<UNITTEST::MapEnum, 100 UNITTEST::MAP_ENUM_FOO>( 101 message); 102} 103 104inline void MapTestUtil::ExpectMapFieldsModified( 105 const UNITTEST::TestMap& message) { 106 MapTestUtilImpl::ExpectMapFieldsModified< 107 UNITTEST::MapEnum, UNITTEST::MAP_ENUM_BAR, UNITTEST::MAP_ENUM_FOO>( 108 message); 109} 110 111inline void MapTestUtil::ExpectMapsSize(const UNITTEST::TestMap& message, 112 int size) { 113 const Descriptor* descriptor = message.GetDescriptor(); 114 115 EXPECT_EQ(size, message.GetReflection()->FieldSize( 116 message, descriptor->FindFieldByName("map_int32_int32"))); 117 EXPECT_EQ(size, message.GetReflection()->FieldSize( 118 message, descriptor->FindFieldByName("map_int64_int64"))); 119 EXPECT_EQ(size, 120 message.GetReflection()->FieldSize( 121 message, descriptor->FindFieldByName("map_uint32_uint32"))); 122 EXPECT_EQ(size, 123 message.GetReflection()->FieldSize( 124 message, descriptor->FindFieldByName("map_uint64_uint64"))); 125 EXPECT_EQ(size, 126 message.GetReflection()->FieldSize( 127 message, descriptor->FindFieldByName("map_sint32_sint32"))); 128 EXPECT_EQ(size, 129 message.GetReflection()->FieldSize( 130 message, descriptor->FindFieldByName("map_sint64_sint64"))); 131 EXPECT_EQ(size, 132 message.GetReflection()->FieldSize( 133 message, descriptor->FindFieldByName("map_fixed32_fixed32"))); 134 EXPECT_EQ(size, 135 message.GetReflection()->FieldSize( 136 message, descriptor->FindFieldByName("map_fixed64_fixed64"))); 137 EXPECT_EQ(size, 138 message.GetReflection()->FieldSize( 139 message, descriptor->FindFieldByName("map_sfixed32_sfixed32"))); 140 EXPECT_EQ(size, 141 message.GetReflection()->FieldSize( 142 message, descriptor->FindFieldByName("map_sfixed64_sfixed64"))); 143 EXPECT_EQ(size, message.GetReflection()->FieldSize( 144 message, descriptor->FindFieldByName("map_int32_float"))); 145 EXPECT_EQ(size, 146 message.GetReflection()->FieldSize( 147 message, descriptor->FindFieldByName("map_int32_double"))); 148 EXPECT_EQ(size, message.GetReflection()->FieldSize( 149 message, descriptor->FindFieldByName("map_bool_bool"))); 150 EXPECT_EQ(size, 151 message.GetReflection()->FieldSize( 152 message, descriptor->FindFieldByName("map_string_string"))); 153 EXPECT_EQ(size, message.GetReflection()->FieldSize( 154 message, descriptor->FindFieldByName("map_int32_bytes"))); 155 EXPECT_EQ( 156 size, 157 message.GetReflection()->FieldSize( 158 message, descriptor->FindFieldByName("map_int32_foreign_message"))); 159} 160 161inline std::vector<const Message*> MapTestUtil::GetMapEntries( 162 const UNITTEST::TestMap& message, int index) { 163 const Descriptor* descriptor = message.GetDescriptor(); 164 std::vector<const Message*> result; 165 166 result.push_back(&message.GetReflection()->GetRepeatedMessage( 167 message, descriptor->FindFieldByName("map_int32_int32"), index)); 168 result.push_back(&message.GetReflection()->GetRepeatedMessage( 169 message, descriptor->FindFieldByName("map_int64_int64"), index)); 170 result.push_back(&message.GetReflection()->GetRepeatedMessage( 171 message, descriptor->FindFieldByName("map_uint32_uint32"), index)); 172 result.push_back(&message.GetReflection()->GetRepeatedMessage( 173 message, descriptor->FindFieldByName("map_uint64_uint64"), index)); 174 result.push_back(&message.GetReflection()->GetRepeatedMessage( 175 message, descriptor->FindFieldByName("map_sint32_sint32"), index)); 176 result.push_back(&message.GetReflection()->GetRepeatedMessage( 177 message, descriptor->FindFieldByName("map_sint64_sint64"), index)); 178 result.push_back(&message.GetReflection()->GetRepeatedMessage( 179 message, descriptor->FindFieldByName("map_fixed32_fixed32"), index)); 180 result.push_back(&message.GetReflection()->GetRepeatedMessage( 181 message, descriptor->FindFieldByName("map_fixed64_fixed64"), index)); 182 result.push_back(&message.GetReflection()->GetRepeatedMessage( 183 message, descriptor->FindFieldByName("map_sfixed32_sfixed32"), index)); 184 result.push_back(&message.GetReflection()->GetRepeatedMessage( 185 message, descriptor->FindFieldByName("map_sfixed64_sfixed64"), index)); 186 result.push_back(&message.GetReflection()->GetRepeatedMessage( 187 message, descriptor->FindFieldByName("map_int32_float"), index)); 188 result.push_back(&message.GetReflection()->GetRepeatedMessage( 189 message, descriptor->FindFieldByName("map_int32_double"), index)); 190 result.push_back(&message.GetReflection()->GetRepeatedMessage( 191 message, descriptor->FindFieldByName("map_bool_bool"), index)); 192 result.push_back(&message.GetReflection()->GetRepeatedMessage( 193 message, descriptor->FindFieldByName("map_string_string"), index)); 194 result.push_back(&message.GetReflection()->GetRepeatedMessage( 195 message, descriptor->FindFieldByName("map_int32_bytes"), index)); 196 result.push_back(&message.GetReflection()->GetRepeatedMessage( 197 message, descriptor->FindFieldByName("map_int32_enum"), index)); 198 result.push_back(&message.GetReflection()->GetRepeatedMessage( 199 message, descriptor->FindFieldByName("map_int32_foreign_message"), 200 index)); 201 202 return result; 203} 204 205inline std::vector<const Message*> MapTestUtil::GetMapEntriesFromRelease( 206 UNITTEST::TestMap* message) { 207 const Descriptor* descriptor = message->GetDescriptor(); 208 std::vector<const Message*> result; 209 210 result.push_back(message->GetReflection()->ReleaseLast( 211 message, descriptor->FindFieldByName("map_int32_int32"))); 212 result.push_back(message->GetReflection()->ReleaseLast( 213 message, descriptor->FindFieldByName("map_int64_int64"))); 214 result.push_back(message->GetReflection()->ReleaseLast( 215 message, descriptor->FindFieldByName("map_uint32_uint32"))); 216 result.push_back(message->GetReflection()->ReleaseLast( 217 message, descriptor->FindFieldByName("map_uint64_uint64"))); 218 result.push_back(message->GetReflection()->ReleaseLast( 219 message, descriptor->FindFieldByName("map_sint32_sint32"))); 220 result.push_back(message->GetReflection()->ReleaseLast( 221 message, descriptor->FindFieldByName("map_sint64_sint64"))); 222 result.push_back(message->GetReflection()->ReleaseLast( 223 message, descriptor->FindFieldByName("map_fixed32_fixed32"))); 224 result.push_back(message->GetReflection()->ReleaseLast( 225 message, descriptor->FindFieldByName("map_fixed64_fixed64"))); 226 result.push_back(message->GetReflection()->ReleaseLast( 227 message, descriptor->FindFieldByName("map_sfixed32_sfixed32"))); 228 result.push_back(message->GetReflection()->ReleaseLast( 229 message, descriptor->FindFieldByName("map_sfixed64_sfixed64"))); 230 result.push_back(message->GetReflection()->ReleaseLast( 231 message, descriptor->FindFieldByName("map_int32_float"))); 232 result.push_back(message->GetReflection()->ReleaseLast( 233 message, descriptor->FindFieldByName("map_int32_double"))); 234 result.push_back(message->GetReflection()->ReleaseLast( 235 message, descriptor->FindFieldByName("map_bool_bool"))); 236 result.push_back(message->GetReflection()->ReleaseLast( 237 message, descriptor->FindFieldByName("map_string_string"))); 238 result.push_back(message->GetReflection()->ReleaseLast( 239 message, descriptor->FindFieldByName("map_int32_bytes"))); 240 result.push_back(message->GetReflection()->ReleaseLast( 241 message, descriptor->FindFieldByName("map_int32_enum"))); 242 result.push_back(message->GetReflection()->ReleaseLast( 243 message, descriptor->FindFieldByName("map_int32_foreign_message"))); 244 245 return result; 246} 247 248} // namespace protobuf 249} // namespace google 250