protobuf 2.2.5-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (256) hide show
  1. data/.gitignore +17 -0
  2. data/.travis.yml +9 -0
  3. data/.yardopts +5 -0
  4. data/Gemfile +3 -0
  5. data/README.md +316 -0
  6. data/Rakefile +29 -0
  7. data/UPGRADING.md +60 -0
  8. data/bin/rpc_server +5 -0
  9. data/bin/rprotoc +62 -0
  10. data/examples/addressbook.pb.rb +55 -0
  11. data/examples/addressbook.proto +24 -0
  12. data/examples/reading_a_message.rb +32 -0
  13. data/examples/writing_a_message.rb +46 -0
  14. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/code_generator.h +142 -0
  15. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/command_line_interface.h +318 -0
  16. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum.h +99 -0
  17. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum_field.h +103 -0
  18. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_extension.h +85 -0
  19. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_field.h +167 -0
  20. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_file.h +98 -0
  21. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  22. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_helpers.h +159 -0
  23. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message.h +170 -0
  24. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message_field.h +102 -0
  25. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +103 -0
  26. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  27. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_string_field.h +104 -0
  28. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h +2721 -0
  29. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/importer.h +303 -0
  30. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum.h +84 -0
  31. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum_field.h +121 -0
  32. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_extension.h +77 -0
  33. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_field.h +108 -0
  34. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_file.h +101 -0
  35. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_generator.h +72 -0
  36. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_helpers.h +213 -0
  37. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message.h +109 -0
  38. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message_field.h +134 -0
  39. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_primitive_field.h +121 -0
  40. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_service.h +113 -0
  41. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_string_field.h +120 -0
  42. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/mock_code_generator.h +113 -0
  43. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/package_info.h +64 -0
  44. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/parser.h +434 -0
  45. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.h +73 -0
  46. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.pb.h +790 -0
  47. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/python/python_generator.h +156 -0
  48. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/subprocess.h +108 -0
  49. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/zip_writer.h +93 -0
  50. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.h +1367 -0
  51. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.pb.h +5223 -0
  52. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor_database.h +366 -0
  53. data/ext/protobuf-2.4.1/src/google/protobuf/dynamic_message.h +136 -0
  54. data/ext/protobuf-2.4.1/src/google/protobuf/extension_set.h +904 -0
  55. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_reflection.h +424 -0
  56. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_util.h +82 -0
  57. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream.h +1102 -0
  58. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream_inl.h +64 -0
  59. data/ext/protobuf-2.4.1/src/google/protobuf/io/gzip_stream.h +207 -0
  60. data/ext/protobuf-2.4.1/src/google/protobuf/io/package_info.h +54 -0
  61. data/ext/protobuf-2.4.1/src/google/protobuf/io/printer.h +136 -0
  62. data/ext/protobuf-2.4.1/src/google/protobuf/io/tokenizer.h +313 -0
  63. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream.h +238 -0
  64. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl.h +357 -0
  65. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl_lite.h +340 -0
  66. data/ext/protobuf-2.4.1/src/google/protobuf/message.h +692 -0
  67. data/ext/protobuf-2.4.1/src/google/protobuf/message_lite.h +239 -0
  68. data/ext/protobuf-2.4.1/src/google/protobuf/package_info.h +64 -0
  69. data/ext/protobuf-2.4.1/src/google/protobuf/reflection_ops.h +80 -0
  70. data/ext/protobuf-2.4.1/src/google/protobuf/repeated_field.h +1295 -0
  71. data/ext/protobuf-2.4.1/src/google/protobuf/service.h +291 -0
  72. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/common.h +1211 -0
  73. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/hash.h +220 -0
  74. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/map-util.h +119 -0
  75. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/once.h +123 -0
  76. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/stl_util-inl.h +121 -0
  77. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/strutil.h +457 -0
  78. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/substitute.h +170 -0
  79. data/ext/protobuf-2.4.1/src/google/protobuf/test_util.h +174 -0
  80. data/ext/protobuf-2.4.1/src/google/protobuf/test_util_lite.h +101 -0
  81. data/ext/protobuf-2.4.1/src/google/protobuf/testing/file.h +83 -0
  82. data/ext/protobuf-2.4.1/src/google/protobuf/testing/googletest.h +98 -0
  83. data/ext/protobuf-2.4.1/src/google/protobuf/text_format.h +285 -0
  84. data/ext/protobuf-2.4.1/src/google/protobuf/unittest.pb.h +11915 -0
  85. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_custom_options.pb.h +2895 -0
  86. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_embed_optimize_for.pb.h +211 -0
  87. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_empty.pb.h +56 -0
  88. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import.pb.h +188 -0
  89. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import_lite.pb.h +151 -0
  90. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite.pb.h +4752 -0
  91. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.h +150 -0
  92. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_mset.pb.h +816 -0
  93. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_no_generic_services.pb.h +197 -0
  94. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_optimize_for.pb.h +403 -0
  95. data/ext/protobuf-2.4.1/src/google/protobuf/unknown_field_set.h +268 -0
  96. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format.h +304 -0
  97. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite.h +620 -0
  98. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite_inl.h +774 -0
  99. data/ext/ruby_generator/Makefile +10 -0
  100. data/ext/ruby_generator/RubyGenerator.cpp +450 -0
  101. data/ext/ruby_generator/RubyGenerator.h +199 -0
  102. data/ext/ruby_generator/extconf.rb +36 -0
  103. data/ext/ruby_generator/protoc-ruby +0 -0
  104. data/lib/protobuf/cli.rb +188 -0
  105. data/lib/protobuf/enum.rb +58 -0
  106. data/lib/protobuf/enum_value.rb +59 -0
  107. data/lib/protobuf/evented.rb +22 -0
  108. data/lib/protobuf/exceptions.rb +11 -0
  109. data/lib/protobuf/ext/eventmachine.rb +14 -0
  110. data/lib/protobuf/field/base_field.rb +240 -0
  111. data/lib/protobuf/field/bool_field.rb +36 -0
  112. data/lib/protobuf/field/bytes_field.rb +38 -0
  113. data/lib/protobuf/field/double_field.rb +19 -0
  114. data/lib/protobuf/field/enum_field.rb +50 -0
  115. data/lib/protobuf/field/extension_fields.rb +32 -0
  116. data/lib/protobuf/field/field_array.rb +65 -0
  117. data/lib/protobuf/field/fixed32_field.rb +19 -0
  118. data/lib/protobuf/field/fixed64_field.rb +22 -0
  119. data/lib/protobuf/field/float_field.rb +31 -0
  120. data/lib/protobuf/field/int32_field.rb +12 -0
  121. data/lib/protobuf/field/int64_field.rb +12 -0
  122. data/lib/protobuf/field/integer_field.rb +19 -0
  123. data/lib/protobuf/field/message_field.rb +53 -0
  124. data/lib/protobuf/field/sfixed32_field.rb +21 -0
  125. data/lib/protobuf/field/sfixed64_field.rb +24 -0
  126. data/lib/protobuf/field/signed_integer_field.rb +23 -0
  127. data/lib/protobuf/field/sint32_field.rb +12 -0
  128. data/lib/protobuf/field/sint64_field.rb +12 -0
  129. data/lib/protobuf/field/string_field.rb +14 -0
  130. data/lib/protobuf/field/uint32_field.rb +12 -0
  131. data/lib/protobuf/field/uint64_field.rb +12 -0
  132. data/lib/protobuf/field/varint_field.rb +61 -0
  133. data/lib/protobuf/field.rb +57 -0
  134. data/lib/protobuf/logger.rb +86 -0
  135. data/lib/protobuf/message/decoder.rb +83 -0
  136. data/lib/protobuf/message/encoder.rb +48 -0
  137. data/lib/protobuf/message/extend.rb +8 -0
  138. data/lib/protobuf/message/message.rb +1 -0
  139. data/lib/protobuf/message.rb +320 -0
  140. data/lib/protobuf/rpc/buffer.rb +79 -0
  141. data/lib/protobuf/rpc/client.rb +166 -0
  142. data/lib/protobuf/rpc/connector.rb +19 -0
  143. data/lib/protobuf/rpc/connectors/base.rb +38 -0
  144. data/lib/protobuf/rpc/connectors/common.rb +156 -0
  145. data/lib/protobuf/rpc/connectors/em_client.rb +84 -0
  146. data/lib/protobuf/rpc/connectors/eventmachine.rb +87 -0
  147. data/lib/protobuf/rpc/connectors/socket.rb +73 -0
  148. data/lib/protobuf/rpc/connectors/zmq.rb +69 -0
  149. data/lib/protobuf/rpc/error/client_error.rb +31 -0
  150. data/lib/protobuf/rpc/error/server_error.rb +43 -0
  151. data/lib/protobuf/rpc/error.rb +25 -0
  152. data/lib/protobuf/rpc/rpc.pb.rb +118 -0
  153. data/lib/protobuf/rpc/server.rb +89 -0
  154. data/lib/protobuf/rpc/servers/evented/server.rb +41 -0
  155. data/lib/protobuf/rpc/servers/evented_runner.rb +21 -0
  156. data/lib/protobuf/rpc/servers/socket/server.rb +111 -0
  157. data/lib/protobuf/rpc/servers/socket/worker.rb +66 -0
  158. data/lib/protobuf/rpc/servers/socket_runner.rb +27 -0
  159. data/lib/protobuf/rpc/servers/zmq/broker.rb +87 -0
  160. data/lib/protobuf/rpc/servers/zmq/server.rb +50 -0
  161. data/lib/protobuf/rpc/servers/zmq/util.rb +27 -0
  162. data/lib/protobuf/rpc/servers/zmq/worker.rb +60 -0
  163. data/lib/protobuf/rpc/servers/zmq_runner.rb +25 -0
  164. data/lib/protobuf/rpc/service.rb +173 -0
  165. data/lib/protobuf/rpc/service_dispatcher.rb +130 -0
  166. data/lib/protobuf/rpc/service_filters.rb +267 -0
  167. data/lib/protobuf/rpc/stat.rb +83 -0
  168. data/lib/protobuf/socket.rb +22 -0
  169. data/lib/protobuf/version.rb +4 -0
  170. data/lib/protobuf/wire_type.rb +10 -0
  171. data/lib/protobuf/zmq.rb +21 -0
  172. data/lib/protobuf.rb +86 -0
  173. data/proto/rpc.pb.rb +48 -0
  174. data/proto/rpc.proto +73 -0
  175. data/protobuf.gemspec +44 -0
  176. data/spec/benchmark/tasks.rb +179 -0
  177. data/spec/functional/embedded_service_spec.rb +7 -0
  178. data/spec/functional/evented_server_spec.rb +64 -0
  179. data/spec/functional/socket_server_spec.rb +58 -0
  180. data/spec/functional/zmq_server_spec.rb +58 -0
  181. data/spec/lib/protobuf/cli_spec.rb +212 -0
  182. data/spec/lib/protobuf/enum_spec.rb +98 -0
  183. data/spec/lib/protobuf/enum_value_spec.rb +15 -0
  184. data/spec/lib/protobuf/logger_spec.rb +131 -0
  185. data/spec/lib/protobuf/message/encoder_spec.rb +19 -0
  186. data/spec/lib/protobuf/message_spec.rb +209 -0
  187. data/spec/lib/protobuf/rpc/client_spec.rb +158 -0
  188. data/spec/lib/protobuf/rpc/connector_spec.rb +32 -0
  189. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +50 -0
  190. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +128 -0
  191. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +36 -0
  192. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +22 -0
  193. data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +18 -0
  194. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +43 -0
  195. data/spec/lib/protobuf/rpc/servers/zmq/broker_spec.rb +35 -0
  196. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +41 -0
  197. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +45 -0
  198. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +44 -0
  199. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +116 -0
  200. data/spec/lib/protobuf/rpc/service_filters_spec.rb +451 -0
  201. data/spec/lib/protobuf/rpc/service_spec.rb +165 -0
  202. data/spec/lib/protobuf_spec.rb +62 -0
  203. data/spec/spec_helper.rb +51 -0
  204. data/spec/support/all.rb +6 -0
  205. data/spec/support/server.rb +101 -0
  206. data/spec/support/test/enum.pb.rb +34 -0
  207. data/spec/support/test/enum.proto +12 -0
  208. data/spec/support/test/resource.pb.rb +58 -0
  209. data/spec/support/test/resource.proto +31 -0
  210. data/spec/support/test/resource_service.rb +14 -0
  211. data/spec/support/test_app_file.rb +2 -0
  212. data/spec/support/tolerance_matcher.rb +40 -0
  213. data/test/data/data.bin +3 -0
  214. data/test/data/data_source.py +14 -0
  215. data/test/data/types.bin +0 -0
  216. data/test/data/types_source.py +22 -0
  217. data/test/data/unk.png +0 -0
  218. data/test/proto/addressbook.pb.rb +66 -0
  219. data/test/proto/addressbook.proto +33 -0
  220. data/test/proto/addressbook_base.pb.rb +58 -0
  221. data/test/proto/addressbook_base.proto +26 -0
  222. data/test/proto/addressbook_ext.pb.rb +20 -0
  223. data/test/proto/addressbook_ext.proto +6 -0
  224. data/test/proto/collision.pb.rb +17 -0
  225. data/test/proto/collision.proto +5 -0
  226. data/test/proto/ext_collision.pb.rb +24 -0
  227. data/test/proto/ext_collision.proto +8 -0
  228. data/test/proto/ext_range.pb.rb +22 -0
  229. data/test/proto/ext_range.proto +7 -0
  230. data/test/proto/float_default.proto +10 -0
  231. data/test/proto/lowercase.pb.rb +30 -0
  232. data/test/proto/lowercase.proto +9 -0
  233. data/test/proto/merge.pb.rb +39 -0
  234. data/test/proto/merge.proto +15 -0
  235. data/test/proto/nested.pb.rb +30 -0
  236. data/test/proto/nested.proto +9 -0
  237. data/test/proto/optional_field.pb.rb +35 -0
  238. data/test/proto/optional_field.proto +12 -0
  239. data/test/proto/packed.pb.rb +22 -0
  240. data/test/proto/packed.proto +6 -0
  241. data/test/proto/rpc.proto +6 -0
  242. data/test/proto/types.pb.rb +84 -0
  243. data/test/proto/types.proto +37 -0
  244. data/test/test_addressbook.rb +56 -0
  245. data/test/test_enum_value.rb +41 -0
  246. data/test/test_extension.rb +36 -0
  247. data/test/test_lowercase.rb +11 -0
  248. data/test/test_message.rb +128 -0
  249. data/test/test_optional_field.rb +103 -0
  250. data/test/test_packed_field.rb +40 -0
  251. data/test/test_parse.rb +15 -0
  252. data/test/test_repeated_types.rb +132 -0
  253. data/test/test_serialize.rb +61 -0
  254. data/test/test_standard_message.rb +96 -0
  255. data/test/test_types.rb +226 -0
  256. metadata +461 -0
