ruby_protobuf 0.3.3 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/History.txt +10 -2
  2. data/Manifest.txt +26 -12
  3. data/README.txt +6 -1
  4. data/Rakefile +51 -14
  5. data/TODO +15 -0
  6. data/VERSION +1 -0
  7. data/bin/rprotoc +11 -6
  8. data/lib/protobuf/common/exceptions.rb +11 -0
  9. data/lib/protobuf/common/util.rb +9 -0
  10. data/lib/protobuf/common/wire_type.rb +6 -6
  11. data/lib/protobuf/compiler/compiler.rb +16 -16
  12. data/lib/protobuf/compiler/nodes.rb +67 -65
  13. data/lib/protobuf/compiler/proto.y +31 -38
  14. data/lib/protobuf/compiler/proto_parser.rb +315 -294
  15. data/lib/protobuf/compiler/template/rpc_bin.erb +1 -1
  16. data/lib/protobuf/compiler/template/rpc_client.erb +1 -1
  17. data/lib/protobuf/compiler/template/rpc_service.erb +2 -2
  18. data/lib/protobuf/compiler/visitors.rb +45 -39
  19. data/lib/protobuf/descriptor/descriptor.proto +0 -0
  20. data/lib/protobuf/descriptor/descriptor.rb +11 -10
  21. data/lib/protobuf/descriptor/descriptor_builder.rb +6 -7
  22. data/lib/protobuf/descriptor/descriptor_proto.rb +51 -31
  23. data/lib/protobuf/descriptor/enum_descriptor.rb +5 -5
  24. data/lib/protobuf/descriptor/field_descriptor.rb +8 -9
  25. data/lib/protobuf/descriptor/file_descriptor.rb +0 -1
  26. data/lib/protobuf/message/decoder.rb +33 -35
  27. data/lib/protobuf/message/encoder.rb +23 -19
  28. data/lib/protobuf/message/enum.rb +43 -9
  29. data/lib/protobuf/message/field.rb +281 -193
  30. data/lib/protobuf/message/message.rb +166 -110
  31. data/lib/protobuf/message/protoable.rb +4 -3
  32. data/lib/protobuf/message/service.rb +1 -1
  33. data/lib/protobuf/rpc/client.rb +3 -3
  34. data/lib/protobuf/rpc/handler.rb +1 -1
  35. data/lib/protobuf/rpc/server.rb +8 -8
  36. data/lib/ruby_protobuf.rb +1 -1
  37. data/test/check_unbuild.rb +7 -7
  38. data/test/proto/addressbook.pb.rb +67 -0
  39. data/test/proto/addressbook.proto +2 -0
  40. data/test/proto/addressbook_base.pb.rb +59 -0
  41. data/test/proto/addressbook_base.proto +1 -1
  42. data/test/proto/addressbook_ext.pb.rb +21 -0
  43. data/test/proto/addressbook_ext.proto +2 -2
  44. data/test/{collision.rb → proto/collision.pb.rb} +0 -0
  45. data/test/{ext_collision.rb → proto/ext_collision.pb.rb} +1 -1
  46. data/test/{ext_range.rb → proto/ext_range.pb.rb} +4 -4
  47. data/test/proto/ext_range.proto +2 -2
  48. data/test/proto/float_default.proto +10 -0
  49. data/test/proto/lowercase.pb.rb +31 -0
  50. data/test/proto/lowercase.proto +9 -0
  51. data/test/{merge.rb → proto/merge.pb.rb} +2 -2
  52. data/test/proto/nested.pb.rb +31 -0
  53. data/test/proto/nested.proto +2 -0
  54. data/test/proto/optional_field.pb.rb +36 -0
  55. data/test/proto/optional_field.proto +12 -0
  56. data/test/proto/packed.pb.rb +23 -0
  57. data/test/proto/packed.proto +6 -0
  58. data/test/{types.rb → proto/types.pb.rb} +43 -1
  59. data/test/test_addressbook.rb +30 -17
  60. data/test/test_compiler.rb +79 -78
  61. data/test/test_descriptor.rb +12 -12
  62. data/test/test_enum_value.rb +41 -0
  63. data/test/test_extension.rb +10 -14
  64. data/test/test_lowercase.rb +11 -0
  65. data/test/test_message.rb +44 -41
  66. data/test/test_optional_field.rb +61 -38
  67. data/test/test_packed_field.rb +40 -0
  68. data/test/test_parse.rb +8 -8
  69. data/test/test_repeated_types.rb +29 -3
  70. data/test/test_serialize.rb +12 -12
  71. data/test/test_standard_message.rb +30 -30
  72. data/test/test_types.rb +95 -95
  73. metadata +69 -39
  74. data/test/addressbook.rb +0 -98
  75. data/test/addressbook_base.rb +0 -62
  76. data/test/addressbook_ext.rb +0 -12
  77. data/test/nested.rb +0 -25
  78. data/test/test_ruby_protobuf.rb +0 -1
