ruby-protocol-buffers 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|