protoc 2.6.1.1 → 2.6.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. checksums.yaml +4 -4
  2. data/ext/protoc/Makefile.in +10 -13
  3. data/ext/protoc/extconf.rb +0 -1
  4. data/ext/protoc/protobuf/CHANGES.txt +593 -0
  5. data/ext/protoc/protobuf/CONTRIBUTORS.txt +93 -0
  6. data/ext/protoc/protobuf/INSTALL.txt +237 -0
  7. data/ext/protoc/protobuf/LICENSE +33 -0
  8. data/ext/protoc/protobuf/Makefile.am +267 -0
  9. data/ext/protoc/protobuf/README.md +167 -0
  10. data/ext/protoc/protobuf/autogen.sh +41 -0
  11. data/ext/protoc/protobuf/benchmarks/ProtoBench.java +203 -0
  12. data/ext/protoc/protobuf/benchmarks/google_message1.dat +0 -0
  13. data/ext/protoc/protobuf/benchmarks/google_message2.dat +0 -0
  14. data/ext/protoc/protobuf/benchmarks/google_size.proto +136 -0
  15. data/ext/protoc/protobuf/benchmarks/google_speed.proto +136 -0
  16. data/ext/protoc/protobuf/benchmarks/readme.txt +50 -0
  17. data/ext/protoc/protobuf/configure.ac +159 -0
  18. data/ext/protoc/protobuf/editors/README.txt +5 -0
  19. data/ext/protoc/protobuf/editors/proto.vim +105 -0
  20. data/ext/protoc/protobuf/editors/protobuf-mode.el +220 -0
  21. data/ext/protoc/protobuf/examples/AddPerson.java +95 -0
  22. data/ext/protoc/protobuf/examples/ListPeople.java +50 -0
  23. data/ext/protoc/protobuf/examples/Makefile +58 -0
  24. data/ext/protoc/protobuf/examples/README.txt +29 -0
  25. data/ext/protoc/protobuf/examples/add_person.cc +95 -0
  26. data/ext/protoc/protobuf/examples/add_person.py +58 -0
  27. data/ext/protoc/protobuf/examples/addressbook.proto +30 -0
  28. data/ext/protoc/protobuf/examples/list_people.cc +68 -0
  29. data/ext/protoc/protobuf/examples/list_people.py +38 -0
  30. data/ext/protoc/protobuf/generate_descriptor_proto.sh +33 -0
  31. data/ext/protoc/protobuf/java/README.txt +96 -0
  32. data/ext/protoc/protobuf/java/pom.xml +217 -0
  33. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessage.java +466 -0
  34. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessageLite.java +355 -0
  35. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractParser.java +253 -0
  36. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingRpcChannel.java +51 -0
  37. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingService.java +64 -0
  38. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BoundedByteString.java +163 -0
  39. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ByteString.java +1022 -0
  40. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedInputStream.java +1311 -0
  41. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedOutputStream.java +1297 -0
  42. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Descriptors.java +2238 -0
  43. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/DynamicMessage.java +622 -0
  44. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Extension.java +96 -0
  45. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java +392 -0
  46. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java +185 -0
  47. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/FieldSet.java +907 -0
  48. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessage.java +2213 -0
  49. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java +949 -0
  50. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Internal.java +391 -0
  51. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java +122 -0
  52. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyField.java +154 -0
  53. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyFieldLite.java +176 -0
  54. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringArrayList.java +367 -0
  55. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringList.java +163 -0
  56. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LiteralByteString.java +362 -0
  57. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Message.java +244 -0
  58. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLite.java +320 -0
  59. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java +60 -0
  60. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageOrBuilder.java +143 -0
  61. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageReflection.java +931 -0
  62. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Parser.java +261 -0
  63. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java +58 -0
  64. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolStringList.java +48 -0
  65. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java +696 -0
  66. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RopeByteString.java +957 -0
  67. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcCallback.java +47 -0
  68. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcChannel.java +71 -0
  69. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcController.java +118 -0
  70. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcUtil.java +134 -0
  71. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Service.java +117 -0
  72. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ServiceException.java +52 -0
  73. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SingleFieldBuilder.java +241 -0
  74. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SmallSortedMap.java +618 -0
  75. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/TextFormat.java +1984 -0
  76. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UninitializedMessageException.java +99 -0
  77. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnknownFieldSet.java +995 -0
  78. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java +205 -0
  79. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Utf8.java +349 -0
  80. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/WireFormat.java +163 -0
  81. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java +527 -0
  82. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java +68 -0
  83. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ByteStringTest.java +759 -0
  84. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CheckUtf8Test.java +141 -0
  85. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java +769 -0
  86. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java +401 -0
  87. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java +80 -0
  88. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DescriptorsTest.java +735 -0
  89. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java +326 -0
  90. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java +48 -0
  91. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java +1515 -0
  92. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java +180 -0
  93. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java +421 -0
  94. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java +134 -0
  95. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldTest.java +121 -0
  96. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java +319 -0
  97. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java +174 -0
  98. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java +143 -0
  99. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java +85 -0
  100. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteTest.java +148 -0
  101. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java +396 -0
  102. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/MessageTest.java +353 -0
  103. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/NestedBuildersTest.java +185 -0
  104. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ParserTest.java +381 -0
  105. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java +190 -0
  106. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java +97 -0
  107. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringTest.java +115 -0
  108. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ServiceTest.java +320 -0
  109. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java +155 -0
  110. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java +420 -0
  111. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java +96 -0
  112. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestUtil.java +4124 -0
  113. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TextFormatTest.java +994 -0
  114. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java +653 -0
  115. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java +227 -0
  116. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/WireFormatTest.java +606 -0
  117. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto +61 -0
  118. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto +55 -0
  119. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/multiple_files_test.proto +77 -0
  120. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_builders_test.proto +53 -0
  121. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension.proto +46 -0
  122. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension_lite.proto +48 -0
  123. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension.proto +49 -0
  124. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto +50 -0
  125. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test.proto +38 -0
  126. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto +42 -0
  127. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto +43 -0
  128. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto +157 -0
  129. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8.proto +50 -0
  130. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto +51 -0
  131. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_custom_options.proto +43 -0
  132. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto +60 -0
  133. data/ext/protoc/protobuf/m4/ac_system_extensions.m4 +37 -0
  134. data/ext/protoc/protobuf/m4/acx_check_suncc.m4 +75 -0
  135. data/ext/protoc/protobuf/m4/acx_pthread.m4 +397 -0
  136. data/ext/protoc/protobuf/m4/stl_hash.m4 +72 -0
  137. data/ext/protoc/protobuf/more_tests/Makefile +41 -0
  138. data/ext/protoc/protobuf/post_process_dist.sh +60 -0
  139. data/ext/protoc/protobuf/protobuf-lite.pc.in +13 -0
  140. data/ext/protoc/protobuf/protobuf.pc.in +14 -0
  141. data/ext/protoc/protobuf/python/README.txt +105 -0
  142. data/ext/protoc/protobuf/python/ez_setup.py +284 -0
  143. data/ext/protoc/protobuf/python/google/__init__.py +1 -0
  144. data/ext/protoc/protobuf/python/google/protobuf/__init__.py +0 -0
  145. data/ext/protoc/protobuf/python/google/protobuf/descriptor.py +849 -0
  146. data/ext/protoc/protobuf/python/google/protobuf/descriptor_database.py +137 -0
  147. data/ext/protoc/protobuf/python/google/protobuf/descriptor_pool.py +643 -0
  148. data/ext/protoc/protobuf/python/google/protobuf/internal/__init__.py +0 -0
  149. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.cc +139 -0
  150. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.py +89 -0
  151. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation_default_test.py +63 -0
  152. data/ext/protoc/protobuf/python/google/protobuf/internal/containers.py +269 -0
  153. data/ext/protoc/protobuf/python/google/protobuf/internal/cpp_message.py +663 -0
  154. data/ext/protoc/protobuf/python/google/protobuf/internal/decoder.py +831 -0
  155. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_database_test.py +63 -0
  156. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test.py +564 -0
  157. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test1.proto +94 -0
  158. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test2.proto +70 -0
  159. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_python_test.py +54 -0
  160. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_test.py +669 -0
  161. data/ext/protoc/protobuf/python/google/protobuf/internal/encoder.py +788 -0
  162. data/ext/protoc/protobuf/python/google/protobuf/internal/enum_type_wrapper.py +89 -0
  163. data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test1.proto +57 -0
  164. data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test2.proto +92 -0
  165. data/ext/protoc/protobuf/python/google/protobuf/internal/generator_test.py +343 -0
  166. data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_python_test.py +54 -0
  167. data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_test.py +131 -0
  168. data/ext/protoc/protobuf/python/google/protobuf/internal/message_listener.py +78 -0
  169. data/ext/protoc/protobuf/python/google/protobuf/internal/message_python_test.py +54 -0
  170. data/ext/protoc/protobuf/python/google/protobuf/internal/message_test.py +681 -0
  171. data/ext/protoc/protobuf/python/google/protobuf/internal/missing_enum_values.proto +50 -0
  172. data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions.proto +58 -0
  173. data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions_dynamic.proto +49 -0
  174. data/ext/protoc/protobuf/python/google/protobuf/internal/more_messages.proto +51 -0
  175. data/ext/protoc/protobuf/python/google/protobuf/internal/python_message.py +1251 -0
  176. data/ext/protoc/protobuf/python/google/protobuf/internal/reflection_test.py +2934 -0
  177. data/ext/protoc/protobuf/python/google/protobuf/internal/service_reflection_test.py +136 -0
  178. data/ext/protoc/protobuf/python/google/protobuf/internal/symbol_database_test.py +120 -0
  179. data/ext/protoc/protobuf/python/google/protobuf/internal/test_bad_identifiers.proto +52 -0
  180. data/ext/protoc/protobuf/python/google/protobuf/internal/test_util.py +662 -0
  181. data/ext/protoc/protobuf/python/google/protobuf/internal/text_encoding_test.py +68 -0
  182. data/ext/protoc/protobuf/python/google/protobuf/internal/text_format_test.py +743 -0
  183. data/ext/protoc/protobuf/python/google/protobuf/internal/type_checkers.py +328 -0
  184. data/ext/protoc/protobuf/python/google/protobuf/internal/unknown_fields_test.py +231 -0
  185. data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format.py +268 -0
  186. data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format_test.py +253 -0
  187. data/ext/protoc/protobuf/python/google/protobuf/message.py +284 -0
  188. data/ext/protoc/protobuf/python/google/protobuf/message_factory.py +155 -0
  189. data/ext/protoc/protobuf/python/google/protobuf/pyext/README +6 -0
  190. data/ext/protoc/protobuf/python/google/protobuf/pyext/__init__.py +0 -0
  191. data/ext/protoc/protobuf/python/google/protobuf/pyext/cpp_message.py +61 -0
  192. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.cc +357 -0
  193. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.h +96 -0
  194. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor_cpp2_test.py +58 -0
  195. data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.cc +338 -0
  196. data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.h +123 -0
  197. data/ext/protoc/protobuf/python/google/protobuf/pyext/message.cc +2561 -0
  198. data/ext/protoc/protobuf/python/google/protobuf/pyext/message.h +305 -0
  199. data/ext/protoc/protobuf/python/google/protobuf/pyext/message_factory_cpp2_test.py +56 -0
  200. data/ext/protoc/protobuf/python/google/protobuf/pyext/proto2_api_test.proto +38 -0
  201. data/ext/protoc/protobuf/python/google/protobuf/pyext/python.proto +66 -0
  202. data/ext/protoc/protobuf/python/google/protobuf/pyext/python_protobuf.h +57 -0
  203. data/ext/protoc/protobuf/python/google/protobuf/pyext/reflection_cpp2_generated_test.py +94 -0
  204. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc +763 -0
  205. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.h +172 -0
  206. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.cc +825 -0
  207. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.h +112 -0
  208. data/ext/protoc/protobuf/python/google/protobuf/pyext/scoped_pyobject_ptr.h +95 -0
  209. data/ext/protoc/protobuf/python/google/protobuf/reflection.py +205 -0
  210. data/ext/protoc/protobuf/python/google/protobuf/service.py +226 -0
  211. data/ext/protoc/protobuf/python/google/protobuf/service_reflection.py +284 -0
  212. data/ext/protoc/protobuf/python/google/protobuf/symbol_database.py +185 -0
  213. data/ext/protoc/protobuf/python/google/protobuf/text_encoding.py +110 -0
  214. data/ext/protoc/protobuf/python/google/protobuf/text_format.py +873 -0
  215. data/ext/protoc/protobuf/python/mox.py +1401 -0
  216. data/ext/protoc/protobuf/python/setup.py +201 -0
  217. data/ext/protoc/protobuf/python/stubout.py +140 -0
  218. data/ext/protoc/protobuf/src/Makefile.am +418 -0
  219. data/ext/protoc/protobuf/src/google/protobuf/SEBS +240 -0
  220. data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.cc +84 -0
  221. data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.h +145 -0
  222. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.cc +1603 -0
  223. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.h +378 -0
  224. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc +1654 -0
  225. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc +158 -0
  226. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.cc +288 -0
  227. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.h +103 -0
  228. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.cc +431 -0
  229. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.h +122 -0
  230. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.cc +210 -0
  231. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.h +86 -0
  232. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.cc +166 -0
  233. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.h +185 -0
  234. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.cc +665 -0
  235. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.h +99 -0
  236. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.cc +125 -0
  237. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  238. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.cc +494 -0
  239. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.h +206 -0
  240. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.cc +2645 -0
  241. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.h +175 -0
  242. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.cc +375 -0
  243. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.h +121 -0
  244. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_options.h +58 -0
  245. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc +123 -0
  246. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc +451 -0
  247. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +123 -0
  248. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.cc +334 -0
  249. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  250. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.cc +642 -0
  251. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.h +127 -0
  252. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto +132 -0
  253. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc +2074 -0
  254. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.h +51 -0
  255. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.cc +480 -0
  256. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.h +317 -0
  257. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer_unittest.cc +617 -0
  258. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.cc +195 -0
  259. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.h +95 -0
  260. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.cc +233 -0
  261. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.h +69 -0
  262. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc +67 -0
  263. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.cc +333 -0
  264. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.h +99 -0
  265. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc +778 -0
  266. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.h +158 -0
  267. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.cc +207 -0
  268. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.h +109 -0
  269. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.cc +213 -0
  270. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.h +162 -0
  271. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.cc +534 -0
  272. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.h +115 -0
  273. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.cc +158 -0
  274. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.h +72 -0
  275. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.cc +77 -0
  276. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.h +101 -0
  277. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.cc +737 -0
  278. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.h +322 -0
  279. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.cc +826 -0
  280. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.h +121 -0
  281. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.cc +1666 -0
  282. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.h +140 -0
  283. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.cc +1343 -0
  284. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.h +173 -0
  285. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.cc +266 -0
  286. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.h +124 -0
  287. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_plugin_unittest.cc +124 -0
  288. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.cc +877 -0
  289. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.h +160 -0
  290. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.cc +473 -0
  291. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.h +135 -0
  292. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.cc +201 -0
  293. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.h +90 -0
  294. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.cc +1056 -0
  295. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.h +160 -0
  296. data/ext/protoc/protobuf/src/google/protobuf/compiler/main.cc +61 -0
  297. data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.cc +240 -0
  298. data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.h +117 -0
  299. data/ext/protoc/protobuf/src/google/protobuf/compiler/package_info.h +64 -0
  300. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.cc +1750 -0
  301. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.h +522 -0
  302. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser_unittest.cc +2612 -0
  303. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.cc +163 -0
  304. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.h +72 -0
  305. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.cc +1148 -0
  306. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.h +897 -0
  307. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.proto +147 -0
  308. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.cc +1262 -0
  309. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.h +166 -0
  310. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_plugin_unittest.cc +118 -0
  311. data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.cc +463 -0
  312. data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.h +108 -0
  313. data/ext/protoc/protobuf/src/google/protobuf/compiler/test_plugin.cc +51 -0
  314. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_output_unittest.sh +91 -0
  315. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.cc +218 -0
  316. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.h +93 -0
  317. data/ext/protoc/protobuf/src/google/protobuf/descriptor.cc +5420 -0
  318. data/ext/protoc/protobuf/src/google/protobuf/descriptor.h +1691 -0
  319. data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.cc +9135 -0
  320. data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.h +6761 -0
  321. data/ext/protoc/protobuf/src/google/protobuf/descriptor.proto +687 -0
  322. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.cc +543 -0
  323. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.h +369 -0
  324. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database_unittest.cc +748 -0
  325. data/ext/protoc/protobuf/src/google/protobuf/descriptor_pb2_test.py +54 -0
  326. data/ext/protoc/protobuf/src/google/protobuf/descriptor_unittest.cc +5501 -0
  327. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.cc +764 -0
  328. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.h +148 -0
  329. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message_unittest.cc +230 -0
  330. data/ext/protoc/protobuf/src/google/protobuf/extension_set.cc +1663 -0
  331. data/ext/protoc/protobuf/src/google/protobuf/extension_set.h +1234 -0
  332. data/ext/protoc/protobuf/src/google/protobuf/extension_set_heavy.cc +734 -0
  333. data/ext/protoc/protobuf/src/google/protobuf/extension_set_unittest.cc +1095 -0
  334. data/ext/protoc/protobuf/src/google/protobuf/generated_enum_reflection.h +91 -0
  335. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.cc +1683 -0
  336. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.h +504 -0
  337. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc +795 -0
  338. data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.cc +65 -0
  339. data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.h +113 -0
  340. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.cc +914 -0
  341. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.h +1220 -0
  342. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_inl.h +69 -0
  343. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_unittest.cc +1378 -0
  344. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.cc +326 -0
  345. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.h +209 -0
  346. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream_unittest.sh +44 -0
  347. data/ext/protoc/protobuf/src/google/protobuf/io/package_info.h +54 -0
  348. data/ext/protoc/protobuf/src/google/protobuf/io/printer.cc +198 -0
  349. data/ext/protoc/protobuf/src/google/protobuf/io/printer.h +136 -0
  350. data/ext/protoc/protobuf/src/google/protobuf/io/printer_unittest.cc +285 -0
  351. data/ext/protoc/protobuf/src/google/protobuf/io/strtod.cc +113 -0
  352. data/ext/protoc/protobuf/src/google/protobuf/io/strtod.h +50 -0
  353. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.cc +1127 -0
  354. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.h +402 -0
  355. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer_unittest.cc +999 -0
  356. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.cc +57 -0
  357. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.h +248 -0
  358. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +473 -0
  359. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +358 -0
  360. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +405 -0
  361. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +354 -0
  362. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_unittest.cc +965 -0
  363. data/ext/protoc/protobuf/src/google/protobuf/lite_unittest.cc +350 -0
  364. data/ext/protoc/protobuf/src/google/protobuf/message.cc +358 -0
  365. data/ext/protoc/protobuf/src/google/protobuf/message.h +866 -0
  366. data/ext/protoc/protobuf/src/google/protobuf/message_lite.cc +335 -0
  367. data/ext/protoc/protobuf/src/google/protobuf/message_lite.h +247 -0
  368. data/ext/protoc/protobuf/src/google/protobuf/message_unittest.cc +427 -0
  369. data/ext/protoc/protobuf/src/google/protobuf/package_info.h +64 -0
  370. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.cc +269 -0
  371. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.h +81 -0
  372. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops_unittest.cc +475 -0
  373. data/ext/protoc/protobuf/src/google/protobuf/repeated_field.cc +87 -0
  374. data/ext/protoc/protobuf/src/google/protobuf/repeated_field.h +1603 -0
  375. data/ext/protoc/protobuf/src/google/protobuf/repeated_field_reflection_unittest.cc +195 -0
  376. data/ext/protoc/protobuf/src/google/protobuf/repeated_field_unittest.cc +1442 -0
  377. data/ext/protoc/protobuf/src/google/protobuf/service.cc +46 -0
  378. data/ext/protoc/protobuf/src/google/protobuf/service.h +291 -0
  379. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops.h +227 -0
  380. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h +325 -0
  381. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_gcc.h +151 -0
  382. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_qnx.h +146 -0
  383. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h +122 -0
  384. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h +137 -0
  385. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_macosx.h +225 -0
  386. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_mips_gcc.h +313 -0
  387. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_pnacl.h +73 -0
  388. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_solaris.h +188 -0
  389. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_tsan.h +219 -0
  390. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc +137 -0
  391. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h +293 -0
  392. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc +112 -0
  393. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h +150 -0
  394. data/ext/protoc/protobuf/src/google/protobuf/stubs/common.cc +395 -0
  395. data/ext/protoc/protobuf/src/google/protobuf/stubs/common.h +1226 -0
  396. data/ext/protoc/protobuf/src/google/protobuf/stubs/common_unittest.cc +357 -0
  397. data/ext/protoc/protobuf/src/google/protobuf/stubs/hash.h +232 -0
  398. data/ext/protoc/protobuf/src/google/protobuf/stubs/map_util.h +771 -0
  399. data/ext/protoc/protobuf/src/google/protobuf/stubs/once.cc +99 -0
  400. data/ext/protoc/protobuf/src/google/protobuf/stubs/once.h +166 -0
  401. data/ext/protoc/protobuf/src/google/protobuf/stubs/once_unittest.cc +253 -0
  402. data/ext/protoc/protobuf/src/google/protobuf/stubs/platform_macros.h +103 -0
  403. data/ext/protoc/protobuf/src/google/protobuf/stubs/shared_ptr.h +470 -0
  404. data/ext/protoc/protobuf/src/google/protobuf/stubs/stl_util.h +121 -0
  405. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.cc +175 -0
  406. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.h +76 -0
  407. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf_unittest.cc +152 -0
  408. data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid.cc +536 -0
  409. data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid_unittest.cc +40 -0
  410. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.cc +1279 -0
  411. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.h +562 -0
  412. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil_unittest.cc +73 -0
  413. data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.cc +134 -0
  414. data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.h +170 -0
  415. data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util.h +138 -0
  416. data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util_unittest.cc +130 -0
  417. data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits.h +336 -0
  418. data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits_unittest.cc +628 -0
  419. data/ext/protoc/protobuf/src/google/protobuf/test_util.cc +3345 -0
  420. data/ext/protoc/protobuf/src/google/protobuf/test_util.h +215 -0
  421. data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.cc +1585 -0
  422. data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.h +101 -0
  423. data/ext/protoc/protobuf/src/google/protobuf/testdata/bad_utf8_string +1 -0
  424. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message +0 -0
  425. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message_oneof_implemented +0 -0
  426. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_packed_fields_message +0 -0
  427. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data.txt +134 -0
  428. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt +129 -0
  429. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy.txt +134 -0
  430. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt +129 -0
  431. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data.txt +134 -0
  432. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt +134 -0
  433. data/ext/protoc/protobuf/src/google/protobuf/testing/file.cc +194 -0
  434. data/ext/protoc/protobuf/src/google/protobuf/testing/file.h +97 -0
  435. data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.cc +255 -0
  436. data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.h +102 -0
  437. data/ext/protoc/protobuf/src/google/protobuf/testing/zcgunzip.cc +73 -0
  438. data/ext/protoc/protobuf/src/google/protobuf/testing/zcgzip.cc +79 -0
  439. data/ext/protoc/protobuf/src/google/protobuf/text_format.cc +1746 -0
  440. data/ext/protoc/protobuf/src/google/protobuf/text_format.h +473 -0
  441. data/ext/protoc/protobuf/src/google/protobuf/text_format_unittest.cc +1479 -0
  442. data/ext/protoc/protobuf/src/google/protobuf/unittest.proto +861 -0
  443. data/ext/protoc/protobuf/src/google/protobuf/unittest_custom_options.proto +393 -0
  444. data/ext/protoc/protobuf/src/google/protobuf/unittest_embed_optimize_for.proto +50 -0
  445. data/ext/protoc/protobuf/src/google/protobuf/unittest_empty.proto +37 -0
  446. data/ext/protoc/protobuf/src/google/protobuf/unittest_enormous_descriptor.proto +1046 -0
  447. data/ext/protoc/protobuf/src/google/protobuf/unittest_import.proto +64 -0
  448. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_lite.proto +51 -0
  449. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public.proto +40 -0
  450. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public_lite.proto +42 -0
  451. data/ext/protoc/protobuf/src/google/protobuf/unittest_lite.proto +384 -0
  452. data/ext/protoc/protobuf/src/google/protobuf/unittest_lite_imports_nonlite.proto +43 -0
  453. data/ext/protoc/protobuf/src/google/protobuf/unittest_mset.proto +83 -0
  454. data/ext/protoc/protobuf/src/google/protobuf/unittest_no_generic_services.proto +53 -0
  455. data/ext/protoc/protobuf/src/google/protobuf/unittest_optimize_for.proto +66 -0
  456. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.cc +265 -0
  457. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.h +318 -0
  458. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set_unittest.cc +599 -0
  459. data/ext/protoc/protobuf/src/google/protobuf/wire_format.cc +1101 -0
  460. data/ext/protoc/protobuf/src/google/protobuf/wire_format.h +336 -0
  461. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.cc +471 -0
  462. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.h +661 -0
  463. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite_inl.h +860 -0
  464. data/ext/protoc/protobuf/src/google/protobuf/wire_format_unittest.cc +1120 -0
  465. data/ext/protoc/protobuf/src/solaris/libstdc++.la +51 -0
  466. data/ext/protoc/protobuf/vsprojects/config.h +29 -0
  467. data/ext/protoc/protobuf/vsprojects/convert2008to2005.sh +20 -0
  468. data/ext/protoc/protobuf/vsprojects/extract_includes.bat +50 -0
  469. data/ext/protoc/protobuf/vsprojects/libprotobuf-lite.vcproj +302 -0
  470. data/ext/protoc/protobuf/vsprojects/libprotobuf.vcproj +470 -0
  471. data/ext/protoc/protobuf/vsprojects/libprotoc.vcproj +466 -0
  472. data/ext/protoc/protobuf/vsprojects/lite-test.vcproj +305 -0
  473. data/ext/protoc/protobuf/vsprojects/protobuf.sln +92 -0
  474. data/ext/protoc/protobuf/vsprojects/protoc.vcproj +192 -0
  475. data/ext/protoc/protobuf/vsprojects/readme.txt +114 -0
  476. data/ext/protoc/protobuf/vsprojects/test_plugin.vcproj +209 -0
  477. data/ext/protoc/protobuf/vsprojects/tests.vcproj +681 -0
  478. data/lib/protoc/version.rb +1 -1
  479. metadata +480 -3