@@ -1,11 +1,10 @@
1
1
  require 'test/unit'
2
- #require 'protobuf/compiler/compiler_old'
3
2
  require 'protobuf/compiler/compiler'
4
3
 
5
4
  class CompilerTest < Test::Unit::TestCase
6
5
  # Issue 12: Parse error on float default value
7
6
  def test_compile_float_default
8
- assert_compile_proto <<-eos, 'test/proto/float_default.proto'
7
+ assert_compile_proto(<<-EOS, 'test/proto/float_default.proto')
9
8
  ### Generated by rprotoc. DO NOT EDIT!
10
9
  ### <proto file: test/proto/float_default.proto>
11
10
  # message M {
@@ -34,11 +33,11 @@ class M < ::Protobuf::Message
34
33
  optional :float, :k, 6, :default => 23
35
34
  optional :float, :l, 7, :default => 23.42
36
35
  end
37
- eos
36
+ EOS
38
37
  end
39
38
 
40
39
  def test_create_message
41
- assert_compile_proto <<-eos, 'test/proto/addressbook.proto'
40
+ assert_compile_proto(<<-EOS, 'test/proto/addressbook.proto')
42
41
  ### Generated by rprotoc. DO NOT EDIT!
43
42
  ### <proto file: test/proto/addressbook.proto>
44
43
  # package tutorial;
@@ -65,9 +64,11 @@ end
65
64
  # extensions 100 to 200;
66
65
  # }
67
66
  #
67
+ # /*
68
68
  # extend Person {
69
69
  # optional int32 age = 100;
70
70
  # }
71
+ # */
71
72
  #
72
73
  # message AddressBook {
73
74
  # repeated Person person = 1;
@@ -87,9 +88,9 @@ module Tutorial
87
88
 
88
89
  class PhoneType < ::Protobuf::Enum
89
90
  defined_in __FILE__
90
- MOBILE = 0
91
- HOME = 1
92
- WORK = 2
91
+ define :MOBILE, 0
92
+ define :HOME, 1
93
+ define :WORK, 2
93
94
  end
94
95
 
95
96
  class PhoneNumber < ::Protobuf::Message
@@ -104,23 +105,20 @@ module Tutorial
104
105
  extensions 100..200
105
106
  end
106
107
 
107
- class Person < ::Protobuf::Message
108
- defined_in __FILE__
109
- optional :int32, :age, 100, :extension => true
110
- end
111
-
112
108
  class AddressBook < ::Protobuf::Message
113
109
  defined_in __FILE__
114
110
  repeated :Person, :person, 1
115
111
  end
116
112
  end
117
- eos
113
+ EOS
118
114
  end
119
115
 
120
116
  def test_create_nested_message
121
- assert_compile_proto <<-eos, 'test/proto/nested.proto'
117
+ assert_compile_proto(<<-EOS, 'test/proto/nested.proto')
122
118
  ### Generated by rprotoc. DO NOT EDIT!
123
119
  ### <proto file: test/proto/nested.proto>
120
+ # package test.nested;
121
+ #
124
122
  # message Foo {