@@ -0,0 +1,22 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/ext_range.proto>
3
+ # message ExtRangeTest {
4
+ # extensions 1 to 10;
5
+ # }
6
+ #
7
+ # extend ExtRangeTest {
8
+ # optional string a = 11;
9
+ # }
10
+
11
+ require 'protobuf/message/message'
12
+ require 'protobuf/message/enum'
13
+ require 'protobuf/message/extend'
14
+
15
+ class ExtRangeTest < ::Protobuf::Message
16
+ defined_in __FILE__
17
+ extensions 1..10
18
+ end
19
+ class ExtRangeTest < ::Protobuf::Message
20
+ defined_in __FILE__
21
+ optional :string, :a, 11, :extension => true
22
+ end
@@ -0,0 +1,7 @@
1
+ message ExtRangeTest {
2
+ extensions 1 to 10;
3
+ }
4
+
5
+ extend ExtRangeTest {
6
+ optional string a = 11;
7
+ }
@@ -0,0 +1,10 @@
1
+ message M {
2
+ optional float f = 1 [default = 4.2];
3
+ optional float g = 2 [default = -4.2];
4
+ optional float h = 3 [default = 4352];
5
+ optional float i = 4 [default = 23145.2 ];
6
+ optional float j = 5 [default = -5 ];
7
+ optional float k = 6 [default = +23 ];
8
+ optional float l = 7 [default = +23.42 ];
9
+ }
10
+
@@ -0,0 +1,30 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/lowercase.proto>
3
+ # package test.lowercase;
4
+ #
5
+ # message foo {
6
+ # message bar {
7
+ # }
8
+ # }
9
+ # message baaz {
10
+ # required foo.bar x = 1;
11
+ # }
12
+
13
+ require 'protobuf/message/message'
14
+ require 'protobuf/message/enum'
15
+ require 'protobuf/message/extend'
16
+
17
+ module Test
18
+ module Lowercase
19
+ class Foo < ::Protobuf::Message
20
+ defined_in __FILE__
21
+ class Bar < ::Protobuf::Message
22
+ defined_in __FILE__
23
+ end
24
+ end
25
+ class Baaz < ::Protobuf::Message
26
+ defined_in __FILE__
27
+ required :'foo::bar', :x, 1
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ package test.lowercase;
2
+
3
+ message foo {
4
+ message bar {
5
+ }
6
+ }
7
+ message baaz {
8
+ required foo.bar x = 1;
9
+ }
@@ -0,0 +1,39 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/merge.proto>
3
+ # package test;
4
+ #
5
+ # message MergeMessage {
6
+ # message InnerMessage1 {
7
+ # required string name = 1;
8
+ # }
9
+ # message InnerMessage2 {
10
+ # required string name = 1;
11
+ # repeated InnerMessage1 repeate_message = 2;
12
+ # }
13
+ #
14
+ # required string name = 1;
15
+ # repeated InnerMessage1 repeate_message = 2;
16
+ # required InnerMessage2 require_message = 3;
17
+ # }
18
+
19
+ require 'protobuf/message/message'
20
+ require 'protobuf/message/enum'
21
+ require 'protobuf/message/extend'
22
+
23
+ module Test
24
+ class MergeMessage < ::Protobuf::Message
25
+ defined_in __FILE__
26
+ class InnerMessage1 < ::Protobuf::Message
27
+ defined_in __FILE__
28
+ required :string, :name, 1
29
+ end
30
+ class InnerMessage2 < ::Protobuf::Message
31
+ defined_in __FILE__
32
+ required :string, :name, 1
33
+ repeated :InnerMessage1, :repeate_message, 2
34
+ end
35
+ required :string, :name, 1
36
+ repeated :InnerMessage1, :repeate_message, 2
37
+ required :InnerMessage2, :require_message, 3
38
+ end
39
+ end
@@ -0,0 +1,15 @@
1
+ package test;
2
+
3
+ message MergeMessage {
4
+ message InnerMessage1 {
5
+ required string name = 1;
6
+ }
7
+ message InnerMessage2 {
8
+ required string name = 1;
9
+ repeated InnerMessage1 repeate_message = 2;
10
+ }
11
+
12
+ required string name = 1;
13
+ repeated InnerMessage1 repeate_message = 2;
14
+ required InnerMessage2 require_message = 3;
15
+ }
@@ -0,0 +1,30 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/nested.proto>
3
+ # package test.nested;
4
+ #
5
+ # message Foo {
6
+ # message Bar {
7
+ # }
8
+ # }
9
+ # message Baaz {
10
+ # optional Foo.Bar x = 1;
11
+ # }
12
+
13
+ require 'protobuf/message/message'
14
+ require 'protobuf/message/enum'
15
+ require 'protobuf/message/extend'
16
+
17
+ module Test
18
+ module Nested
19
+ class Foo < ::Protobuf::Message
20
+ defined_in __FILE__
21
+ class Bar < ::Protobuf::Message
22
+ defined_in __FILE__
23
+ end
24
+ end
25
+ class Baaz < ::Protobuf::Message
26
+ defined_in __FILE__
27
+ optional :'Foo::Bar', :x, 1
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ package test.nested;
2
+
3
+ message Foo {
4
+ message Bar {
5
+ }
6
+ }
7
+ message Baaz {
8
+ optional Foo.Bar x = 1;
9
+ }
@@ -0,0 +1,35 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/optional_field.proto>
3
+ # package test.optional_field;
4
+ #
5
+ # message Message {
6
+ # enum Enum {
7
+ # A = 1;
8
+ # B = 2;
9
+ # }
10
+ # optional uint32 number = 1 [default = 20];
11
+ # optional string text = 2 [default = "default string"];
12
+ # optional Enum enum = 3 [default = B];
13
+ # optional int32 signed = 4 [default = -100];
14
+ # }
15
+
16
+ require 'protobuf/message/message'
17
+ require 'protobuf/message/enum'
18
+ require 'protobuf/message/extend'
19
+
20
+ module Test
21
+ module OptionalField
22
+ class Message < ::Protobuf::Message
23
+ defined_in __FILE__
24
+ class Enum < ::Protobuf::Enum
25
+ defined_in __FILE__
26
+ define :A, 1
27
+ define :B, 2
28
+ end
29
+ optional :uint32, :number, 1, :default => 20
30
+ optional :string, :text, 2, :default => "default string"
31
+ optional :Enum, :enum, 3, :default => :B
32
+ optional :int32, :signed, 4, :default => -100
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,12 @@
1
+ package test.optional_field;
2
+
3
+ message Message {
4
+ enum Enum {
5
+ A = 1;
6
+ B = 2;
7
+ }
8
+ optional uint32 number = 1 [default = 20];
9
+ optional string text = 2 [default = "default string"];
10
+ optional Enum enum = 3 [default = B];
11
+ optional int32 signed = 4 [default = -100];
12
+ }
@@ -0,0 +1,22 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/packed.proto>
3
+ # package test.packed_field;
4
+ #
5
+ # message Message {
6
+ # repeated int32 a = 1 [packed = true];
7
+ # repeated fixed32 b = 2 [packed = true];
8
+ # }
9
+
10
+ require 'protobuf/message/message'
11
+ require 'protobuf/message/enum'
12
+ require 'protobuf/message/extend'
13
+
14
+ module Test
15
+ module PackedField
16
+ class Message < ::Protobuf::Message
17
+ defined_in __FILE__
18
+ repeated :int32, :a, 1, :packed => true
19
+ repeated :fixed32, :b, 2, :packed => true
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,6 @@
1
+ package test.packed_field;
2
+
3
+ message Message {
4
+ repeated int32 a = 1 [packed = true];
5
+ repeated fixed32 b = 2 [packed = true];
6
+ }
@@ -0,0 +1,6 @@
1
+ package tutorial;
2
+
3
+ service AddressBookService {
4
+ rpc Search (Person) returns (AddressBook);
5
+ rpc Add (Person) returns (Person);
6
+ }
@@ -0,0 +1,84 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/types.proto>
3
+ # package test.types;
4
+ #
5
+ # message TestTypes {
6
+ # required double type1 = 1;
7
+ # required float type2 = 2;
8
+ # required int32 type3 = 3;
9
+ # required int64 type4 = 4;
10
+ # required uint32 type5 = 5;
11
+ # required uint64 type6 = 6;
12
+ # required sint32 type7 = 7;
13
+ # required sint64 type8 = 8;
14
+ # required fixed32 type9 = 9;
15
+ # required fixed64 type10 = 10;
16
+ # required bool type11 = 11;
17
+ # required string type12 = 12;
18
+ # required bytes type13 = 13;
19
+ # required sfixed32 type14 = 14;
20
+ # required sfixed64 type15 = 15;
21
+ # }
22
+ #
23
+ # message RepeatedTypes {
24
+ # repeated double type1 = 1;
25
+ # repeated float type2 = 2;
26
+ # repeated int32 type3 = 3;
27
+ # repeated int64 type4 = 4;
28
+ # repeated uint32 type5 = 5;
29
+ # repeated uint64 type6 = 6;
30
+ # repeated sint32 type7 = 7;
31
+ # repeated sint64 type8 = 8;
32
+ # repeated fixed32 type9 = 9;
33
+ # repeated fixed64 type10 = 10;
34
+ # repeated bool type11 = 11;
35
+ # repeated string type12 = 12;
36
+ # repeated bytes type13 = 13;
37
+ # repeated sfixed32 type14 = 14;
38
+ # repeated sfixed64 type15 = 15;
39
+ # }
40
+
41
+ require 'protobuf/message/message'
42
+ require 'protobuf/message/enum'
43
+ require 'protobuf/message/extend'
44
+
45
+ module Test
46
+ module Types
47
+ class TestTypes < ::Protobuf::Message
48
+ defined_in __FILE__
49
+ required :double, :type1, 1
50
+ required :float, :type2, 2
51
+ required :int32, :type3, 3
52
+ required :int64, :type4, 4
53
+ required :uint32, :type5, 5
54
+ required :uint64, :type6, 6
55
+ required :sint32, :type7, 7
56
+ required :sint64, :type8, 8
57
+ required :fixed32, :type9, 9
58
+ required :fixed64, :type10, 10
59
+ required :bool, :type11, 11
60
+ required :string, :type12, 12
61
+ required :bytes, :type13, 13
62
+ required :sfixed32, :type14, 14
63
+ required :sfixed64, :type15, 15
64
+ end
65
+ class RepeatedTypes < ::Protobuf::Message
66
+ defined_in __FILE__
67
+ repeated :double, :type1, 1
68
+ repeated :float, :type2, 2
69
+ repeated :int32, :type3, 3
70
+ repeated :int64, :type4, 4
71
+ repeated :uint32, :type5, 5
72
+ repeated :uint64, :type6, 6
73
+ repeated :sint32, :type7, 7
74
+ repeated :sint64, :type8, 8
75
+ repeated :fixed32, :type9, 9
76
+ repeated :fixed64, :type10, 10
77
+ repeated :bool, :type11, 11
78
+ repeated :string, :type12, 12
79
+ repeated :bytes, :type13, 13
80
+ repeated :sfixed32, :type14, 14
81
+ repeated :sfixed64, :type15, 15
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,37 @@
1
+ package test.types;
2
+
3
+ message TestTypes {
4
+ required double type1 = 1;
5
+ required float type2 = 2;
6
+ required int32 type3 = 3;
7
+ required int64 type4 = 4;
8
+ required uint32 type5 = 5;
9
+ required uint64 type6 = 6;
10
+ required sint32 type7 = 7;
11
+ required sint64 type8 = 8;
12
+ required fixed32 type9 = 9;
13
+ required fixed64 type10 = 10;
14
+ required bool type11 = 11;
15
+ required string type12 = 12;
16
+ required bytes type13 = 13;
17
+ required sfixed32 type14 = 14;
18
+ required sfixed64 type15 = 15;
19
+ }
20
+
21
+ message RepeatedTypes {
22
+ repeated double type1 = 1;
23
+ repeated float type2 = 2;
24
+ repeated int32 type3 = 3;
25
+ repeated int64 type4 = 4;
26
+ repeated uint32 type5 = 5;
27
+ repeated uint64 type6 = 6;
28
+ repeated sint32 type7 = 7;
29
+ repeated sint64 type8 = 8;
30
+ repeated fixed32 type9 = 9;
31
+ repeated fixed64 type10 = 10;
32
+ repeated bool type11 = 11;
33
+ repeated string type12 = 12;
34
+ repeated bytes type13 = 13;
35
+ repeated sfixed32 type14 = 14;
36
+ repeated sfixed64 type15 = 15;
37
+ }
@@ -0,0 +1,56 @@
1
+ require 'test/unit'
2
+ require 'protobuf/message/message'
3
+ require 'protobuf/enum'
4
+ require 'test/proto/addressbook.pb'
5
+
6
+ class AddressbookTest < Test::Unit::TestCase
7
+ def test_enum
8
+ phone_number = Tutorial::Person::PhoneNumber.new
9
+ assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
10
+ phone_number.type = Tutorial::Person::PhoneType::MOBILE
11
+ assert_equal(0, phone_number.type)
12
+ phone_number.type = Tutorial::Person::PhoneType::HOME
13
+ assert_equal(1, phone_number.type)
14
+ phone_number.type = Tutorial::Person::PhoneType::WORK
15
+ assert_equal(2, phone_number.type)
16
+ assert_raise(TypeError) do
17
+ phone_number.type = 3
18
+ end
19
+ end
20
+
21
+ def test_symbol_enum
22
+ phone_number = Tutorial::Person::PhoneNumber.new
23
+ assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
24
+ phone_number.type = :MOBILE
25
+ assert_equal(0, phone_number.type)
26
+ phone_number.type = :HOME
27
+ assert_equal(1, phone_number.type)
28
+ phone_number.type = :WORK
29
+ assert_equal(2, phone_number.type)
30
+ assert_raise(TypeError) do
31
+ phone_number.type = :UNKNOWN
32
+ end
33
+ end
34
+
35
+ def test_initial_value
36
+ person = Tutorial::Person.new
37
+ assert_nil(person.name)
38
+ assert_nil(person.id)
39
+ assert_equal([], person.phone)
40
+ assert_equal('', person.email)
41
+ end
42
+
43
+ def test_repeatable
44
+ address_book = Tutorial::AddressBook.new
45
+ assert_equal([], address_book.person)
46
+ assert_instance_of(Protobuf::Field::FieldArray, address_book.person)
47
+ address_book.person << Tutorial::Person.new
48
+ assert_equal(1, address_book.person.size)
49
+ assert_raise(TypeError) do
50
+ address_book.person << 1
51
+ end
52
+ assert_equal(1, address_book.person.size)
53
+ address_book.person << Tutorial::Person.new
54
+ assert_equal(2, address_book.person.size)
55
+ end
56
+ end
@@ -0,0 +1,41 @@
1
+ require 'test/unit'
2
+ require 'protobuf/message/message'
3
+ require 'protobuf/enum'
4
+ require 'test/proto/addressbook.pb'
5
+ require 'test/proto/addressbook_base.pb'
6
+
7
+ class EnumValueTest < Test::Unit::TestCase
8
+ def test_enum_value
9
+ e = Protobuf::EnumValue.new(Object, :name, 100)
10
+ assert_kind_of(Protobuf::EnumValue, e)
11
+ assert_equal(:name, e.name)
12
+ assert_equal(100, e.value)
13
+ assert_equal('name', e.to_s)
14
+ assert_equal('name', "#{e}")
15
+ assert(e == 100)
16
+ assert(100 == e)
17
+ assert(101, e + 1)
18
+ assert(101, 1 + e)
19
+ end
20
+
21
+ def test_enum_field_and_enum_value
22
+ phone_number = Tutorial::Person::PhoneNumber.new
23
+
24
+ assert_kind_of(Protobuf::EnumValue, phone_number.type)
25
+ assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
26
+
27
+ phone_number.type = 1
28
+ assert_kind_of(Protobuf::EnumValue, phone_number.type)
29
+ assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
30
+ assert_equal(1, phone_number.type)
31
+
32
+ phone_number.type = :HOME
33
+ assert_kind_of(Protobuf::EnumValue, phone_number.type)
34
+ assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
35
+ assert_equal(1, phone_number.type)
36
+
37
+ assert_raise(TypeError) do
38
+ phone_number.type = TutorialExt::Person::PhoneType::HOME
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,36 @@
1
+ require 'test/unit'
2
+ require 'test/proto/addressbook_ext.pb'
3
+
4
+ class ExtensionTest < Test::Unit::TestCase
5
+ def test_accessor
6
+ assert(TutorialExt::Person.extension_fields.to_a.map{|t, f| f.name}.include?(:age))
7
+ person = TutorialExt::Person.new
8
+ assert_nothing_raised {person.age = 100}
9
+ assert_equal(100, person.age)
10
+ end
11
+
12
+ def test_serialize
13
+ # serialize to string
14
+ person = TutorialExt::Person.new
15
+ person.id = 1234
16
+ person.age = 70
17
+ person.name = 'John Doe'
18
+ person.email = 'jdoe@example.com'
19
+ phone = TutorialExt::Person::PhoneNumber.new
20
+ phone.number = '555-4321'
21
+ phone.type = TutorialExt::Person::PhoneType::HOME
22
+ person.phone << phone
23
+ serialized_string = person.serialize_to_string
24
+
25
+ # parse the serialized string
26
+ person2 = TutorialExt::Person.new
27
+ person2.parse_from_string serialized_string
28
+ assert_equal(1234, person2.id)
29
+ assert_equal(70, person2.age)
30
+ assert_equal('John Doe', person2.name)
31
+ assert_equal('jdoe@example.com', person2.email)
32
+ assert_equal(1, person2.phone.size)
33
+ assert_equal('555-4321', person2.phone[0].number)
34
+ assert_equal(TutorialExt::Person::PhoneType::HOME, person2.phone[0].type)
35
+ end
36
+ end
@@ -0,0 +1,11 @@
1
+ require 'test/unit'
2
+ require 'test/proto/lowercase.pb'
3
+
4
+ class LowercaseTest < Test::Unit::TestCase
5
+ def test_lowercase
6
+ message = nil
7
+ assert_nothing_raised { message = Test::Lowercase::Baaz.new }
8
+ assert_nothing_raised { message.x = Test::Lowercase::Foo::Bar.new }
9
+ assert_equal(Test::Lowercase::Foo::Bar, message.get_field_by_name(:x).type)
10
+ end
11
+ end
@@ -0,0 +1,128 @@
1
+ require 'protobuf/message/message'
2
+ require 'test/proto/addressbook.pb'
3
+ require 'test/proto/merge.pb'
4
+ require 'test/unit'
5
+
6
+ # It should not conflict with Test::InnerMessage1 which is included in merge.proto
7
+ class InnerMessage1; end
8
+
9
+ class MessageTest < Test::Unit::TestCase
10
+ def test_equality
11
+ person1 = Tutorial::Person.new :name => 'ando'
12
+ person2 = Tutorial::Person.new :name => 'ando'
13
+ person3 = Tutorial::Person.new :name => 'Ando'
14
+ assert(person1 == person2)
15
+ assert(person1 != person3)
16
+ assert(person1 != 'ando')
17
+ end
18
+
19
+ def test_bracketed_access
20
+ person = Tutorial::Person.new
21
+ name_tag = 1
22
+ person[name_tag] = 'Ichiro'
23
+ assert_equal('Ichiro', person.name)
24
+ assert_equal('Ichiro', person[name_tag])
25
+
26
+ person[:id] = 100
27
+ assert_equal(100, person.id)
28
+ person['id'] = 200
29
+ assert_equal(200, person.id)
30
+ assert_equal(200, person[:id])
31
+ assert_equal(200, person['id'])
32
+ end
33
+
34
+ def test_initialize_with_hash
35
+ person = Tutorial::Person.new(:name => 'Jiro', :id => 300, :email => 'jiro@ema.il')
36
+ assert_equal('Jiro', person.name)
37
+ assert_equal(300, person.id)
38
+ assert_equal('jiro@ema.il', person.email)
39
+
40
+ # initialize with array of hash
41
+ person = Tutorial::Person.new(:phone => [{:number => 'phone1'}, {:number => 'phone2'}])
42
+ assert_equal('phone1', person.phone[0].number)
43
+ assert_equal('phone2', person.phone[1].number)
44
+
45
+ # initalize with hash in hash
46
+ message = Test::MergeMessage.new(:require_message => { :name => 'name1', :repeate_message => [{:name => 'name2'}] })
47
+ assert_equal('name1', message.require_message.name)
48
+ assert_equal('name2', message.require_message.repeate_message[0].name)
49
+
50
+ message.require_message = { :name => 'name21' }
51
+ message.require_message.repeate_message = [ {:name => 'name22'} ]
52
+ assert_equal('name21', message.require_message.name)
53
+ assert_equal('name22', message.require_message.repeate_message[0].name)
54
+ assert_equal(1, message.require_message.repeate_message.size)
55
+ end
56
+
57
+ def test_defined_filenames
58
+ assert(Tutorial::Person.defined_filenames)
59
+ assert_equal(1, Tutorial::Person.defined_filenames.size)
60
+ assert_match(%r{/.*/proto/addressbook\.pb\.rb}, Tutorial::Person.defined_filenames.first)
61
+ end
62
+
63
+ def test_proto_filenames
64
+ assert(Tutorial::Person.proto_filenames)
65
+ assert_equal(1, Tutorial::Person.proto_filenames.size)
66
+ assert_equal('test/proto/addressbook.proto', Tutorial::Person.proto_filenames.first)
67
+ end
68
+
69
+ def test_proto_contents
70
+ assert_equal(<<-EOS.strip, Tutorial::Person.proto_contents.values.first.strip)
71
+ package tutorial;
72
+
73
+ message Person {
74
+ required string name = 1;
75
+ required int32 id = 2;
76
+ optional string email = 3;
77
+
78
+ enum PhoneType {
79
+ MOBILE = 0;
80
+ HOME = 1;
81
+ WORK = 2;
82
+ }
83
+
84
+ message PhoneNumber {
85
+ required string number = 1;
86
+ optional PhoneType type = 2 [default = HOME];
87
+ }
88
+
89
+ repeated PhoneNumber phone = 4;
90
+ optional uint32 age = 5 [default = 20];
91
+
92
+ extensions 100 to 200;
93
+ }
94
+
95
+ /*
96
+ extend Person {
97
+ optional int32 age = 100;
98
+ }
99
+ */
100
+
101
+ message AddressBook {
102
+ repeated Person person = 1;
103
+ }
104
+ EOS
105
+ end
106
+
107
+ def test_merge_field
108
+ inner_message1_2 = Test::MergeMessage::InnerMessage2.new(:name => 'name12')
109
+ inner_message1_2.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name121')
110
+ message1 = Test::MergeMessage.new(:name => 'name1', :require_message => inner_message1_2)
111
+ message1.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name11')
112
+
113
+ inner_message2_2 = Test::MergeMessage::InnerMessage2.new(:name => 'name22')
114
+ inner_message2_2.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name221')
115
+ message2 = Test::MergeMessage.new(:name => 'name2', :require_message => inner_message2_2)
116
+ message2.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name21')
117
+
118
+ message1.merge_from(message2)
119
+ assert_equal('name2', message1.name)
120
+ assert_equal(2, message1.repeate_message.size)
121
+ assert_equal('name11', message1.repeate_message[0].name)
122
+ assert_equal('name21', message1.repeate_message[1].name)
123
+ assert_equal('name22', message1.require_message.name)
124
+ assert_equal(2, message1.require_message.repeate_message.size)
125
+ assert_equal('name121', message1.require_message.repeate_message[0].name)
126
+ assert_equal('name221', message1.require_message.repeate_message[1].name)
127
+ end
128
+ end