map_test_util.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. #ifndef GOOGLE_PROTOBUF_MAP_TEST_UTIL_H__
  31. #define GOOGLE_PROTOBUF_MAP_TEST_UTIL_H__
  32. #include <google/protobuf/map_unittest.pb.h>
  33. namespace google {
  34. namespace protobuf {
  35. namespace unittest = ::protobuf_unittest;
  36. class MapTestUtil {
  37. public:
  38. // Set every field in the TestMap message to a unique value.
  39. static void SetMapFields(unittest::TestMap* message);
  40. // Set every field in the TestArenaMap message to a unique value.
  41. static void SetArenaMapFields(unittest::TestArenaMap* message);
  42. // Set every field in the message to a default value.
  43. static void SetMapFieldsInitialized(unittest::TestMap* message);
  44. // Modify all the map fields of the message (which should already have been
  45. // initialized with SetMapFields()).
  46. static void ModifyMapFields(unittest::TestMap* message);
  47. // Check that all fields have the values that they should have after
  48. // SetMapFields() is called.
  49. static void ExpectMapFieldsSet(const unittest::TestMap& message);
  50. // Check that all fields have the values that they should have after
  51. // SetMapFields() is called for TestArenaMap.
  52. static void ExpectArenaMapFieldsSet(const unittest::TestArenaMap& message);
  53. // Check that all fields have the values that they should have after
  54. // SetMapFieldsInitialized() is called.
  55. static void ExpectMapFieldsSetInitialized(
  56. const unittest::TestMap& message);
  57. // Expect that the message is modified as would be expected from
  58. // ModifyMapFields().
  59. static void ExpectMapFieldsModified(const unittest::TestMap& message);
  60. // Check that all fields are empty.
  61. static void ExpectClear(const unittest::TestMap& message);
  62. // Check that all map fields have the given size.
  63. static void ExpectMapsSize(const unittest::TestMap& message, int size);
  64. // Get pointers of map entries at given index.
  65. static std::vector<const Message*> GetMapEntries(
  66. const unittest::TestMap& message, int index);
  67. // Get pointers of map entries from release.
  68. static std::vector<const Message*> GetMapEntriesFromRelease(
  69. unittest::TestMap* message);
  70. };
  71. // Like above, but use the reflection interface.
  72. class MapReflectionTester {
  73. public:
  74. // base_descriptor must be a descriptor for TestMap, which is used for
  75. // MapReflectionTester to fetch the FieldDescriptors needed to use the
  76. // reflection interface.
  77. explicit MapReflectionTester(const Descriptor* base_descriptor);
  78. void SetMapFieldsViaReflection(Message* message);
  79. void SetMapFieldsViaMapReflection(Message* message);
  80. void ClearMapFieldsViaReflection(Message* message);
  81. void ModifyMapFieldsViaReflection(Message* message);
  82. void RemoveLastMapsViaReflection(Message* message);
  83. void ReleaseLastMapsViaReflection(Message* message);
  84. void SwapMapsViaReflection(Message* message);
  85. void MutableUnknownFieldsOfMapFieldsViaReflection(Message* message);
  86. void ExpectMapFieldsSetViaReflection(const Message& message);
  87. void ExpectMapFieldsSetViaReflectionIterator(Message* message);
  88. void ExpectClearViaReflection(const Message& message);
  89. void ExpectClearViaReflectionIterator(Message* message);
  90. void ExpectMapEntryClearViaReflection(Message* message);
  91. void GetMapValueViaMapReflection(Message* message,
  92. const string& field_name,
  93. const MapKey& map_key, MapValueRef* map_val);
  94. Message* GetMapEntryViaReflection(Message* message, const string& field_name,
  95. int index);
  96. MapIterator MapBegin(Message* message, const string& field_name);
  97. MapIterator MapEnd(Message* message, const string& field_name);
  98. private:
  99. const FieldDescriptor* F(const string& name);
  100. const Descriptor* base_descriptor_;
  101. const EnumValueDescriptor* map_enum_bar_;
  102. const EnumValueDescriptor* map_enum_baz_;
  103. const EnumValueDescriptor* map_enum_foo_;
  104. const FieldDescriptor* foreign_c_;
  105. const FieldDescriptor* map_int32_int32_key_;
  106. const FieldDescriptor* map_int32_int32_val_;
  107. const FieldDescriptor* map_int64_int64_key_;
  108. const FieldDescriptor* map_int64_int64_val_;
  109. const FieldDescriptor* map_uint32_uint32_key_;
  110. const FieldDescriptor* map_uint32_uint32_val_;
  111. const FieldDescriptor* map_uint64_uint64_key_;
  112. const FieldDescriptor* map_uint64_uint64_val_;
  113. const FieldDescriptor* map_sint32_sint32_key_;
  114. const FieldDescriptor* map_sint32_sint32_val_;
  115. const FieldDescriptor* map_sint64_sint64_key_;
  116. const FieldDescriptor* map_sint64_sint64_val_;
  117. const FieldDescriptor* map_fixed32_fixed32_key_;
  118. const FieldDescriptor* map_fixed32_fixed32_val_;
  119. const FieldDescriptor* map_fixed64_fixed64_key_;
  120. const FieldDescriptor* map_fixed64_fixed64_val_;
  121. const FieldDescriptor* map_sfixed32_sfixed32_key_;
  122. const FieldDescriptor* map_sfixed32_sfixed32_val_;
  123. const FieldDescriptor* map_sfixed64_sfixed64_key_;
  124. const FieldDescriptor* map_sfixed64_sfixed64_val_;
  125. const FieldDescriptor* map_int32_float_key_;
  126. const FieldDescriptor* map_int32_float_val_;
  127. const FieldDescriptor* map_int32_double_key_;
  128. const FieldDescriptor* map_int32_double_val_;
  129. const FieldDescriptor* map_bool_bool_key_;
  130. const FieldDescriptor* map_bool_bool_val_;
  131. const FieldDescriptor* map_string_string_key_;
  132. const FieldDescriptor* map_string_string_val_;
  133. const FieldDescriptor* map_int32_bytes_key_;
  134. const FieldDescriptor* map_int32_bytes_val_;
  135. const FieldDescriptor* map_int32_enum_key_;
  136. const FieldDescriptor* map_int32_enum_val_;
  137. const FieldDescriptor* map_int32_foreign_message_key_;
  138. const FieldDescriptor* map_int32_foreign_message_val_;
  139. };
  140. } // namespace protobuf
  141. } // namespace google
  142. #endif // GOOGLE_PROTOBUF_MAP_TEST_UTIL_H__