125
123
  # message Bar {
126
124
  # }
@@ -128,37 +126,40 @@ end
128
126
  # message Baaz {
129
127
  # optional Foo.Bar x = 1;
130
128
  # }
129
+
131
130
  require 'protobuf/message/message'
132
131
  require 'protobuf/message/enum'
133
132
  require 'protobuf/message/service'
134
133
  require 'protobuf/message/extend'
135
134
 
136
- class Foo < ::Protobuf::Message
137
- defined_in __FILE__
138
- class Bar < ::Protobuf::Message
139
- defined_in __FILE__
135
+ module Test
136
+ module Nested
137
+ class Foo < ::Protobuf::Message
138
+ defined_in __FILE__
139
+ class Bar < ::Protobuf::Message
140
+ defined_in __FILE__
141
+ end
142
+ end
143
+ class Baaz < ::Protobuf::Message
144
+ defined_in __FILE__
145
+ optional :'Foo::Bar', :x, 1
146
+ end
140
147
  end
141
148
  end
142
-
143
- class Baaz < ::Protobuf::Message
144
- defined_in __FILE__
145
- optional :'Foo::Bar', :x, 1
146
- end
147
- eos
149
+ EOS
148
150
  end
149
151
 
150
152
  def test_nested_message
151
- Protobuf::Visitor::CreateMessageVisitor.instance_eval {remove_const :Baaz}
152
153
  file_contents = Protobuf::Compiler.new.create_message('test/proto/nested.proto', '.', '.', false)
153
154
  assert_nothing_raised {Object.class_eval file_contents}
154
- assert_raise(TypeError) {Baaz.new.x = 1}
155
- assert_nothing_raised {Baaz.new.x = Foo::Bar.new}
155
+ assert_raise(TypeError) {Test::Nested::Baaz.new.x = 1}
156
+ assert_nothing_raised {Test::Nested::Baaz.new.x = Test::Nested::Foo::Bar.new}
156
157
  end
157
158
 
158
159
  def test_create_rpc
159
160
  file_contents = Protobuf::Compiler.new.create_rpc('test/proto/rpc.proto', '.', 'test/proto', false)
160
161
 
161
- assert_source <<-eos, file_contents['test/proto/address_book_service.rb']
162
+ assert_source(<<-EOS, file_contents['test/proto/address_book_service.rb'])
162
163
  require 'protobuf/rpc/server'
163
164
  require 'protobuf/rpc/handler'
164
165
  require 'test/proto/rpc.pb'
@@ -189,16 +190,16 @@ class Tutorial::AddressBookService < Protobuf::Rpc::Server
189
190
  }
190
191
  end
191
192
  end
192
- eos
193
+ EOS
193
194
 
194
- assert_source <<-eos, file_contents['test/proto/start_address_book_service']
195
+ assert_source(<<-EOS, file_contents['test/proto/start_address_book_service'])
195
196
  #!/usr/bin/env ruby
196
197
  require 'address_book_service'
197
198
 
198
- Tutorial::AddressBookService.new(:port => 9999).start
199
- eos
199
+ Tutorial::AddressBookService.new(:Port => 9999).start
200
+ EOS
200
201
 
201
- assert_source <<-eos, file_contents['test/proto/client_search.rb']
202
+ assert_source(<<-EOS, file_contents['test/proto/client_search.rb'])
202
203
  #!/usr/bin/env ruby
203
204
  require 'protobuf/rpc/client'
204
205
  require 'test/proto/rpc.pb'
@@ -206,7 +207,7 @@ require 'test/proto/rpc.pb'
206
207
  # build request
207
208
  request = Tutorial::Person.new
208
209
  # TODO: setup a request
209
- raise StandardError.new('setup a request')
210
+ raise StandardError, 'setup a request'
210
211
 
211
212
  # create blunk response
212
213
  response = Tutorial::AddressBook.new
@@ -216,9 +217,9 @@ Protobuf::Rpc::Client.new('localhost', 9999).call :search, request, response
216
217
 
217
218
  # show response