@@ -0,0 +1,369 @@
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
+ // Author: kenton@google.com (Kenton Varda)
32
+ // Based on original Protocol Buffers design by
33
+ // Sanjay Ghemawat, Jeff Dean, and others.
34
+ //
35
+ // Interface for manipulating databases of descriptors.
36
+
37
+ #ifndef GOOGLE_PROTOBUF_DESCRIPTOR_DATABASE_H__
38
+ #define GOOGLE_PROTOBUF_DESCRIPTOR_DATABASE_H__
39
+
40
+ #include <map>
41
+ #include <string>
42
+ #include <utility>
43
+ #include <vector>
44
+ #include <google/protobuf/stubs/common.h>
45
+ #include <google/protobuf/descriptor.h>
46
+
47
+ namespace google {
48
+ namespace protobuf {
49
+
50
+ // Defined in this file.
51
+ class DescriptorDatabase;
52
+ class SimpleDescriptorDatabase;
53
+ class EncodedDescriptorDatabase;
54
+ class DescriptorPoolDatabase;
55
+ class MergedDescriptorDatabase;
56
+
57
+ // Abstract interface for a database of descriptors.
58
+ //
59
+ // This is useful if you want to create a DescriptorPool which loads
60
+ // descriptors on-demand from some sort of large database. If the database
61
+ // is large, it may be inefficient to enumerate every .proto file inside it
62
+ // calling DescriptorPool::BuildFile() for each one. Instead, a DescriptorPool
63
+ // can be created which wraps a DescriptorDatabase and only builds particular
64
+ // descriptors when they are needed.
65
+ class LIBPROTOBUF_EXPORT DescriptorDatabase {
66
+ public:
67
+ inline DescriptorDatabase() {}
68
+ virtual ~DescriptorDatabase();
69
+
70
+ // Find a file by file name. Fills in in *output and returns true if found.
71
+ // Otherwise, returns false, leaving the contents of *output undefined.
72
+ virtual bool FindFileByName(const string& filename,
73
+ FileDescriptorProto* output) = 0;
74
+
75
+ // Find the file that declares the given fully-qualified symbol name.
76
+ // If found, fills in *output and returns true, otherwise returns false
77
+ // and leaves *output undefined.
78
+ virtual bool FindFileContainingSymbol(const string& symbol_name,
79
+ FileDescriptorProto* output) = 0;
80
+
81
+ // Find the file which defines an extension extending the given message type
82
+ // with the given field number. If found, fills in *output and returns true,
83
+ // otherwise returns false and leaves *output undefined. containing_type
84
+ // must be a fully-qualified type name.
85
+ virtual bool FindFileContainingExtension(const string& containing_type,
86
+ int field_number,
87
+ FileDescriptorProto* output) = 0;
88
+
89
+ // Finds the tag numbers used by all known extensions of
90
+ // extendee_type, and appends them to output in an undefined
91
+ // order. This method is best-effort: it's not guaranteed that the
92
+ // database will find all extensions, and it's not guaranteed that
93
+ // FindFileContainingExtension will return true on all of the found
94
+ // numbers. Returns true if the search was successful, otherwise
95
+ // returns false and leaves output unchanged.
96
+ //
97
+ // This method has a default implementation that always returns
98
+ // false.
99
+ virtual bool FindAllExtensionNumbers(const string& /* extendee_type */,
100
+ vector<int>* /* output */) {
101
+ return false;
102
+ }
103
+
104
+
105
+ private:
106
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorDatabase);
107
+ };
108
+
109
+ // A DescriptorDatabase into which you can insert files manually.
110
+ //
111
+ // FindFileContainingSymbol() is fully-implemented. When you add a file, its
112
+ // symbols will be indexed for this purpose. Note that the implementation
113
+ // may return false positives, but only if it isn't possible for the symbol
114
+ // to be defined in any other file. In particular, if a file defines a symbol
115
+ // "Foo", then searching for "Foo.[anything]" will match that file. This way,
116
+ // the database does not need to aggressively index all children of a symbol.
117
+ //
118
+ // FindFileContainingExtension() is mostly-implemented. It works if and only
119
+ // if the original FieldDescriptorProto defining the extension has a
120
+ // fully-qualified type name in its "extendee" field (i.e. starts with a '.').
121
+ // If the extendee is a relative name, SimpleDescriptorDatabase will not
122
+ // attempt to resolve the type, so it will not know what type the extension is
123
+ // extending. Therefore, calling FindFileContainingExtension() with the
124
+ // extension's containing type will never actually find that extension. Note
125
+ // that this is an unlikely problem, as all FileDescriptorProtos created by the
126
+ // protocol compiler (as well as ones created by calling
127
+ // FileDescriptor::CopyTo()) will always use fully-qualified names for all
128
+ // types. You only need to worry if you are constructing FileDescriptorProtos
129
+ // yourself, or are calling compiler::Parser directly.
130
+ class LIBPROTOBUF_EXPORT SimpleDescriptorDatabase : public DescriptorDatabase {
131
+ public:
132
+ SimpleDescriptorDatabase();
133
+ ~SimpleDescriptorDatabase();
134
+
135
+ // Adds the FileDescriptorProto to the database, making a copy. The object
136
+ // can be deleted after Add() returns. Returns false if the file conflicted
137
+ // with a file already in the database, in which case an error will have
138
+ // been written to GOOGLE_LOG(ERROR).
139
+ bool Add(const FileDescriptorProto& file);
140
+
141
+ // Adds the FileDescriptorProto to the database and takes ownership of it.
142
+ bool AddAndOwn(const FileDescriptorProto* file);
143
+
144
+ // implements DescriptorDatabase -----------------------------------
145
+ bool FindFileByName(const string& filename,
146
+ FileDescriptorProto* output);
147
+ bool FindFileContainingSymbol(const string& symbol_name,
148
+ FileDescriptorProto* output);
149
+ bool FindFileContainingExtension(const string& containing_type,
150
+ int field_number,
151
+ FileDescriptorProto* output);
152
+ bool FindAllExtensionNumbers(const string& extendee_type,
153
+ vector<int>* output);
154
+
155
+ private:
156
+ // So that it can use DescriptorIndex.
157
+ friend class EncodedDescriptorDatabase;
158
+
159
+ // An index mapping file names, symbol names, and extension numbers to
160
+ // some sort of values.
161
+ template <typename Value>
162
+ class DescriptorIndex {
163
+ public:
164
+ // Helpers to recursively add particular descriptors and all their contents
165
+ // to the index.
166
+ bool AddFile(const FileDescriptorProto& file,
167
+ Value value);
168
+ bool AddSymbol(const string& name, Value value);
169
+ bool AddNestedExtensions(const DescriptorProto& message_type,
170
+ Value value);
171
+ bool AddExtension(const FieldDescriptorProto& field,
172
+ Value value);
173
+
174
+ Value FindFile(const string& filename);
175
+ Value FindSymbol(const string& name);
176
+ Value FindExtension(const string& containing_type, int field_number);
177
+ bool FindAllExtensionNumbers(const string& containing_type,
178
+ vector<int>* output);
179
+
180
+ private:
181
+ map<string, Value> by_name_;
182
+ map<string, Value> by_symbol_;
183
+ map<pair<string, int>, Value> by_extension_;
184
+
185
+ // Invariant: The by_symbol_ map does not contain any symbols which are
186
+ // prefixes of other symbols in the map. For example, "foo.bar" is a
187
+ // prefix of "foo.bar.baz" (but is not a prefix of "foo.barbaz").
188
+ //
189
+ // This invariant is important because it means that given a symbol name,
190
+ // we can find a key in the map which is a prefix of the symbol in O(lg n)
191
+ // time, and we know that there is at most one such key.
192
+ //
193
+ // The prefix lookup algorithm works like so:
194
+ // 1) Find the last key in the map which is less than or equal to the
195
+ // search key.
196
+ // 2) If the found key is a prefix of the search key, then return it.
197
+ // Otherwise, there is no match.
198
+ //
199
+ // I am sure this algorithm has been described elsewhere, but since I
200
+ // wasn't able to find it quickly I will instead prove that it works
201
+ // myself. The key to the algorithm is that if a match exists, step (1)
202
+ // will find it. Proof:
203
+ // 1) Define the "search key" to be the key we are looking for, the "found
204
+ // key" to be the key found in step (1), and the "match key" to be the
205
+ // key which actually matches the serach key (i.e. the key we're trying
206
+ // to find).
207
+ // 2) The found key must be less than or equal to the search key by
208
+ // definition.
209
+ // 3) The match key must also be less than or equal to the search key
210
+ // (because it is a prefix).
211
+ // 4) The match key cannot be greater than the found key, because if it
212
+ // were, then step (1) of the algorithm would have returned the match
213
+ // key instead (since it finds the *greatest* key which is less than or
214
+ // equal to the search key).
215
+ // 5) Therefore, the found key must be between the match key and the search
216
+ // key, inclusive.
217
+ // 6) Since the search key must be a sub-symbol of the match key, if it is
218
+ // not equal to the match key, then search_key[match_key.size()] must
219
+ // be '.'.
220
+ // 7) Since '.' sorts before any other character that is valid in a symbol
221
+ // name, then if the found key is not equal to the match key, then
222
+ // found_key[match_key.size()] must also be '.', because any other value
223
+ // would make it sort after the search key.
224
+ // 8) Therefore, if the found key is not equal to the match key, then the
225
+ // found key must be a sub-symbol of the match key. However, this would
226
+ // contradict our map invariant which says that no symbol in the map is
227
+ // a sub-symbol of any other.
228
+ // 9) Therefore, the found key must match the match key.
229
+ //
230
+ // The above proof assumes the match key exists. In the case that the
231
+ // match key does not exist, then step (1) will return some other symbol.
232
+ // That symbol cannot be a super-symbol of the search key since if it were,
233
+ // then it would be a match, and we're assuming the match key doesn't exist.
234
+ // Therefore, step 2 will correctly return no match.
235
+
236
+ // Find the last entry in the by_symbol_ map whose key is less than or
237
+ // equal to the given name.
238
+ typename map<string, Value>::iterator FindLastLessOrEqual(
239
+ const string& name);
240
+
241
+ // True if either the arguments are equal or super_symbol identifies a
242
+ // parent symbol of sub_symbol (e.g. "foo.bar" is a parent of
243
+ // "foo.bar.baz", but not a parent of "foo.barbaz").
244
+ bool IsSubSymbol(const string& sub_symbol, const string& super_symbol);
245
+
246
+ // Returns true if and only if all characters in the name are alphanumerics,
247
+ // underscores, or periods.
248
+ bool ValidateSymbolName(const string& name);
249
+ };
250
+
251
+
252
+ DescriptorIndex<const FileDescriptorProto*> index_;
253
+ vector<const FileDescriptorProto*> files_to_delete_;
254
+
255
+ // If file is non-NULL, copy it into *output and return true, otherwise
256
+ // return false.
257
+ bool MaybeCopy(const FileDescriptorProto* file,
258
+ FileDescriptorProto* output);
259
+
260
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SimpleDescriptorDatabase);
261
+ };
262
+
263
+ // Very similar to SimpleDescriptorDatabase, but stores all the descriptors
264
+ // as raw bytes and generally tries to use as little memory as possible.
265
+ //
266
+ // The same caveats regarding FindFileContainingExtension() apply as with
267
+ // SimpleDescriptorDatabase.
268
+ class LIBPROTOBUF_EXPORT EncodedDescriptorDatabase : public DescriptorDatabase {
269
+ public:
270
+ EncodedDescriptorDatabase();
271
+ ~EncodedDescriptorDatabase();
272
+
273
+ // Adds the FileDescriptorProto to the database. The descriptor is provided
274
+ // in encoded form. The database does not make a copy of the bytes, nor
275
+ // does it take ownership; it's up to the caller to make sure the bytes
276
+ // remain valid for the life of the database. Returns false and logs an error
277
+ // if the bytes are not a valid FileDescriptorProto or if the file conflicted
278
+ // with a file already in the database.
279
+ bool Add(const void* encoded_file_descriptor, int size);
280
+
281
+ // Like Add(), but makes a copy of the data, so that the caller does not
282
+ // need to keep it around.
283
+ bool AddCopy(const void* encoded_file_descriptor, int size);
284
+
285
+ // Like FindFileContainingSymbol but returns only the name of the file.
286
+ bool FindNameOfFileContainingSymbol(const string& symbol_name,
287
+ string* output);
288
+
289
+ // implements DescriptorDatabase -----------------------------------
290
+ bool FindFileByName(const string& filename,
291
+ FileDescriptorProto* output);
292
+ bool FindFileContainingSymbol(const string& symbol_name,
293
+ FileDescriptorProto* output);
294
+ bool FindFileContainingExtension(const string& containing_type,
295
+ int field_number,
296
+ FileDescriptorProto* output);
297
+ bool FindAllExtensionNumbers(const string& extendee_type,
298
+ vector<int>* output);
299
+
300
+ private:
301
+ SimpleDescriptorDatabase::DescriptorIndex<pair<const void*, int> > index_;
302
+ vector<void*> files_to_delete_;
303
+
304
+ // If encoded_file.first is non-NULL, parse the data into *output and return
305
+ // true, otherwise return false.
306
+ bool MaybeParse(pair<const void*, int> encoded_file,
307
+ FileDescriptorProto* output);
308
+
309
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EncodedDescriptorDatabase);
310
+ };
311
+
312
+ // A DescriptorDatabase that fetches files from a given pool.
313
+ class LIBPROTOBUF_EXPORT DescriptorPoolDatabase : public DescriptorDatabase {
314
+ public:
315
+ DescriptorPoolDatabase(const DescriptorPool& pool);
316
+ ~DescriptorPoolDatabase();
317
+
318
+ // implements DescriptorDatabase -----------------------------------
319
+ bool FindFileByName(const string& filename,
320
+ FileDescriptorProto* output);
321
+ bool FindFileContainingSymbol(const string& symbol_name,
322
+ FileDescriptorProto* output);
323
+ bool FindFileContainingExtension(const string& containing_type,
324
+ int field_number,
325
+ FileDescriptorProto* output);
326
+ bool FindAllExtensionNumbers(const string& extendee_type,
327
+ vector<int>* output);
328
+
329
+ private:
330
+ const DescriptorPool& pool_;
331
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorPoolDatabase);
332
+ };
333
+
334
+ // A DescriptorDatabase that wraps two or more others. It first searches the
335
+ // first database and, if that fails, tries the second, and so on.
336
+ class LIBPROTOBUF_EXPORT MergedDescriptorDatabase : public DescriptorDatabase {
337
+ public:
338
+ // Merge just two databases. The sources remain property of the caller.
339
+ MergedDescriptorDatabase(DescriptorDatabase* source1,
340
+ DescriptorDatabase* source2);
341
+ // Merge more than two databases. The sources remain property of the caller.
342
+ // The vector may be deleted after the constructor returns but the
343
+ // DescriptorDatabases need to stick around.
344
+ MergedDescriptorDatabase(const vector<DescriptorDatabase*>& sources);
345
+ ~MergedDescriptorDatabase();
346
+
347
+ // implements DescriptorDatabase -----------------------------------
348
+ bool FindFileByName(const string& filename,
349
+ FileDescriptorProto* output);
350
+ bool FindFileContainingSymbol(const string& symbol_name,
351
+ FileDescriptorProto* output);
352
+ bool FindFileContainingExtension(const string& containing_type,
353
+ int field_number,
354
+ FileDescriptorProto* output);
355
+ // Merges the results of calling all databases. Returns true iff any
356
+ // of the databases returned true.
357
+ bool FindAllExtensionNumbers(const string& extendee_type,
358
+ vector<int>* output);
359
+
360
+
361
+ private:
362
+ vector<DescriptorDatabase*> sources_;
363
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MergedDescriptorDatabase);
364
+ };
365
+
366
+ } // namespace protobuf
367
+
368
+ } // namespace google
369
+ #endif // GOOGLE_PROTOBUF_DESCRIPTOR_DATABASE_H__
@@ -0,0 +1,748 @@
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
+ // Author: kenton@google.com (Kenton Varda)
32
+ // Based on original Protocol Buffers design by
33
+ // Sanjay Ghemawat, Jeff Dean, and others.
34
+ //
35
+ // This file makes extensive use of RFC 3092. :)
36
+
37
+ #include <algorithm>
38
+
39
+ #include <google/protobuf/descriptor_database.h>
40
+ #include <google/protobuf/descriptor.h>
41
+ #include <google/protobuf/descriptor.pb.h>
42
+ #include <google/protobuf/text_format.h>
43
+ #include <google/protobuf/stubs/strutil.h>
44
+
45
+ #include <google/protobuf/stubs/common.h>
46
+ #include <google/protobuf/testing/googletest.h>
47
+ #include <gtest/gtest.h>
48
+
49
+ namespace google {
50
+ namespace protobuf {
51
+ namespace {
52
+
53
+ static void AddToDatabase(SimpleDescriptorDatabase* database,
54
+ const char* file_text) {
55
+ FileDescriptorProto file_proto;
56
+ EXPECT_TRUE(TextFormat::ParseFromString(file_text, &file_proto));
57
+ database->Add(file_proto);
58
+ }
59
+
60
+ static void ExpectContainsType(const FileDescriptorProto& proto,
61
+ const string& type_name) {
62
+ for (int i = 0; i < proto.message_type_size(); i++) {
63
+ if (proto.message_type(i).name() == type_name) return;
64
+ }
65
+ ADD_FAILURE() << "\"" << proto.name()
66
+ << "\" did not contain expected type \""
67
+ << type_name << "\".";
68
+ }
69
+
70
+ // ===================================================================
71
+
72
+ #if GTEST_HAS_PARAM_TEST
73
+
74
+ // SimpleDescriptorDatabase, EncodedDescriptorDatabase, and
75
+ // DescriptorPoolDatabase call for very similar tests. Instead of writing
76
+ // three nearly-identical sets of tests, we use parameterized tests to apply
77
+ // the same code to all three.
78
+
79
+ // The parameterized test runs against a DescriptarDatabaseTestCase. We have
80
+ // implementations for each of the three classes we want to test.
81
+ class DescriptorDatabaseTestCase {
82
+ public:
83
+ virtual ~DescriptorDatabaseTestCase() {}
84
+
85
+ virtual DescriptorDatabase* GetDatabase() = 0;
86
+ virtual bool AddToDatabase(const FileDescriptorProto& file) = 0;
87
+ };
88
+
89
+ // Factory function type.
90
+ typedef DescriptorDatabaseTestCase* DescriptorDatabaseTestCaseFactory();
91
+
92
+ // Specialization for SimpleDescriptorDatabase.
93
+ class SimpleDescriptorDatabaseTestCase : public DescriptorDatabaseTestCase {
94
+ public:
95
+ static DescriptorDatabaseTestCase* New() {
96
+ return new SimpleDescriptorDatabaseTestCase;
97
+ }
98
+
99
+ virtual ~SimpleDescriptorDatabaseTestCase() {}
100
+
101
+ virtual DescriptorDatabase* GetDatabase() {
102
+ return &database_;
103
+ }
104
+ virtual bool AddToDatabase(const FileDescriptorProto& file) {
105
+ return database_.Add(file);
106
+ }
107
+
108
+ private:
109
+ SimpleDescriptorDatabase database_;
110
+ };
111
+
112
+ // Specialization for EncodedDescriptorDatabase.
113
+ class EncodedDescriptorDatabaseTestCase : public DescriptorDatabaseTestCase {
114
+ public:
115
+ static DescriptorDatabaseTestCase* New() {
116
+ return new EncodedDescriptorDatabaseTestCase;
117
+ }
118
+
119
+ virtual ~EncodedDescriptorDatabaseTestCase() {}
120
+
121
+ virtual DescriptorDatabase* GetDatabase() {
122
+ return &database_;
123
+ }
124
+ virtual bool AddToDatabase(const FileDescriptorProto& file) {
125
+ string data;
126
+ file.SerializeToString(&data);
127
+ return database_.AddCopy(data.data(), data.size());
128
+ }
129
+
130
+ private:
131
+ EncodedDescriptorDatabase database_;
132
+ };
133
+
134
+ // Specialization for DescriptorPoolDatabase.
135
+ class DescriptorPoolDatabaseTestCase : public DescriptorDatabaseTestCase {
136
+ public:
137
+ static DescriptorDatabaseTestCase* New() {
138
+ return new EncodedDescriptorDatabaseTestCase;
139
+ }
140
+
141
+ DescriptorPoolDatabaseTestCase() : database_(pool_) {}
142
+ virtual ~DescriptorPoolDatabaseTestCase() {}
143
+
144
+ virtual DescriptorDatabase* GetDatabase() {
145
+ return &database_;
146
+ }
147
+ virtual bool AddToDatabase(const FileDescriptorProto& file) {
148
+ return pool_.BuildFile(file);
149
+ }
150
+
151
+ private:
152
+ DescriptorPool pool_;
153
+ DescriptorPoolDatabase database_;
154
+ };
155
+
156
+ // -------------------------------------------------------------------
157
+
158
+ class DescriptorDatabaseTest
159
+ : public testing::TestWithParam<DescriptorDatabaseTestCaseFactory*> {
160
+ protected:
161
+ virtual void SetUp() {
162
+ test_case_.reset(GetParam()());
163
+ database_ = test_case_->GetDatabase();
164
+ }
165
+
166
+ void AddToDatabase(const char* file_descriptor_text) {
167
+ FileDescriptorProto file_proto;
168
+ EXPECT_TRUE(TextFormat::ParseFromString(file_descriptor_text, &file_proto));
169
+ EXPECT_TRUE(test_case_->AddToDatabase(file_proto));
170
+ }
171
+
172
+ void AddToDatabaseWithError(const char* file_descriptor_text) {
173
+ FileDescriptorProto file_proto;
174
+ EXPECT_TRUE(TextFormat::ParseFromString(file_descriptor_text, &file_proto));
175
+ EXPECT_FALSE(test_case_->AddToDatabase(file_proto));
176
+ }
177
+
178
+ scoped_ptr<DescriptorDatabaseTestCase> test_case_;
179
+ DescriptorDatabase* database_;
180
+ };
181
+
182
+ TEST_P(DescriptorDatabaseTest, FindFileByName) {
183
+ AddToDatabase(
184
+ "name: \"foo.proto\" "
185
+ "message_type { name:\"Foo\" }");
186
+ AddToDatabase(
187
+ "name: \"bar.proto\" "
188
+ "message_type { name:\"Bar\" }");
189
+
190
+ {
191
+ FileDescriptorProto file;
192
+ EXPECT_TRUE(database_->FindFileByName("foo.proto", &file));
193
+ EXPECT_EQ("foo.proto", file.name());
194
+ ExpectContainsType(file, "Foo");
195
+ }
196
+
197
+ {
198
+ FileDescriptorProto file;
199
+ EXPECT_TRUE(database_->FindFileByName("bar.proto", &file));
200
+ EXPECT_EQ("bar.proto", file.name());
201
+ ExpectContainsType(file, "Bar");
202
+ }
203
+
204
+ {
205
+ // Fails to find undefined files.
206
+ FileDescriptorProto file;
207
+ EXPECT_FALSE(database_->FindFileByName("baz.proto", &file));
208
+ }
209
+ }
210
+
211
+ TEST_P(DescriptorDatabaseTest, FindFileContainingSymbol) {
212
+ AddToDatabase(
213
+ "name: \"foo.proto\" "
214
+ "message_type { "
215
+ " name: \"Foo\" "
216
+ " field { name:\"qux\" }"
217
+ " nested_type { name: \"Grault\" } "
218
+ " enum_type { name: \"Garply\" } "
219
+ "} "
220
+ "enum_type { "
221
+ " name: \"Waldo\" "
222
+ " value { name:\"FRED\" } "
223
+ "} "
224
+ "extension { name: \"plugh\" } "
225
+ "service { "
226
+ " name: \"Xyzzy\" "
227
+ " method { name: \"Thud\" } "
228
+ "}"
229
+ );
230
+ AddToDatabase(
231
+ "name: \"bar.proto\" "
232
+ "package: \"corge\" "
233
+ "message_type { name: \"Bar\" }");
234
+
235
+ {
236
+ FileDescriptorProto file;
237
+ EXPECT_TRUE(database_->FindFileContainingSymbol("Foo", &file));
238
+ EXPECT_EQ("foo.proto", file.name());
239
+ }
240
+
241
+ {
242
+ // Can find fields.
243
+ FileDescriptorProto file;
244
+ EXPECT_TRUE(database_->FindFileContainingSymbol("Foo.qux", &file));
245
+ EXPECT_EQ("foo.proto", file.name());
246
+ }
247
+
248
+ {
249
+ // Can find nested types.
250
+ FileDescriptorProto file;
251
+ EXPECT_TRUE(database_->FindFileContainingSymbol("Foo.Grault", &file));
252
+ EXPECT_EQ("foo.proto", file.name());
253
+ }
254
+
255
+ {
256
+ // Can find nested enums.
257
+ FileDescriptorProto file;
258
+ EXPECT_TRUE(database_->FindFileContainingSymbol("Foo.Garply", &file));
259
+ EXPECT_EQ("foo.proto", file.name());
260
+ }
261
+
262
+ {
263
+ // Can find enum types.
264
+ FileDescriptorProto file;
265
+ EXPECT_TRUE(database_->FindFileContainingSymbol("Waldo", &file));
266
+ EXPECT_EQ("foo.proto", file.name());
267
+ }
268
+
269
+ {
270
+ // Can find enum values.
271
+ FileDescriptorProto file;
272
+ EXPECT_TRUE(database_->FindFileContainingSymbol("Waldo.FRED", &file));
273
+ EXPECT_EQ("foo.proto", file.name());
274
+ }
275
+
276
+ {
277
+ // Can find extensions.
278
+ FileDescriptorProto file;
279
+ EXPECT_TRUE(database_->FindFileContainingSymbol("plugh", &file));
280
+ EXPECT_EQ("foo.proto", file.name());
281
+ }
282
+
283
+ {
284
+ // Can find services.
285
+ FileDescriptorProto file;
286
+ EXPECT_TRUE(database_->FindFileContainingSymbol("Xyzzy", &file));
287
+ EXPECT_EQ("foo.proto", file.name());
288
+ }
289
+
290
+ {
291
+ // Can find methods.
292
+ FileDescriptorProto file;
293
+ EXPECT_TRUE(database_->FindFileContainingSymbol("Xyzzy.Thud", &file));
294
+ EXPECT_EQ("foo.proto", file.name());
295
+ }
296
+
297
+ {
298
+ // Can find things in packages.
299
+ FileDescriptorProto file;
300
+ EXPECT_TRUE(database_->FindFileContainingSymbol("corge.Bar", &file));
301
+ EXPECT_EQ("bar.proto", file.name());
302
+ }
303
+
304
+ {
305
+ // Fails to find undefined symbols.
306
+ FileDescriptorProto file;
307
+ EXPECT_FALSE(database_->FindFileContainingSymbol("Baz", &file));
308
+ }
309
+
310
+ {
311
+ // Names must be fully-qualified.
312
+ FileDescriptorProto file;
313
+ EXPECT_FALSE(database_->FindFileContainingSymbol("Bar", &file));
314
+ }
315
+ }
316
+
317
+ TEST_P(DescriptorDatabaseTest, FindFileContainingExtension) {
318
+ AddToDatabase(
319
+ "name: \"foo.proto\" "
320
+ "message_type { "
321
+ " name: \"Foo\" "
322
+ " extension_range { start: 1 end: 1000 } "
323
+ " extension { name:\"qux\" label:LABEL_OPTIONAL type:TYPE_INT32 number:5 "
324
+ " extendee: \".Foo\" }"
325
+ "}");
326
+ AddToDatabase(
327
+ "name: \"bar.proto\" "
328
+ "package: \"corge\" "
329
+ "dependency: \"foo.proto\" "
330
+ "message_type { "
331
+ " name: \"Bar\" "
332
+ " extension_range { start: 1 end: 1000 } "
333
+ "} "
334
+ "extension { name:\"grault\" extendee: \".Foo\" number:32 } "
335
+ "extension { name:\"garply\" extendee: \".corge.Bar\" number:70 } "
336
+ "extension { name:\"waldo\" extendee: \"Bar\" number:56 } ");
337
+
338
+ {
339
+ FileDescriptorProto file;
340
+ EXPECT_TRUE(database_->FindFileContainingExtension("Foo", 5, &file));
341
+ EXPECT_EQ("foo.proto", file.name());
342
+ }
343
+
344
+ {
345
+ FileDescriptorProto file;
346
+ EXPECT_TRUE(database_->FindFileContainingExtension("Foo", 32, &file));
347
+ EXPECT_EQ("bar.proto", file.name());
348
+ }
349
+
350
+ {
351
+ // Can find extensions for qualified type names.
352
+ FileDescriptorProto file;
353
+ EXPECT_TRUE(database_->FindFileContainingExtension("corge.Bar", 70, &file));
354
+ EXPECT_EQ("bar.proto", file.name());
355
+ }
356
+
357
+ {
358
+ // Can't find extensions whose extendee was not fully-qualified in the
359
+ // FileDescriptorProto.
360
+ FileDescriptorProto file;
361
+ EXPECT_FALSE(database_->FindFileContainingExtension("Bar", 56, &file));
362
+ EXPECT_FALSE(
363
+ database_->FindFileContainingExtension("corge.Bar", 56, &file));
364
+ }
365
+
366
+ {
367
+ // Can't find non-existent extension numbers.
368
+ FileDescriptorProto file;
369
+ EXPECT_FALSE(database_->FindFileContainingExtension("Foo", 12, &file));
370
+ }
371
+
372
+ {
373
+ // Can't find extensions for non-existent types.
374
+ FileDescriptorProto file;
375
+ EXPECT_FALSE(
376
+ database_->FindFileContainingExtension("NoSuchType", 5, &file));
377
+ }
378
+
379
+ {
380
+ // Can't find extensions for unqualified type names.
381
+ FileDescriptorProto file;
382
+ EXPECT_FALSE(database_->FindFileContainingExtension("Bar", 70, &file));
383
+ }
384
+ }
385
+
386
+ TEST_P(DescriptorDatabaseTest, FindAllExtensionNumbers) {
387
+ AddToDatabase(
388
+ "name: \"foo.proto\" "
389
+ "message_type { "
390
+ " name: \"Foo\" "
391
+ " extension_range { start: 1 end: 1000 } "
392
+ " extension { name:\"qux\" label:LABEL_OPTIONAL type:TYPE_INT32 number:5 "
393
+ " extendee: \".Foo\" }"
394
+ "}");
395
+ AddToDatabase(
396
+ "name: \"bar.proto\" "
397
+ "package: \"corge\" "
398
+ "dependency: \"foo.proto\" "
399
+ "message_type { "
400
+ " name: \"Bar\" "
401
+ " extension_range { start: 1 end: 1000 } "
402
+ "} "
403
+ "extension { name:\"grault\" extendee: \".Foo\" number:32 } "
404
+ "extension { name:\"garply\" extendee: \".corge.Bar\" number:70 } "
405
+ "extension { name:\"waldo\" extendee: \"Bar\" number:56 } ");
406
+
407
+ {
408
+ vector<int> numbers;
409
+ EXPECT_TRUE(database_->FindAllExtensionNumbers("Foo", &numbers));
410
+ ASSERT_EQ(2, numbers.size());
411
+ sort(numbers.begin(), numbers.end());
412
+ EXPECT_EQ(5, numbers[0]);
413
+ EXPECT_EQ(32, numbers[1]);
414
+ }
415
+
416
+ {
417
+ vector<int> numbers;
418
+ EXPECT_TRUE(database_->FindAllExtensionNumbers("corge.Bar", &numbers));
419
+ // Note: won't find extension 56 due to the name not being fully qualified.
420
+ ASSERT_EQ(1, numbers.size());
421
+ EXPECT_EQ(70, numbers[0]);
422
+ }
423
+
424
+ {
425
+ // Can't find extensions for non-existent types.
426
+ vector<int> numbers;
427
+ EXPECT_FALSE(database_->FindAllExtensionNumbers("NoSuchType", &numbers));
428
+ }
429
+
430
+ {
431
+ // Can't find extensions for unqualified types.
432
+ vector<int> numbers;
433
+ EXPECT_FALSE(database_->FindAllExtensionNumbers("Bar", &numbers));
434
+ }
435
+ }
436
+
437
+ TEST_P(DescriptorDatabaseTest, ConflictingFileError) {
438
+ AddToDatabase(
439
+ "name: \"foo.proto\" "
440
+ "message_type { "
441
+ " name: \"Foo\" "
442
+ "}");
443
+ AddToDatabaseWithError(
444
+ "name: \"foo.proto\" "
445
+ "message_type { "
446
+ " name: \"Bar\" "
447
+ "}");
448
+ }
449
+
450
+ TEST_P(DescriptorDatabaseTest, ConflictingTypeError) {
451
+ AddToDatabase(
452
+ "name: \"foo.proto\" "
453
+ "message_type { "
454
+ " name: \"Foo\" "
455
+ "}");
456
+ AddToDatabaseWithError(
457
+ "name: \"bar.proto\" "
458
+ "message_type { "
459
+ " name: \"Foo\" "
460
+ "}");
461
+ }
462
+
463
+ TEST_P(DescriptorDatabaseTest, ConflictingExtensionError) {
464
+ AddToDatabase(
465
+ "name: \"foo.proto\" "
466
+ "extension { name:\"foo\" label:LABEL_OPTIONAL type:TYPE_INT32 number:5 "
467
+ " extendee: \".Foo\" }");
468
+ AddToDatabaseWithError(
469
+ "name: \"bar.proto\" "
470
+ "extension { name:\"bar\" label:LABEL_OPTIONAL type:TYPE_INT32 number:5 "
471
+ " extendee: \".Foo\" }");
472
+ }
473
+
474
+ INSTANTIATE_TEST_CASE_P(Simple, DescriptorDatabaseTest,
475
+ testing::Values(&SimpleDescriptorDatabaseTestCase::New));
476
+ INSTANTIATE_TEST_CASE_P(MemoryConserving, DescriptorDatabaseTest,
477
+ testing::Values(&EncodedDescriptorDatabaseTestCase::New));
478
+ INSTANTIATE_TEST_CASE_P(Pool, DescriptorDatabaseTest,
479
+ testing::Values(&DescriptorPoolDatabaseTestCase::New));
480
+
481
+ #endif // GTEST_HAS_PARAM_TEST
482
+
483
+ TEST(EncodedDescriptorDatabaseExtraTest, FindNameOfFileContainingSymbol) {
484
+ // Create two files, one of which is in two parts.
485
+ FileDescriptorProto file1, file2a, file2b;
486
+ file1.set_name("foo.proto");
487
+ file1.set_package("foo");
488
+ file1.add_message_type()->set_name("Foo");
489
+ file2a.set_name("bar.proto");
490
+ file2b.set_package("bar");
491
+ file2b.add_message_type()->set_name("Bar");
492
+
493
+ // Normal serialization allows our optimization to kick in.
494
+ string data1 = file1.SerializeAsString();
495
+
496
+ // Force out-of-order serialization to test slow path.
497
+ string data2 = file2b.SerializeAsString() + file2a.SerializeAsString();
498
+
499
+ // Create EncodedDescriptorDatabase containing both files.
500
+ EncodedDescriptorDatabase db;
501
+ db.Add(data1.data(), data1.size());
502
+ db.Add(data2.data(), data2.size());
503
+
504
+ // Test!
505
+ string filename;
506
+ EXPECT_TRUE(db.FindNameOfFileContainingSymbol("foo.Foo", &filename));
507
+ EXPECT_EQ("foo.proto", filename);
508
+ EXPECT_TRUE(db.FindNameOfFileContainingSymbol("foo.Foo.Blah", &filename));
509
+ EXPECT_EQ("foo.proto", filename);
510
+ EXPECT_TRUE(db.FindNameOfFileContainingSymbol("bar.Bar", &filename));
511
+ EXPECT_EQ("bar.proto", filename);
512
+ EXPECT_FALSE(db.FindNameOfFileContainingSymbol("foo", &filename));
513
+ EXPECT_FALSE(db.FindNameOfFileContainingSymbol("bar", &filename));
514
+ EXPECT_FALSE(db.FindNameOfFileContainingSymbol("baz.Baz", &filename));
515
+ }
516
+
517
+ // ===================================================================
518
+
519
+ class MergedDescriptorDatabaseTest : public testing::Test {
520
+ protected:
521
+ MergedDescriptorDatabaseTest()
522
+ : forward_merged_(&database1_, &database2_),
523
+ reverse_merged_(&database2_, &database1_) {}
524
+
525
+ virtual void SetUp() {
526
+ AddToDatabase(&database1_,
527
+ "name: \"foo.proto\" "
528
+ "message_type { name:\"Foo\" extension_range { start: 1 end: 100 } } "
529
+ "extension { name:\"foo_ext\" extendee: \".Foo\" number:3 "
530
+ " label:LABEL_OPTIONAL type:TYPE_INT32 } ");
531
+ AddToDatabase(&database2_,
532
+ "name: \"bar.proto\" "
533
+ "message_type { name:\"Bar\" extension_range { start: 1 end: 100 } } "
534
+ "extension { name:\"bar_ext\" extendee: \".Bar\" number:5 "
535
+ " label:LABEL_OPTIONAL type:TYPE_INT32 } ");
536
+
537
+ // baz.proto exists in both pools, with different definitions.
538
+ AddToDatabase(&database1_,
539
+ "name: \"baz.proto\" "
540
+ "message_type { name:\"Baz\" extension_range { start: 1 end: 100 } } "
541
+ "message_type { name:\"FromPool1\" } "
542
+ "extension { name:\"baz_ext\" extendee: \".Baz\" number:12 "
543
+ " label:LABEL_OPTIONAL type:TYPE_INT32 } "
544
+ "extension { name:\"database1_only_ext\" extendee: \".Baz\" number:13 "
545
+ " label:LABEL_OPTIONAL type:TYPE_INT32 } ");
546
+ AddToDatabase(&database2_,
547
+ "name: \"baz.proto\" "
548
+ "message_type { name:\"Baz\" extension_range { start: 1 end: 100 } } "
549
+ "message_type { name:\"FromPool2\" } "
550
+ "extension { name:\"baz_ext\" extendee: \".Baz\" number:12 "
551
+ " label:LABEL_OPTIONAL type:TYPE_INT32 } ");
552
+ }
553
+
554
+ SimpleDescriptorDatabase database1_;
555
+ SimpleDescriptorDatabase database2_;
556
+
557
+ MergedDescriptorDatabase forward_merged_;
558
+ MergedDescriptorDatabase reverse_merged_;
559
+ };
560
+
561
+ TEST_F(MergedDescriptorDatabaseTest, FindFileByName) {
562
+ {
563
+ // Can find file that is only in database1_.
564
+ FileDescriptorProto file;
565
+ EXPECT_TRUE(forward_merged_.FindFileByName("foo.proto", &file));
566
+ EXPECT_EQ("foo.proto", file.name());
567
+ ExpectContainsType(file, "Foo");
568
+ }
569
+
570
+ {
571
+ // Can find file that is only in database2_.
572
+ FileDescriptorProto file;
573
+ EXPECT_TRUE(forward_merged_.FindFileByName("bar.proto", &file));
574
+ EXPECT_EQ("bar.proto", file.name());
575
+ ExpectContainsType(file, "Bar");
576
+ }
577
+
578
+ {
579
+ // In forward_merged_, database1_'s baz.proto takes precedence.
580
+ FileDescriptorProto file;
581
+ EXPECT_TRUE(forward_merged_.FindFileByName("baz.proto", &file));
582
+ EXPECT_EQ("baz.proto", file.name());
583
+ ExpectContainsType(file, "FromPool1");
584
+ }
585
+
586
+ {
587
+ // In reverse_merged_, database2_'s baz.proto takes precedence.
588
+ FileDescriptorProto file;
589
+ EXPECT_TRUE(reverse_merged_.FindFileByName("baz.proto", &file));
590
+ EXPECT_EQ("baz.proto", file.name());
591
+ ExpectContainsType(file, "FromPool2");
592
+ }
593
+
594
+ {
595
+ // Can't find non-existent file.
596
+ FileDescriptorProto file;
597
+ EXPECT_FALSE(forward_merged_.FindFileByName("no_such.proto", &file));
598
+ }
599
+ }
600
+
601
+ TEST_F(MergedDescriptorDatabaseTest, FindFileContainingSymbol) {
602
+ {
603
+ // Can find file that is only in database1_.
604
+ FileDescriptorProto file;
605
+ EXPECT_TRUE(forward_merged_.FindFileContainingSymbol("Foo", &file));
606
+ EXPECT_EQ("foo.proto", file.name());
607
+ ExpectContainsType(file, "Foo");
608
+ }
609
+
610
+ {
611
+ // Can find file that is only in database2_.
612
+ FileDescriptorProto file;
613
+ EXPECT_TRUE(forward_merged_.FindFileContainingSymbol("Bar", &file));
614
+ EXPECT_EQ("bar.proto", file.name());
615
+ ExpectContainsType(file, "Bar");
616
+ }
617
+
618
+ {
619
+ // In forward_merged_, database1_'s baz.proto takes precedence.
620
+ FileDescriptorProto file;
621
+ EXPECT_TRUE(forward_merged_.FindFileContainingSymbol("Baz", &file));
622
+ EXPECT_EQ("baz.proto", file.name());
623
+ ExpectContainsType(file, "FromPool1");
624
+ }
625
+
626
+ {
627
+ // In reverse_merged_, database2_'s baz.proto takes precedence.
628
+ FileDescriptorProto file;
629
+ EXPECT_TRUE(reverse_merged_.FindFileContainingSymbol("Baz", &file));
630
+ EXPECT_EQ("baz.proto", file.name());
631
+ ExpectContainsType(file, "FromPool2");
632
+ }
633
+
634
+ {
635
+ // FromPool1 only shows up in forward_merged_ because it is masked by
636
+ // database2_'s baz.proto in reverse_merged_.
637
+ FileDescriptorProto file;
638
+ EXPECT_TRUE(forward_merged_.FindFileContainingSymbol("FromPool1", &file));
639
+ EXPECT_FALSE(reverse_merged_.FindFileContainingSymbol("FromPool1", &file));
640
+ }
641
+
642
+ {
643
+ // Can't find non-existent symbol.
644
+ FileDescriptorProto file;
645
+ EXPECT_FALSE(
646
+ forward_merged_.FindFileContainingSymbol("NoSuchType", &file));
647
+ }
648
+ }
649
+
650
+ TEST_F(MergedDescriptorDatabaseTest, FindFileContainingExtension) {
651
+ {
652
+ // Can find file that is only in database1_.
653
+ FileDescriptorProto file;
654
+ EXPECT_TRUE(
655
+ forward_merged_.FindFileContainingExtension("Foo", 3, &file));
656
+ EXPECT_EQ("foo.proto", file.name());
657
+ ExpectContainsType(file, "Foo");
658
+ }
659
+
660
+ {
661
+ // Can find file that is only in database2_.
662
+ FileDescriptorProto file;
663
+ EXPECT_TRUE(
664
+ forward_merged_.FindFileContainingExtension("Bar", 5, &file));
665
+ EXPECT_EQ("bar.proto", file.name());
666
+ ExpectContainsType(file, "Bar");
667
+ }
668
+
669
+ {
670
+ // In forward_merged_, database1_'s baz.proto takes precedence.
671
+ FileDescriptorProto file;
672
+ EXPECT_TRUE(
673
+ forward_merged_.FindFileContainingExtension("Baz", 12, &file));
674
+ EXPECT_EQ("baz.proto", file.name());
675
+ ExpectContainsType(file, "FromPool1");
676
+ }
677
+
678
+ {
679
+ // In reverse_merged_, database2_'s baz.proto takes precedence.
680
+ FileDescriptorProto file;
681
+ EXPECT_TRUE(
682
+ reverse_merged_.FindFileContainingExtension("Baz", 12, &file));
683
+ EXPECT_EQ("baz.proto", file.name());
684
+ ExpectContainsType(file, "FromPool2");
685
+ }
686
+
687
+ {
688
+ // Baz's extension 13 only shows up in forward_merged_ because it is
689
+ // masked by database2_'s baz.proto in reverse_merged_.
690
+ FileDescriptorProto file;
691
+ EXPECT_TRUE(forward_merged_.FindFileContainingExtension("Baz", 13, &file));
692
+ EXPECT_FALSE(reverse_merged_.FindFileContainingExtension("Baz", 13, &file));
693
+ }
694
+
695
+ {
696
+ // Can't find non-existent extension.
697
+ FileDescriptorProto file;
698
+ EXPECT_FALSE(
699
+ forward_merged_.FindFileContainingExtension("Foo", 6, &file));
700
+ }
701
+ }
702
+
703
+ TEST_F(MergedDescriptorDatabaseTest, FindAllExtensionNumbers) {
704
+ {
705
+ // Message only has extension in database1_
706
+ vector<int> numbers;
707
+ EXPECT_TRUE(forward_merged_.FindAllExtensionNumbers("Foo", &numbers));
708
+ ASSERT_EQ(1, numbers.size());
709
+ EXPECT_EQ(3, numbers[0]);
710
+ }
711
+
712
+ {
713
+ // Message only has extension in database2_
714
+ vector<int> numbers;
715
+ EXPECT_TRUE(forward_merged_.FindAllExtensionNumbers("Bar", &numbers));
716
+ ASSERT_EQ(1, numbers.size());
717
+ EXPECT_EQ(5, numbers[0]);
718
+ }
719
+
720
+ {
721
+ // Merge results from the two databases.
722
+ vector<int> numbers;
723
+ EXPECT_TRUE(forward_merged_.FindAllExtensionNumbers("Baz", &numbers));
724
+ ASSERT_EQ(2, numbers.size());
725
+ sort(numbers.begin(), numbers.end());
726
+ EXPECT_EQ(12, numbers[0]);
727
+ EXPECT_EQ(13, numbers[1]);
728
+ }
729
+
730
+ {
731
+ vector<int> numbers;
732
+ EXPECT_TRUE(reverse_merged_.FindAllExtensionNumbers("Baz", &numbers));
733
+ ASSERT_EQ(2, numbers.size());
734
+ sort(numbers.begin(), numbers.end());
735
+ EXPECT_EQ(12, numbers[0]);
736
+ EXPECT_EQ(13, numbers[1]);
737
+ }
738
+
739
+ {
740
+ // Can't find extensions for a non-existent message.
741
+ vector<int> numbers;
742
+ EXPECT_FALSE(reverse_merged_.FindAllExtensionNumbers("Blah", &numbers));
743
+ }
744
+ }
745
+
746
+ } // anonymous namespace
747
+ } // namespace protobuf
748
+ } // namespace google