beefcake 0.1.0

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.
@@ -0,0 +1,44 @@
1
+ require 'beefcake/buffer'
2
+
3
+ class BufferTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @buf = Beefcake::Buffer.new
7
+ end
8
+
9
+ def test_simple
10
+ assert_equal "", @buf.to_s
11
+
12
+ @buf << "asdf"
13
+ assert_equal "asdf", @buf.to_s
14
+ assert_equal "asdf", @buf.to_str
15
+
16
+ @buf.buf = ""
17
+ assert_equal "", @buf.to_s
18
+ end
19
+
20
+ def test_wire_for
21
+ assert_equal 0, Beefcake::Buffer.wire_for(:int32)
22
+ assert_equal 0, Beefcake::Buffer.wire_for(:uint32)
23
+ assert_equal 0, Beefcake::Buffer.wire_for(:sint32)
24
+ assert_equal 0, Beefcake::Buffer.wire_for(:int64)
25
+ assert_equal 0, Beefcake::Buffer.wire_for(:uint64)
26
+ assert_equal 0, Beefcake::Buffer.wire_for(:sint64)
27
+
28
+ assert_equal 1, Beefcake::Buffer.wire_for(:fixed64)
29
+ assert_equal 1, Beefcake::Buffer.wire_for(:sfixed64)
30
+ assert_equal 1, Beefcake::Buffer.wire_for(:double)
31
+
32
+ assert_equal 2, Beefcake::Buffer.wire_for(:string)
33
+ assert_equal 2, Beefcake::Buffer.wire_for(:bytes)
34
+
35
+ assert_equal 5, Beefcake::Buffer.wire_for(:fixed32)
36
+ assert_equal 5, Beefcake::Buffer.wire_for(:sfixed32)
37
+ assert_equal 5, Beefcake::Buffer.wire_for(:float)
38
+
39
+ assert_raises Beefcake::Buffer::UnknownType do
40
+ Beefcake::Buffer.wire_for(:asdf)
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,280 @@
1
+ require 'beefcake'
2
+
3
+ class NumericsMessage
4
+ include Beefcake::Message
5
+
6
+ required :int32, :int32, 1
7
+ required :uint32, :uint32, 2
8
+ required :sint32, :sint32, 3
9
+ required :fixed32, :fixed32, 4
10
+ required :sfixed32, :sfixed32, 5
11
+
12
+ required :int64, :int64, 6
13
+ required :uint64, :uint64, 7
14
+ required :sint64, :sint64, 8
15
+ required :fixed64, :fixed64, 9
16
+ required :sfixed64, :sfixed64, 10
17
+ end
18
+
19
+
20
+ class LendelsMessage
21
+ include Beefcake::Message
22
+
23
+ required :string, :string, 1
24
+ required :bytes, :bytes, 2
25
+ end
26
+
27
+
28
+ class SimpleMessage
29
+ include Beefcake::Message
30
+
31
+ optional :a, :int32, 1
32
+ end
33
+
34
+
35
+ class CompositeMessage
36
+ include Beefcake::Message
37
+
38
+ required :encodable, SimpleMessage, 1
39
+ end
40
+
41
+
42
+ class EnumsMessage
43
+ include Beefcake::Message
44
+
45
+ module X
46
+ A = 1
47
+ end
48
+
49
+ required :a, X, 1
50
+ end
51
+
52
+
53
+ class EnumsDefaultMessage
54
+ include Beefcake::Message
55
+
56
+ module X
57
+ A = 1
58
+ B = 2
59
+ end
60
+
61
+ optional :a, X, 1, :default => X::B
62
+ end
63
+
64
+
65
+ class RepeatedMessage
66
+ include Beefcake::Message
67
+
68
+ repeated :a, :int32, 1
69
+ end
70
+
71
+
72
+ class PackedRepeatedMessage
73
+ include Beefcake::Message
74
+
75
+ repeated :a, :int32, 1, :packed => true
76
+ end
77
+
78
+
79
+ class MessageTest < Test::Unit::TestCase
80
+ B = Beefcake::Buffer
81
+
82
+ ## Encoding
83
+ def test_encode_numerics
84
+ buf = Beefcake::Buffer.new
85
+
86
+ buf.append(:int32, B::MaxInt32, 1)
87
+ buf.append(:uint32, B::MaxUint32, 2)
88
+ buf.append(:sint32, B::MinInt32, 3)
89
+ buf.append(:fixed32, B::MaxInt32, 4)
90
+ buf.append(:sfixed32, B::MinInt32, 5)
91
+ buf.append(:int64, B::MaxInt64, 6)
92
+ buf.append(:uint64, B::MaxUint64, 7)
93
+ buf.append(:sint64, B::MinInt64, 8)
94
+ buf.append(:fixed64, B::MaxInt64, 9)
95
+ buf.append(:sfixed64, B::MinInt64, 10)
96
+
97
+ msg = NumericsMessage.new({
98
+ :int32 => B::MaxInt32,
99
+ :uint32 => B::MaxUint32,
100
+ :sint32 => B::MinInt32,
101
+ :fixed32 => B::MaxInt32,
102
+ :sfixed32 => B::MinInt32,
103
+
104
+ :int64 => B::MaxInt64,
105
+ :uint64 => B::MaxUint64,
106
+ :sint64 => B::MinInt64,
107
+ :fixed64 => B::MaxInt64,
108
+ :sfixed64 => B::MinInt64
109
+ })
110
+
111
+ assert_equal buf.to_s, msg.encode.to_s
112
+ end
113
+
114
+ def test_encode_strings
115
+ buf = Beefcake::Buffer.new
116
+
117
+ buf.append(:string, "testing", 1)
118
+ buf.append(:bytes, "unixisawesome", 2)
119
+
120
+ msg = LendelsMessage.new({
121
+ :string => "testing",
122
+ :bytes => "unixisawesome"
123
+ })
124
+
125
+ assert_equal buf.to_s, msg.encode.to_s
126
+ end
127
+
128
+ def test_encode_string_composite
129
+ buf1 = Beefcake::Buffer.new
130
+ buf1.append(:int32, 123, 1)
131
+
132
+ buf2 = Beefcake::Buffer.new
133
+ buf2.append(:string, buf1, 1)
134
+
135
+ msg = CompositeMessage.new(
136
+ :encodable => SimpleMessage.new(:a => 123)
137
+ )
138
+
139
+ assert_equal buf2.to_s, msg.encode.to_s
140
+ end
141
+
142
+ def test_encode_to_string
143
+ msg = SimpleMessage.new :a => 123
144
+ str = ""
145
+ msg.encode(str)
146
+ assert_equal "\b{", str
147
+ end
148
+
149
+ def test_encode_enum
150
+ buf = Beefcake::Buffer.new
151
+ buf.append(:int32, 2, 1)
152
+
153
+ msg = EnumsMessage.new :a => EnumsMessage::X::A
154
+ assert_equal "\b\001", msg.encode.to_s
155
+ end
156
+
157
+ def test_encode_invalid_enum_value
158
+ assert_raises Beefcake::Message::InvalidValueError do
159
+ EnumsMessage.new(:a => 99).encode
160
+ end
161
+ end
162
+
163
+ def test_encode_unset_required_field
164
+ assert_raises Beefcake::Message::RequiredFieldNotSetError do
165
+ NumericsMessage.new.encode
166
+ end
167
+ end
168
+
169
+ def test_encode_repeated_field
170
+ buf = Beefcake::Buffer.new
171
+
172
+ buf.append(:int32, 1, 1)
173
+ buf.append(:int32, 2, 1)
174
+ buf.append(:int32, 3, 1)
175
+ buf.append(:int32, 4, 1)
176
+ buf.append(:int32, 5, 1)
177
+
178
+ msg = RepeatedMessage.new :a => [1, 2, 3, 4, 5]
179
+
180
+ assert_equal buf.to_s, msg.encode.to_s
181
+ end
182
+
183
+ def test_encode_packed_repeated_field
184
+ buf = Beefcake::Buffer.new
185
+
186
+ # Varint
187
+ buf.append_info(1, 0)
188
+
189
+ # Give size in bytes
190
+ buf.append_uint64 5
191
+
192
+ # Values
193
+ buf.append_int32 1
194
+ buf.append_int32 2
195
+ buf.append_int32 3
196
+ buf.append_int32 4
197
+ buf.append_int32 5
198
+
199
+ msg = PackedRepeatedMessage.new :a => [1, 2, 3, 4, 5]
200
+
201
+ assert_equal buf.to_s, msg.encode.to_s
202
+ end
203
+
204
+ ## Decoding
205
+ def test_decode_numerics
206
+ msg = NumericsMessage.new({
207
+ :int32 => B::MaxInt32,
208
+ :uint32 => B::MaxUint32,
209
+ :sint32 => B::MinInt32,
210
+ :fixed32 => B::MaxInt32,
211
+ :sfixed32 => B::MinInt32,
212
+
213
+ :int64 => B::MaxInt64,
214
+ :uint64 => B::MaxUint64,
215
+ :sint64 => B::MinInt64,
216
+ :fixed64 => B::MaxInt64,
217
+ :sfixed64 => B::MinInt64
218
+ })
219
+
220
+ got = NumericsMessage.decode(msg.encode)
221
+
222
+ msg.fields.values.each do |fld|
223
+ assert_equal msg[fld.name], got[fld.name], fld.name
224
+ end
225
+ end
226
+
227
+ def test_wire_does_not_match_decoded_info
228
+ buf = Beefcake::Buffer.new
229
+ buf.append(:string, "testing", 1)
230
+
231
+ assert_raises Beefcake::Message::WrongTypeError do
232
+ SimpleMessage.decode(buf)
233
+ end
234
+ end
235
+
236
+ def test_decode_unknown_field_number
237
+ buf = Beefcake::Buffer.new
238
+ buf.append(:string, "testing", 2)
239
+
240
+ msg = SimpleMessage.decode(buf)
241
+
242
+ assert_equal nil, msg.a
243
+ end
244
+
245
+ def test_decode_repeated_field
246
+ msg = RepeatedMessage.new :a => [1, 2, 3, 4, 5]
247
+ got = RepeatedMessage.decode(msg.encode)
248
+
249
+ assert_equal msg.a, got.a
250
+ end
251
+
252
+ def test_decode_packed_repeated_field
253
+ msg = PackedRepeatedMessage.new :a => [1, 2, 3, 4, 5]
254
+ got = PackedRepeatedMessage.decode(msg.encode)
255
+
256
+ assert_equal msg.a, got.a
257
+ end
258
+
259
+ def test_decode_merge
260
+ a = SimpleMessage.new :a => 1
261
+ b = SimpleMessage.new :a => 2
262
+
263
+ x = SimpleMessage.decode(a.encode)
264
+ SimpleMessage.decode(b.encode, x)
265
+
266
+ assert_equal b.a, x.a
267
+ end
268
+
269
+ def test_decode_default
270
+ got = EnumsDefaultMessage.decode("")
271
+ assert_equal EnumsDefaultMessage.fields[1].opts[:default], got.a
272
+ end
273
+
274
+ def test_decode_unset_required_fields
275
+ assert_raises Beefcake::Message::RequiredFieldNotSetError do
276
+ NumericsMessage.decode("")
277
+ end
278
+ end
279
+
280
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: beefcake
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Blake Mizerany
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-21 00:00:00 -08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: crack
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 1
30
+ - 4
31
+ version: 0.1.4
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: ruby-hmac
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 3
44
+ - 2
45
+ version: 0.3.2
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: contest
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 1
58
+ - 2
59
+ version: 0.1.2
60
+ type: :development
61
+ version_requirements: *id003
62
+ description: A sane protobuf library for Ruby
63
+ email:
64
+ executables: []
65
+
66
+ extensions: []
67
+
68
+ extra_rdoc_files:
69
+ - README.md
70
+ - LICENSE
71
+ files:
72
+ - LICENSE
73
+ - README.md
74
+ - lib/beefcake/buffer/base.rb
75
+ - lib/beefcake/buffer/decode.rb
76
+ - lib/beefcake/buffer/encode.rb
77
+ - lib/beefcake/buffer.rb
78
+ - lib/beefcake.rb
79
+ - test/buffer_decode_test.rb
80
+ - test/buffer_encode_test.rb
81
+ - test/buffer_test.rb
82
+ - test/message_test.rb
83
+ has_rdoc: true
84
+ homepage: http://github.com/bmizerany/beefcake
85
+ licenses: []
86
+
87
+ post_install_message:
88
+ rdoc_options:
89
+ - --line-numbers
90
+ - --inline-source
91
+ - --title
92
+ - Sinatra
93
+ - --main
94
+ - README.rdoc
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ segments:
109
+ - 0
110
+ version: "0"
111
+ requirements: []
112
+
113
+ rubyforge_project: beefcake
114
+ rubygems_version: 1.3.6
115
+ signing_key:
116
+ specification_version: 2
117
+ summary: A sane protobuf library for Ruby
118
+ test_files:
119
+ - test/buffer_decode_test.rb
120
+ - test/buffer_encode_test.rb
121
+ - test/buffer_test.rb
122
+ - test/message_test.rb