218
219
  puts response
219
- eos
220
+ EOS
220
221
 
221
- assert_source <<-eos, file_contents['test/proto/client_add.rb']
222
+ assert_source(<<-EOS, file_contents['test/proto/client_add.rb'])
222
223
  #!/usr/bin/env ruby
223
224
  require 'protobuf/rpc/client'
224
225
  require 'test/proto/rpc.pb'
@@ -226,7 +227,7 @@ require 'test/proto/rpc.pb'
226
227
  # build request
227
228
  request = Tutorial::Person.new
228
229
  # TODO: setup a request
229
- raise StandardError.new('setup a request')
230
+ raise StandardError, 'setup a request'
230
231
 
231
232
  # create blunk response
232
233
  response = Tutorial::Person.new
@@ -236,92 +237,92 @@ Protobuf::Rpc::Client.new('localhost', 9999).call :add, request, response
236
237
 
237
238
  # show response
238
239
  puts response
239
- eos
240
+ EOS
240
241
  end
241
242
 
242
243
  def test_create_descriptor
243
244
  proto_path = 'test/proto/addressbook.proto'
244
- visitor = Protobuf::Visitor::CreateDescriptorVisitor.new proto_path
245
- File.open proto_path, 'r' do |file|
245
+ visitor = Protobuf::Visitor::CreateDescriptorVisitor.new(proto_path)
246
+ File.open(proto_path) do |file|
246
247
  visitor.visit Protobuf::ProtoParser.new.parse(file)
247
248
  end
248
249
  file_descriptor = visitor.file_descriptor
249
- assert_equal proto_path, file_descriptor.name
250
- assert_equal 'tutorial', file_descriptor.package
251
-
250
+ assert_equal(proto_path, file_descriptor.name)
251
+ assert_equal('tutorial', file_descriptor.package)
252
+
252
253
  person_descriptor = file_descriptor.message_type[0]
253
- assert_equal 'Person', person_descriptor.name
254
- assert_equal [:name, :id, :email, :phone, :age].size, person_descriptor.field.size
254
+ assert_equal('Person', person_descriptor.name)
255
+ assert_equal([:name, :id, :email, :phone, :age].size, person_descriptor.field.size)
255
256
 
256
257
  name_field_descriptor = person_descriptor.field.find {|d| d.name == 'name'}
257
- assert_equal 1, name_field_descriptor.number
258
- assert_equal Google::Protobuf::FieldDescriptorProto::Type::TYPE_STRING, name_field_descriptor.type
259
- assert_equal Google::Protobuf::FieldDescriptorProto::Label::LABEL_REQUIRED, name_field_descriptor.label
260
- assert_equal 'string', name_field_descriptor.type_name
258
+ assert_equal(1, name_field_descriptor.number)
259
+ assert_equal(Google::Protobuf::FieldDescriptorProto::Type::TYPE_STRING, name_field_descriptor.type)
260
+ assert_equal(Google::Protobuf::FieldDescriptorProto::Label::LABEL_REQUIRED, name_field_descriptor.label)
261
+ assert_equal('string', name_field_descriptor.type_name)
261
262
 
262
263
  phone_field_descriptor = person_descriptor.field.find {|d| d.name == 'phone'}
263
- assert_equal 4, phone_field_descriptor.number
264
- assert_equal 0, phone_field_descriptor.type #TODO: is this right?
265
- assert_equal Google::Protobuf::FieldDescriptorProto::Label::LABEL_REPEATED, phone_field_descriptor.label
266
- assert_equal 'PhoneNumber', phone_field_descriptor.type_name
264
+ assert_equal(4, phone_field_descriptor.number)
265
+ assert_equal(0, phone_field_descriptor.type) #TODO: is this right?
266
+ assert_equal(Google::Protobuf::FieldDescriptorProto::Label::LABEL_REPEATED, phone_field_descriptor.label)
267
+ assert_equal('PhoneNumber', phone_field_descriptor.type_name)
267
268
 
268
269
  age_field_descriptor = person_descriptor.field.find {|d| d.name == 'age'}
