• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc.  All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 //     * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 //     * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 //     * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 #ifndef GOOGLE_PROTOBUF_MAP_TEST_UTIL_H__
32 #define GOOGLE_PROTOBUF_MAP_TEST_UTIL_H__
33 
34 #include <google/protobuf/map_unittest.pb.h>
35 
36 namespace google {
37 namespace protobuf {
38 
39 namespace unittest = ::protobuf_unittest;
40 
41 class MapTestUtil {
42  public:
43   // Set every field in the TestMap message to a unique value.
44   static void SetMapFields(unittest::TestMap* message);
45 
46   // Set every field in the TestArenaMap message to a unique value.
47   static void SetArenaMapFields(unittest::TestArenaMap* message);
48 
49   // Set every field in the message to a default value.
50   static void SetMapFieldsInitialized(unittest::TestMap* message);
51 
52   // Modify all the map fields of the message (which should already have been
53   // initialized with SetMapFields()).
54   static void ModifyMapFields(unittest::TestMap* message);
55 
56   // Check that all fields have the values that they should have after
57   // SetMapFields() is called.
58   static void ExpectMapFieldsSet(const unittest::TestMap& message);
59 
60   // Check that all fields have the values that they should have after
61   // SetMapFields() is called for TestArenaMap.
62   static void ExpectArenaMapFieldsSet(const unittest::TestArenaMap& message);
63 
64   // Check that all fields have the values that they should have after
65   // SetMapFieldsInitialized() is called.
66   static void ExpectMapFieldsSetInitialized(const unittest::TestMap& message);
67 
68   // Expect that the message is modified as would be expected from
69   // ModifyMapFields().
70   static void ExpectMapFieldsModified(const unittest::TestMap& message);
71 
72   // Check that all fields are empty.
73   static void ExpectClear(const unittest::TestMap& message);
74 
75   // Check that all map fields have the given size.
76   static void ExpectMapsSize(const unittest::TestMap& message, int size);
77 
78   // Get pointers of map entries at given index.
79   static std::vector<const Message*> GetMapEntries(
80       const unittest::TestMap& message, int index);
81 
82   // Get pointers of map entries from release.
83   static std::vector<const Message*> GetMapEntriesFromRelease(
84       unittest::TestMap* message);
85 };
86 
87 // Like above, but use the reflection interface.
88 class MapReflectionTester {
89  public:
90   // base_descriptor must be a descriptor for TestMap, which is used for
91   // MapReflectionTester to fetch the FieldDescriptors needed to use the
92   // reflection interface.
93   explicit MapReflectionTester(const Descriptor* base_descriptor);
94 
95   void SetMapFieldsViaReflection(Message* message);
96   void SetMapFieldsViaMapReflection(Message* message);
97   void ClearMapFieldsViaReflection(Message* message);
98   void ModifyMapFieldsViaReflection(Message* message);
99   void RemoveLastMapsViaReflection(Message* message);
100   void ReleaseLastMapsViaReflection(Message* message);
101   void SwapMapsViaReflection(Message* message);
102   void MutableUnknownFieldsOfMapFieldsViaReflection(Message* message);
103   void ExpectMapFieldsSetViaReflection(const Message& message);
104   void ExpectMapFieldsSetViaReflectionIterator(Message* message);
105   void ExpectClearViaReflection(const Message& message);
106   void ExpectClearViaReflectionIterator(Message* message);
107   void GetMapValueViaMapReflection(Message* message,
108                                    const std::string& field_name,
109                                    const MapKey& map_key, MapValueRef* map_val);
110   Message* GetMapEntryViaReflection(Message* message,
111                                     const std::string& field_name, int index);
112   MapIterator MapBegin(Message* message, const std::string& field_name);
113   MapIterator MapEnd(Message* message, const std::string& field_name);
114 
115  private:
116   const FieldDescriptor* F(const std::string& name);
117 
118   const Descriptor* base_descriptor_;
119 
120   const EnumValueDescriptor* map_enum_bar_;
121   const EnumValueDescriptor* map_enum_baz_;
122   const EnumValueDescriptor* map_enum_foo_;
123 
124   const FieldDescriptor* foreign_c_;
125   const FieldDescriptor* map_int32_int32_key_;
126   const FieldDescriptor* map_int32_int32_val_;
127   const FieldDescriptor* map_int64_int64_key_;
128   const FieldDescriptor* map_int64_int64_val_;
129   const FieldDescriptor* map_uint32_uint32_key_;
130   const FieldDescriptor* map_uint32_uint32_val_;
131   const FieldDescriptor* map_uint64_uint64_key_;
132   const FieldDescriptor* map_uint64_uint64_val_;
133   const FieldDescriptor* map_sint32_sint32_key_;
134   const FieldDescriptor* map_sint32_sint32_val_;
135   const FieldDescriptor* map_sint64_sint64_key_;
136   const FieldDescriptor* map_sint64_sint64_val_;
137   const FieldDescriptor* map_fixed32_fixed32_key_;
138   const FieldDescriptor* map_fixed32_fixed32_val_;
139   const FieldDescriptor* map_fixed64_fixed64_key_;
140   const FieldDescriptor* map_fixed64_fixed64_val_;
141   const FieldDescriptor* map_sfixed32_sfixed32_key_;
142   const FieldDescriptor* map_sfixed32_sfixed32_val_;
143   const FieldDescriptor* map_sfixed64_sfixed64_key_;
144   const FieldDescriptor* map_sfixed64_sfixed64_val_;
145   const FieldDescriptor* map_int32_float_key_;
146   const FieldDescriptor* map_int32_float_val_;
147   const FieldDescriptor* map_int32_double_key_;
148   const FieldDescriptor* map_int32_double_val_;
149   const FieldDescriptor* map_bool_bool_key_;
150   const FieldDescriptor* map_bool_bool_val_;
151   const FieldDescriptor* map_string_string_key_;
152   const FieldDescriptor* map_string_string_val_;
153   const FieldDescriptor* map_int32_bytes_key_;
154   const FieldDescriptor* map_int32_bytes_val_;
155   const FieldDescriptor* map_int32_enum_key_;
156   const FieldDescriptor* map_int32_enum_val_;
157   const FieldDescriptor* map_int32_foreign_message_key_;
158   const FieldDescriptor* map_int32_foreign_message_val_;
159 };
160 
161 }  // namespace protobuf
162 }  // namespace google
163 
164 #endif  // GOOGLE_PROTOBUF_MAP_TEST_UTIL_H__
165