• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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