269
- assert_equal 5, age_field_descriptor.number
270
- assert_equal Google::Protobuf::FieldDescriptorProto::Type::TYPE_UINT32, age_field_descriptor.type
271
- assert_equal Google::Protobuf::FieldDescriptorProto::Label::LABEL_OPTIONAL, age_field_descriptor.label
272
- assert_equal 'uint32', age_field_descriptor.type_name
273
- assert_equal '20', age_field_descriptor.default_value
270
+ assert_equal(5, age_field_descriptor.number)
271
+ assert_equal(Google::Protobuf::FieldDescriptorProto::Type::TYPE_UINT32, age_field_descriptor.type)
272
+ assert_equal(Google::Protobuf::FieldDescriptorProto::Label::LABEL_OPTIONAL, age_field_descriptor.label)
273
+ assert_equal('uint32', age_field_descriptor.type_name)
274
+ assert_equal('20', age_field_descriptor.default_value)
274
275
 
275
276
  phone_type_descriptor = person_descriptor.enum_type.first
276
- assert_equal 'PhoneType', phone_type_descriptor.name
277
- assert_equal 3, phone_type_descriptor.value.size
277
+ assert_equal('PhoneType', phone_type_descriptor.name)
278
+ assert_equal(3, phone_type_descriptor.value.size)
278
279
 
279
280
  phone_type_home_descriptor = phone_type_descriptor.value.find {|d| d.name == 'HOME'}
280
- assert_equal 'HOME', phone_type_home_descriptor.name
281
- assert_equal 1, phone_type_home_descriptor.number
281
+ assert_equal('HOME', phone_type_home_descriptor.name)
282
+ assert_equal(1, phone_type_home_descriptor.number)
282
283
 
283
284
  extensions_descriptor = person_descriptor.extension_range.first
284
- assert_equal 100, extensions_descriptor.start
285
- assert_equal 200, extensions_descriptor.end
285
+ assert_equal(100, extensions_descriptor.start)
286
+ assert_equal(200, extensions_descriptor.end)
286
287
 
287
288
  phone_number_descriptor = person_descriptor.nested_type.first
288
- assert_equal 'PhoneNumber', phone_number_descriptor.name
289
- assert_equal [:number, :type].size, phone_number_descriptor.field.size
289
+ assert_equal('PhoneNumber', phone_number_descriptor.name)
290
+ assert_equal([:number, :type].size, phone_number_descriptor.field.size)
290
291
 
291
292
  #TODO: test extend
292
293
  #extend_person_descriptor = ??
293
294
  #assert_equal extend_person_descriptor
294
295
 
295
296
  addressbook_descriptor = file_descriptor.message_type[1]
296
- assert_equal 'AddressBook', addressbook_descriptor.name
297
+ assert_equal('AddressBook', addressbook_descriptor.name)
297
298
  end
298
299
 
299
300
  def test_collision
300
- assert_raise Protobuf::Message::TagCollisionError do require 'test/collision' end
301
- assert_raise Protobuf::Message::TagCollisionError do
302
- Protobuf::Compiler.new.create_message('test/proto/collision.proto', '.', '.', false)
301
+ assert_raise(Protobuf::TagCollisionError) do require 'test/proto/collision.pb' end
302
+ assert_raise(Protobuf::TagCollisionError) do
303
+ Protobuf::Compiler.new.create_message('test/proto/collision.proto', '.', '.', false)
303
304
  end
304
305
  end
305
306
 
306
307
  def test_ext_collision
307
- assert_raise Protobuf::Message::TagCollisionError do require 'test/ext_collision' end
308
- assert_raise Protobuf::Message::TagCollisionError do
309
- Protobuf::Compiler.new.create_message('test/proto/ext_collision.proto', '.', '.', false)
308
+ assert_raise(Protobuf::TagCollisionError) do require 'test/proto/ext_collision.pb' end
309
+ assert_raise(Protobuf::TagCollisionError) do
310
+ Protobuf::Compiler.new.create_message('test/proto/ext_collision.proto', '.', '.', false)
310
311
  end
