ruby-protocol-buffers 1.3.0 → 1.3.1
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.
- data/.gitignore +6 -5
- data/.travis.yml +20 -0
- data/Gemfile +5 -1
- data/Gemfile.no_varint +4 -0
- data/README.md +7 -0
- data/Rakefile +3 -18
- data/lib/protocol_buffers.rb +3 -3
- data/lib/protocol_buffers/compiler.rb +7 -0
- data/lib/protocol_buffers/compiler/descriptor.pb.rb +63 -30
- data/lib/protocol_buffers/compiler/descriptor.proto +252 -25
- data/lib/protocol_buffers/compiler/file_descriptor_to_ruby.rb +7 -1
- data/lib/protocol_buffers/runtime/decoder.rb +18 -2
- data/lib/protocol_buffers/runtime/encoder.rb +17 -2
- data/lib/protocol_buffers/runtime/field.rb +14 -3
- data/lib/protocol_buffers/runtime/varint.rb +42 -36
- data/lib/protocol_buffers/version.rb +3 -0
- data/ruby-protocol-buffers.gemspec +22 -21
- data/spec/compiler_spec.rb +22 -0
- data/spec/fields_spec.rb +54 -16
- data/spec/proto_files/featureful.pb.rb +76 -0
- data/spec/proto_files/packed.pb.rb +37 -0
- data/spec/proto_files/packed.proto +30 -0
- data/spec/proto_files/simple.pb.rb +23 -0
- data/spec/runtime_spec.rb +211 -164
- data/spec/spec_helper.rb +24 -7
- data/tasks/rspec.rake +7 -0
- data/tasks/yard.rake +6 -0
- metadata +34 -6
- data/VERSION +0 -1
- data/ext/extconf.disabled.rb +0 -3
- data/ext/varint.c +0 -65
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
|
4
|
+
require 'protocol_buffers'
|
5
|
+
|
6
|
+
module Packed
|
7
|
+
# forward declarations
|
8
|
+
class Test < ::ProtocolBuffers::Message; end
|
9
|
+
|
10
|
+
class Test < ::ProtocolBuffers::Message
|
11
|
+
# forward declarations
|
12
|
+
|
13
|
+
# enums
|
14
|
+
module N
|
15
|
+
include ::ProtocolBuffers::Enum
|
16
|
+
A = 1
|
17
|
+
B = 2
|
18
|
+
C = 3
|
19
|
+
end
|
20
|
+
|
21
|
+
repeated :int32, :a, 4, :packed => true
|
22
|
+
repeated :int64, :b, 5, :packed => true
|
23
|
+
repeated :uint32, :c, 6, :packed => true
|
24
|
+
repeated :uint64, :d, 7, :packed => true
|
25
|
+
repeated :sint32, :e, 8, :packed => true
|
26
|
+
repeated :sint64, :f, 9, :packed => true
|
27
|
+
repeated :fixed64, :g, 10, :packed => true
|
28
|
+
repeated :sfixed64, :h, 11, :packed => true
|
29
|
+
repeated :double, :i, 12, :packed => true
|
30
|
+
repeated :fixed32, :j, 13, :packed => true
|
31
|
+
repeated :sfixed32, :k, 14, :packed => true
|
32
|
+
repeated :float, :l, 15, :packed => true
|
33
|
+
repeated :bool, :m, 16, :packed => true
|
34
|
+
repeated ::Packed::Test::N, :n, 17, :packed => true
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
package packed;
|
2
|
+
|
3
|
+
message Test {
|
4
|
+
repeated int32 a = 4 [packed=true];
|
5
|
+
repeated int64 b = 5 [packed=true];
|
6
|
+
|
7
|
+
repeated uint32 c = 6 [packed=true];
|
8
|
+
repeated uint64 d = 7 [packed=true];
|
9
|
+
|
10
|
+
repeated sint32 e = 8 [packed=true];
|
11
|
+
repeated sint64 f = 9 [packed=true];
|
12
|
+
|
13
|
+
repeated fixed64 g = 10 [packed=true];
|
14
|
+
repeated sfixed64 h = 11 [packed=true];
|
15
|
+
repeated double i = 12 [packed=true];
|
16
|
+
|
17
|
+
repeated fixed32 j = 13 [packed=true];
|
18
|
+
repeated sfixed32 k = 14 [packed=true];
|
19
|
+
repeated float l = 15 [packed=true];
|
20
|
+
|
21
|
+
repeated bool m = 16 [packed=true];
|
22
|
+
|
23
|
+
enum N {
|
24
|
+
A = 1;
|
25
|
+
B = 2;
|
26
|
+
C = 3;
|
27
|
+
}
|
28
|
+
repeated N n = 17 [packed=true];
|
29
|
+
|
30
|
+
};
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
|
4
|
+
require 'protocol_buffers'
|
5
|
+
|
6
|
+
module Simple
|
7
|
+
# forward declarations
|
8
|
+
class Test1 < ::ProtocolBuffers::Message; end
|
9
|
+
class Foo < ::ProtocolBuffers::Message; end
|
10
|
+
class Bar < ::ProtocolBuffers::Message; end
|
11
|
+
|
12
|
+
class Test1 < ::ProtocolBuffers::Message
|
13
|
+
optional :string, :test_field, 1
|
14
|
+
end
|
15
|
+
|
16
|
+
class Foo < ::ProtocolBuffers::Message
|
17
|
+
end
|
18
|
+
|
19
|
+
class Bar < ::ProtocolBuffers::Message
|
20
|
+
optional ::Simple::Foo, :foo, 1
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/spec/runtime_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: binary
|
2
|
+
|
1
3
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
4
|
|
3
5
|
require 'stringio'
|
@@ -9,17 +11,85 @@ require 'protocol_buffers/compiler'
|
|
9
11
|
describe ProtocolBuffers, "runtime" do
|
10
12
|
before(:each) do
|
11
13
|
# clear our namespaces
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
%w( Simple Featureful Foo Packed TehUnknown TehUnknown2 TehUnknown3 ).each do |klass|
|
15
|
+
Object.send(:remove_const, klass.to_sym) if Object.const_defined?(klass.to_sym)
|
16
|
+
end
|
17
|
+
|
18
|
+
# load test protos
|
19
|
+
%w( simple featureful packed ).each do |proto|
|
20
|
+
load File.join(File.dirname(__FILE__), "proto_files", "#{proto}.pb.rb")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "packed field handling" do
|
25
|
+
|
26
|
+
before :each do
|
27
|
+
@packed = Packed::Test.new
|
28
|
+
end
|
29
|
+
|
30
|
+
it "does not encode empty field" do
|
31
|
+
@packed.a = [ ]
|
32
|
+
@packed.to_s.should == ""
|
33
|
+
|
34
|
+
ser = ProtocolBuffers.bin_sio(@packed.to_s)
|
35
|
+
unpacked = Packed::Test.parse(ser)
|
36
|
+
unpacked.a.should == [ ]
|
37
|
+
end
|
38
|
+
|
39
|
+
it "correctly encodes repeated field" do
|
40
|
+
# Example values from https://developers.google.com/protocol-buffers/docs/encoding.
|
41
|
+
@packed.a = [ 3, 270 ]
|
42
|
+
@packed.a << 86942
|
43
|
+
@packed.to_s.should == "\x22\x06\x03\x8e\x02\x9e\xa7\x05"
|
44
|
+
|
45
|
+
ser = ProtocolBuffers.bin_sio(@packed.to_s)
|
46
|
+
unpacked = Packed::Test.parse(ser)
|
47
|
+
unpacked.a.should == [ 3, 270, 86942 ]
|
48
|
+
end
|
49
|
+
|
50
|
+
it "handles primitive numeric data types" do
|
51
|
+
types_to_be_packed = {
|
52
|
+
:int32 => { :field => :a, :value => [ 0, 1, 1 ] },
|
53
|
+
:int64 => { :field => :b, :value => [ 2, 3, 5 ] },
|
54
|
+
|
55
|
+
:uint32 => { :field => :c, :value => [ 8, 13, 21 ] },
|
56
|
+
:uint64 => { :field => :d, :value => [ 34, 55, 89 ] },
|
57
|
+
|
58
|
+
:sint32 => { :field => :e, :value => [ -114, 233, -377 ] },
|
59
|
+
:sint64 => { :field => :f, :value => [ 610, -987, 1597 ] },
|
60
|
+
|
61
|
+
:fixed64 => { :field => :g, :value => [ 2584, 4181, 6765 ] },
|
62
|
+
:sfixed64 => { :field => :h, :value => [ -10946, 17711, -28657 ] },
|
63
|
+
:double => { :field => :i, :value => [ 46.368, -75025, 121.393 ] },
|
64
|
+
|
65
|
+
:fixed32 => { :field => :j, :value => [ 196418, 317811, 514229 ] },
|
66
|
+
:sfixed32 => { :field => :k, :value => [ -832040, 1346269, -2178309 ] },
|
67
|
+
:float => { :field => :l, :value => [ 3524.578, -5702887, 92274.65 ] },
|
68
|
+
|
69
|
+
:bool => { :field => :m, :value => [ false, false, true, false ] },
|
70
|
+
:enum => { :field => :n, :value => [ Packed::Test::N::A, Packed::Test::N::B, Packed::Test::N::A, Packed::Test::N::C ] }
|
71
|
+
}
|
72
|
+
|
73
|
+
types_to_be_packed.values.each do |v|
|
74
|
+
@packed.send("#{v[:field]}=", v[:value])
|
75
|
+
end
|
76
|
+
|
77
|
+
ser = ProtocolBuffers.bin_sio(@packed.to_s)
|
78
|
+
unpacked = Packed::Test.parse(ser)
|
79
|
+
|
80
|
+
types_to_be_packed.each_pair do |k, v|
|
81
|
+
if [ :float, :double ].include? k
|
82
|
+
act = unpacked.send(v[:field]).map{|i| (i * 100).round}
|
83
|
+
exp = v[:value].map{|i| (i * 100).round}
|
84
|
+
|
85
|
+
act.should == exp
|
86
|
+
else
|
87
|
+
unpacked.send(v[:field]).should == v[:value]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
23
93
|
end
|
24
94
|
|
25
95
|
it "can handle basic operations" do
|
@@ -91,13 +161,12 @@ describe ProtocolBuffers, "runtime" do
|
|
91
161
|
end
|
92
162
|
|
93
163
|
it "allows directly recursive sub-messages" do
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
optional
|
98
|
-
|
99
|
-
|
100
|
-
EOS
|
164
|
+
module Foo
|
165
|
+
class Foo < ProtocolBuffers::Message
|
166
|
+
optional :int32, :payload, 1
|
167
|
+
optional Foo, :foo, 2
|
168
|
+
end
|
169
|
+
end
|
101
170
|
|
102
171
|
foo = Foo::Foo.new
|
103
172
|
foo.has_foo?.should == false
|
@@ -107,18 +176,19 @@ describe ProtocolBuffers, "runtime" do
|
|
107
176
|
end
|
108
177
|
|
109
178
|
it "allows indirectly recursive sub-messages" do
|
110
|
-
|
111
|
-
|
112
|
-
message Foo {
|
113
|
-
optional int32 payload = 1;
|
114
|
-
optional Bar bar = 2;
|
115
|
-
}
|
179
|
+
module Foo
|
180
|
+
class Bar < ProtocolBuffers::Message; end
|
116
181
|
|
117
|
-
|
118
|
-
optional
|
119
|
-
optional
|
120
|
-
|
121
|
-
|
182
|
+
class Foo < ProtocolBuffers::Message
|
183
|
+
optional :int32, :payload, 1
|
184
|
+
optional Bar, :bar, 2
|
185
|
+
end
|
186
|
+
|
187
|
+
class Bar
|
188
|
+
optional Foo, :foo, 1
|
189
|
+
optional :int32, :payload, 2
|
190
|
+
end
|
191
|
+
end
|
122
192
|
|
123
193
|
foo = Foo::Foo.new
|
124
194
|
foo.has_bar?.should == false
|
@@ -131,12 +201,11 @@ describe ProtocolBuffers, "runtime" do
|
|
131
201
|
|
132
202
|
it "pretends that repeated fields are arrays" do
|
133
203
|
# make sure our RepeatedField class acts like a normal Array
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
EOS
|
204
|
+
module Foo
|
205
|
+
class Foo < ProtocolBuffers::Message
|
206
|
+
repeated :int32, :nums, 1
|
207
|
+
end
|
208
|
+
end
|
140
209
|
|
141
210
|
foo = Foo::Foo.new
|
142
211
|
foo2 = Foo::Foo.new(:nums => [1,2,3])
|
@@ -171,12 +240,11 @@ describe ProtocolBuffers, "runtime" do
|
|
171
240
|
end
|
172
241
|
|
173
242
|
it "does value checking of repeated fields" do
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
EOS
|
243
|
+
module Foo
|
244
|
+
class Foo < ProtocolBuffers::Message
|
245
|
+
repeated :int32, :nums, 1
|
246
|
+
end
|
247
|
+
end
|
180
248
|
|
181
249
|
foo = Foo::Foo.new
|
182
250
|
proc do
|
@@ -187,15 +255,14 @@ describe ProtocolBuffers, "runtime" do
|
|
187
255
|
# sort of redundant test, but let's check the example in the docs for
|
188
256
|
# correctness
|
189
257
|
it "handles singular message fields exactly as in the documentation" do
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
EOS
|
258
|
+
module Foo
|
259
|
+
class Bar < ProtocolBuffers::Message
|
260
|
+
optional :int32, :i, 1
|
261
|
+
end
|
262
|
+
class Foo < ProtocolBuffers::Message
|
263
|
+
optional Bar, :bar, 1
|
264
|
+
end
|
265
|
+
end
|
199
266
|
|
200
267
|
foo = Foo::Foo.new
|
201
268
|
foo.has_bar?.should == false
|
@@ -209,18 +276,17 @@ describe ProtocolBuffers, "runtime" do
|
|
209
276
|
|
210
277
|
foo = Foo::Foo.new
|
211
278
|
foo.has_bar?.should == false
|
212
|
-
|
279
|
+
_local_i = foo.bar.i
|
213
280
|
foo.has_bar?.should == false
|
214
281
|
end
|
215
282
|
|
216
283
|
# another example from the docs
|
217
284
|
it "handles repeated field logic" do
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
EOS
|
285
|
+
module Foo
|
286
|
+
class Foo < ProtocolBuffers::Message
|
287
|
+
repeated :int32, :nums, 1
|
288
|
+
end
|
289
|
+
end
|
224
290
|
|
225
291
|
foo = Foo::Foo.new
|
226
292
|
foo.has_nums?.should == true
|
@@ -256,15 +322,15 @@ describe ProtocolBuffers, "runtime" do
|
|
256
322
|
end
|
257
323
|
|
258
324
|
it "can assign any object with an each method to a repeated field" do
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
325
|
+
module Foo
|
326
|
+
class Bar < ProtocolBuffers::Message
|
327
|
+
optional :int32, :i, 1
|
328
|
+
end
|
329
|
+
|
330
|
+
class Foo < ProtocolBuffers::Message
|
331
|
+
repeated Bar, :nums, 1
|
332
|
+
end
|
333
|
+
end
|
268
334
|
|
269
335
|
class Blah
|
270
336
|
def each
|
@@ -288,7 +354,7 @@ describe ProtocolBuffers, "runtime" do
|
|
288
354
|
end
|
289
355
|
|
290
356
|
it "responds to gen_methods! for backwards compat" do
|
291
|
-
A.gen_methods!
|
357
|
+
Featureful::A.gen_methods!
|
292
358
|
end
|
293
359
|
|
294
360
|
def filled_in_bit
|
@@ -368,13 +434,12 @@ describe ProtocolBuffers, "runtime" do
|
|
368
434
|
end
|
369
435
|
|
370
436
|
it "enforces required fields on serialization" do
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
EOS
|
437
|
+
module TehUnknown
|
438
|
+
class MyResult < ProtocolBuffers::Message
|
439
|
+
required :string, :field_1, 1
|
440
|
+
optional :string, :field_2, 2
|
441
|
+
end
|
442
|
+
end
|
378
443
|
|
379
444
|
res1 = TehUnknown::MyResult.new(:field_2 => 'b')
|
380
445
|
|
@@ -392,73 +457,67 @@ describe ProtocolBuffers, "runtime" do
|
|
392
457
|
end
|
393
458
|
|
394
459
|
it "enforces required fields on deserialization" do
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
optional string
|
399
|
-
|
400
|
-
|
401
|
-
EOS
|
460
|
+
module TehUnknown
|
461
|
+
class MyResult < ProtocolBuffers::Message
|
462
|
+
optional :string, :field_1, 1
|
463
|
+
optional :string, :field_2, 2
|
464
|
+
end
|
465
|
+
end
|
402
466
|
|
403
467
|
res1 = TehUnknown::MyResult.new(:field_2 => 'b')
|
404
468
|
buf = res1.to_s
|
405
469
|
|
406
470
|
# now make field_1 required
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
EOS
|
471
|
+
module TehUnknown2
|
472
|
+
class MyResult < ProtocolBuffers::Message
|
473
|
+
required :string, :field_1, 1
|
474
|
+
optional :string, :field_2, 2
|
475
|
+
end
|
476
|
+
end
|
414
477
|
|
415
478
|
proc { TehUnknown2::MyResult.parse(buf) }.should raise_error(ProtocolBuffers::DecodeError)
|
416
479
|
end
|
417
480
|
|
418
481
|
it "enforces valid values on deserialization" do
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
EOS
|
482
|
+
module TehUnknown
|
483
|
+
class MyResult < ProtocolBuffers::Message
|
484
|
+
optional :int64, :field_1, 1
|
485
|
+
end
|
486
|
+
end
|
425
487
|
|
426
488
|
res1 = TehUnknown::MyResult.new(:field_1 => (2**33))
|
427
489
|
buf = res1.to_s
|
428
490
|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
EOS
|
491
|
+
module TehUnknown2
|
492
|
+
class MyResult < ProtocolBuffers::Message
|
493
|
+
optional :int32, :field_1, 1
|
494
|
+
end
|
495
|
+
end
|
435
496
|
|
436
497
|
proc { TehUnknown2::MyResult.parse(buf) }.should raise_error(ProtocolBuffers::DecodeError)
|
437
498
|
end
|
438
499
|
|
439
500
|
it "ignores and passes on unknown fields" do
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
optional int32
|
444
|
-
optional int32
|
445
|
-
optional int32
|
446
|
-
|
447
|
-
|
448
|
-
EOS
|
501
|
+
module TehUnknown
|
502
|
+
class MyResult < ProtocolBuffers::Message
|
503
|
+
optional :int32, :field_1, 1
|
504
|
+
optional :int32, :field_2, 2
|
505
|
+
optional :int32, :field_3, 3
|
506
|
+
optional :int32, :field_4, 4
|
507
|
+
end
|
508
|
+
end
|
449
509
|
|
450
510
|
res1 = TehUnknown::MyResult.new(:field_1 => 0xffff, :field_2 => 0xfffe,
|
451
511
|
:field_3 => 0xfffd, :field_4 => 0xfffc)
|
452
512
|
serialized = res1.to_s
|
453
513
|
|
454
514
|
# remove field_2 to pretend we never knew about it
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
optional int32
|
459
|
-
|
460
|
-
|
461
|
-
EOS
|
515
|
+
module TehUnknown2
|
516
|
+
class MyResult < ProtocolBuffers::Message
|
517
|
+
optional :int32, :field_1, 1
|
518
|
+
optional :int32, :field_3, 3
|
519
|
+
end
|
520
|
+
end
|
462
521
|
|
463
522
|
res2 = nil
|
464
523
|
proc do
|
@@ -475,14 +534,13 @@ describe ProtocolBuffers, "runtime" do
|
|
475
534
|
serialized2 = res2.to_s
|
476
535
|
|
477
536
|
# now we know about field_2 again
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
optional int32
|
482
|
-
optional int32
|
483
|
-
|
484
|
-
|
485
|
-
EOS
|
537
|
+
module TehUnknown3
|
538
|
+
class MyResult < ProtocolBuffers::Message
|
539
|
+
optional :int32, :field_1, 1
|
540
|
+
optional :int32, :field_2, 2
|
541
|
+
optional :int32, :field_4, 4
|
542
|
+
end
|
543
|
+
end
|
486
544
|
|
487
545
|
res3 = TehUnknown3::MyResult.parse(serialized2)
|
488
546
|
res3.field_1.should == 0xffff
|
@@ -492,30 +550,30 @@ describe ProtocolBuffers, "runtime" do
|
|
492
550
|
end
|
493
551
|
|
494
552
|
it "ignores and passes on unknown enum values" do
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
V1 = 1
|
500
|
-
V2 = 2
|
501
|
-
|
502
|
-
optional E field_1
|
503
|
-
|
504
|
-
|
553
|
+
module TehUnknown
|
554
|
+
class MyResult < ProtocolBuffers::Message
|
555
|
+
module E
|
556
|
+
include ProtocolBuffers::Enum
|
557
|
+
V1 = 1
|
558
|
+
V2 = 2
|
559
|
+
end
|
560
|
+
optional E, :field_1, 1
|
561
|
+
end
|
562
|
+
end
|
505
563
|
|
506
564
|
res1 = TehUnknown::MyResult.new(:field_1 => TehUnknown::MyResult::E::V2)
|
507
565
|
serialized = res1.to_s
|
508
566
|
|
509
567
|
# remove field_2 to pretend we never knew about it
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
V1 = 1
|
515
|
-
|
516
|
-
optional E field_1
|
517
|
-
|
518
|
-
|
568
|
+
module TehUnknown2
|
569
|
+
class MyResult < ProtocolBuffers::Message
|
570
|
+
module E
|
571
|
+
include ProtocolBuffers::Enum
|
572
|
+
V1 = 1
|
573
|
+
end
|
574
|
+
optional E, :field_1, 1
|
575
|
+
end
|
576
|
+
end
|
519
577
|
|
520
578
|
res2 = nil
|
521
579
|
proc do
|
@@ -528,32 +586,21 @@ describe ProtocolBuffers, "runtime" do
|
|
528
586
|
serialized2 = res2.to_s
|
529
587
|
|
530
588
|
# now we know about field_2 again
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
V1 = 1
|
536
|
-
V2 = 2
|
537
|
-
|
538
|
-
optional E field_1
|
539
|
-
|
540
|
-
|
589
|
+
module TehUnknown3
|
590
|
+
class MyResult < ProtocolBuffers::Message
|
591
|
+
module E
|
592
|
+
include ProtocolBuffers::Enum
|
593
|
+
V1 = 1
|
594
|
+
V2 = 2
|
595
|
+
end
|
596
|
+
optional E, :field_1, 1
|
597
|
+
end
|
598
|
+
end
|
541
599
|
|
542
600
|
res3 = TehUnknown3::MyResult.parse(serialized2)
|
543
601
|
res3.field_1.should == 2
|
544
602
|
end
|
545
603
|
|
546
|
-
it "can compile and instantiate a message in a package with under_scores" do
|
547
|
-
Object.send(:remove_const, :UnderScore) if defined?(UnderScore)
|
548
|
-
|
549
|
-
ProtocolBuffers::Compiler.compile_and_load(
|
550
|
-
File.join(File.dirname(__FILE__), "proto_files", "under_score_package.proto"))
|
551
|
-
|
552
|
-
proc do
|
553
|
-
under_test = UnderScore::UnderTest.new
|
554
|
-
end.should_not raise_error()
|
555
|
-
end
|
556
|
-
|
557
604
|
describe "Message#valid?" do
|
558
605
|
it "should validate sub-messages" do
|
559
606
|
f = Featureful::A.new
|