311
312
  end
312
313
 
313
314
  def test_ext_range
314
- assert_raise RangeError do require 'test/ext_range' end
315
- assert_raise RangeError do
316
- Protobuf::Compiler.new.create_message('test/proto/ext_range.proto', '.', '.', false)
315
+ assert_raise(RangeError) do require 'test/proto/ext_range.pb' end
316
+ assert_raise(RangeError) do
317
+ Protobuf::Compiler.new.create_message('test/proto/ext_range.proto', '.', '.', false)
317
318
  end
318
319
  end
319
320
 
320
321
  def assert_compile_proto(ideal, filename)
321
- assert_equal ideal.gsub(/^\s*\n/, '').strip, Protobuf::Compiler.new.create_message(filename, '.', '.', false).gsub(/^\s*\n/, '').strip
322
+ assert_equal(ideal.gsub(/^\s*\n/, '').strip, Protobuf::Compiler.new.create_message(filename, '.', '.', false).gsub(/^\s*\n/, '').strip)
322
323
  end
323
324
 
324
325
  def assert_source(ideal, real)
325
- assert_equal ideal.strip.gsub(/^\s*\n/, '').gsub(/\s+\n/, "\n"), real.strip.gsub(/^\s*\n/, '').gsub(/\s+\n/, "\n")
326
+ assert_equal(ideal.strip.gsub(/^\s*\n/, '').gsub(/\s+\n/, "\n"), real.strip.gsub(/^\s*\n/, '').gsub(/\s+\n/, "\n"))
326
327
  end
327
328
  end
@@ -1,5 +1,5 @@
1
1
  require 'test/unit'
2
- require 'test/addressbook'
2
+ require 'test/proto/addressbook.pb'
3
3
  require 'protobuf/descriptor/descriptor_builder'
4
4
  require 'protobuf/descriptor/descriptor_proto'
5
5
 
@@ -63,7 +63,7 @@ class DescriptorTest < Test::Unit::TestCase
63
63
  person_phone_number_number_proto.type = FieldDescriptorProto::Type::TYPE_STRING
64
64
  person_phone_number_number_proto.name = 'number'
65
65
  person_phone_number_number_proto.number = 1
66
-
66
+
67
67
  person_phone_number_type_proto = FieldDescriptorProto.new
68
68
  person_phone_number_proto.field << person_phone_number_type_proto
69
69
  person_phone_number_type_proto.label = FieldDescriptorProto::Label::LABEL_OPTIONAL
@@ -93,29 +93,29 @@ class DescriptorTest < Test::Unit::TestCase
93
93
  address_book_person_proto.name = 'person'
94
94
  address_book_person_proto.number = 1
95
95
 
96
- Protobuf::Descriptor::DescriptorBuilder.build tutorial_proto
96
+ Protobuf::Descriptor::DescriptorBuilder.build(tutorial_proto)
97
97
 
98
98
  assert_nothing_raised {Build::Tutorial::Person}
99
99
  assert_nothing_raised {Build::Tutorial::Person.new}
100
- assert_equal ['email', 'id', 'name', 'phone'],
101
- Build::Tutorial::Person.fields.map{|tag, field| field.name}.sort
100
+ assert_equal(['email', 'id', 'name', 'phone'],
101
+ Build::Tutorial::Person.fields.map{|tag, field| field.name}.sort)
102
102
 
103
103
  assert_nothing_raised {Build::Tutorial::Person::PhoneNumber}
104
104
  assert_nothing_raised {Build::Tutorial::Person::PhoneNumber.new}
105
- assert_equal ['number', 'type'],
106
- Build::Tutorial::Person::PhoneNumber.fields.map{|tag, field| field.name}.sort
105
+ assert_equal(['number', 'type'],
106
+ Build::Tutorial::Person::PhoneNumber.fields.map{|tag, field| field.name}.sort)
107
107
 
108
108
  assert_nothing_raised {Build::Tutorial::Person::PhoneType}
109
- assert_equal 0, Build::Tutorial::Person::PhoneType::MOBILE
110
- assert_equal 1, Build::Tutorial::Person::PhoneType::HOME
111
- assert_equal 2, Build::Tutorial::Person::PhoneType::WORK
109
+ assert_equal(0, Build::Tutorial::Person::PhoneType::MOBILE)
110
+ assert_equal(1, Build::Tutorial::Person::PhoneType::HOME)
111
+ assert_equal(2, Build::Tutorial::Person::PhoneType::WORK)
112
112
 
113
113
  assert_nothing_raised {Build::Tutorial::AddressBook}
114
114
  end
115
115
 
116
116
  def test_unbuild
117
- proto = Protobuf::Descriptor::FileDescriptor.unbuild Tutorial::Person
118
- proto.serialize_to_file 'person.bin'
117
+ proto = Protobuf::Descriptor::FileDescriptor.unbuild(Tutorial::Person)
118
+ proto.serialize_to_file('person.bin')
119
119
  puts
120
120
  puts "run `test/check_unbuild.rb'"
121
121
  end
@@ -0,0 +1,41 @@
1
+ require 'test/unit'
2
+ require 'protobuf/message/message'
3
+ require 'protobuf/message/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
@@ -1,16 +1,12 @@
1
1
  require 'test/unit'
2
- require 'test/addressbook_ext.rb'
2
+ require 'test/proto/addressbook_ext.pb'
3
3
 
4
4
  class ExtensionTest < Test::Unit::TestCase
5
5
  def test_accessor
6
- assert TutorialExt::Person.extension_fields.to_a.map{|t, f| f.name}.include?(:age)
6
+ assert(TutorialExt::Person.extension_fields.to_a.map{|t, f| f.name}.include?(:age))
7
7
  person = TutorialExt::Person.new
8
8
  assert_nothing_raised {person.age = 100}
9
- assert 100, person.age
10
- #assert 100, person.extension.age
11
- #assert_nothing_raised {person.extension.age = 200}
12
- #assert 200, person.age
13
- #assert 200, person.extension.age
9
+ assert_equal(100, person.age)
14
10
  end
15
11
 
16
12
  def test_serialize
@@ -29,12 +25,12 @@ class ExtensionTest < Test::Unit::TestCase
29
25
  # parse the serialized string
30
26
  person2 = TutorialExt::Person.new
31
27
  person2.parse_from_string serialized_string
32
- assert_equal 1234, person2.id
33
- assert_equal 70, person2.age
34
- assert_equal 'John Doe', person2.name
35
- assert_equal 'jdoe@example.com', person2.email
36
- assert_equal 1, person2.phone.size
37
- assert_equal '555-4321', person2.phone[0].number
38
- assert_equal TutorialExt::Person::PhoneType::HOME, person2.phone[0].type
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)
39
35
  end
40
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
data/test/test_message.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'protobuf/message/message'
2
- require 'test/addressbook'
3
- require 'test/merge'
2
+ require 'test/proto/addressbook.pb'
3
+ require 'test/proto/merge.pb'
4
4
  require 'test/unit'
5
5
 
6
6
  # It should not conflict with Test::InnerMessage1 which is included in merge.proto
@@ -11,63 +11,63 @@ class MessageTest < Test::Unit::TestCase
11
11
  person1 = Tutorial::Person.new :name => 'ando'
12
12
  person2 = Tutorial::Person.new :name => 'ando'
13
13
  person3 = Tutorial::Person.new :name => 'Ando'
14
- assert person1 == person2
15
- assert person1 != person3
16
- assert person1 != 'ando'
14
+ assert(person1 == person2)
15
+ assert(person1 != person3)
16
+ assert(person1 != 'ando')
17
17
  end
18
18
 
19
19
  def test_bracketed_access
20
20
  person = Tutorial::Person.new
21
21
  name_tag = 1
22
22
  person[name_tag] = 'Ichiro'
23
- assert_equal 'Ichiro', person.name
24
- assert_equal 'Ichiro', person[name_tag]
23
+ assert_equal('Ichiro', person.name)
24
+ assert_equal('Ichiro', person[name_tag])
25
25
 
26
26
  person[:id] = 100
27
- assert_equal 100, person.id
27
+ assert_equal(100, person.id)
28
28
  person['id'] = 200
29
- assert_equal 200, person.id
30
- assert_equal 200, person[:id]
31
- assert_equal 200, person['id']
29
+ assert_equal(200, person.id)
30
+ assert_equal(200, person[:id])
31
+ assert_equal(200, person['id'])
32
32
  end
33
33
 
34
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
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
39
 
40
40
  # initialize with array of hash
41
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
42
+ assert_equal('phone1', person.phone[0].number)
43
+ assert_equal('phone2', person.phone[1].number)
44
44
 
45
45
  # initalize with hash in hash
46
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
47
+ assert_equal('name1', message.require_message.name)
48
+ assert_equal('name2', message.require_message.repeate_message[0].name)
49
49
 
50
50
  message.require_message = { :name => 'name21' }
51
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
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
55
  end
56
56
 
57
57
  def test_defined_filenames
58
- assert Tutorial::Person.defined_filenames
59
- assert_equal 1, Tutorial::Person.defined_filenames.size
60
- assert Tutorial::Person.defined_filenames.first =~ %r{/.*/test/addressbook\.rb}
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
61
  end
62
62
 
63
63
  def test_proto_filenames
64
- assert Tutorial::Person.proto_filenames
65
- assert_equal 1, Tutorial::Person.proto_filenames.size
66
- assert_equal 'test/addressbook.proto', Tutorial::Person.proto_filenames.first
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
67
  end
68
68
 
69
69
  def test_proto_contents
70
- assert_equal <<-eos.strip, Tutorial::Person.proto_contents.values.first.strip
70
+ assert_equal(<<-EOS.strip, Tutorial::Person.proto_contents.values.first.strip)
71
71
  package tutorial;
72
72
 
73
73
  message Person {
@@ -87,39 +87,42 @@ message Person {
87
87
  }
88
88
 
89
89
  repeated PhoneNumber phone = 4;
90
+ optional uint32 age = 5 [default = 20];
90
91
 
91
92
  extensions 100 to 200;
92
93
  }
93
94
 
95
+ /*
94
96
  extend Person {
95
97
  optional int32 age = 100;
96
98
  }
99
+ */
97
100
 
98
101
  message AddressBook {
99
102
  repeated Person person = 1;
100
103
  }
101
- eos
104
+ EOS
102
105
  end
103
106
 
104
107
  def test_merge_field
105
108
  inner_message1_2 = Test::MergeMessage::InnerMessage2.new(:name => 'name12')
106
109
  inner_message1_2.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name121')
107
- message1 = Test::MergeMessage.new :name => 'name1', :require_message => inner_message1_2
110
+ message1 = Test::MergeMessage.new(:name => 'name1', :require_message => inner_message1_2)
108
111
  message1.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name11')
109
112
 
110
113
  inner_message2_2 = Test::MergeMessage::InnerMessage2.new(:name => 'name22')
111
114
  inner_message2_2.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name221')
112
- message2 = Test::MergeMessage.new :name => 'name2', :require_message => inner_message2_2
115
+ message2 = Test::MergeMessage.new(:name => 'name2', :require_message => inner_message2_2)
113
116
  message2.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name21')
114
117
 
115
- message1.merge_from message2
116
- assert_equal 'name2', message1.name
117
- assert_equal 2, message1.repeate_message.size
118
- assert_equal 'name11', message1.repeate_message[0].name
119
- assert_equal 'name21', message1.repeate_message[1].name
120
- assert_equal 'name22', message1.require_message.name
121
- assert_equal 2, message1.require_message.repeate_message.size
122
- assert_equal 'name121', message1.require_message.repeate_message[0].name
123
- assert_equal 'name221', message1.require_message.repeate_message[1].name
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)
124
127
  end
125
128
  end