bindata 0.11.0 → 0.11.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.

Potentially problematic release.


This version of bindata might be problematic. Click here for more details.

@@ -7,10 +7,8 @@ require 'bindata'
7
7
  describe BinData::SingleValue, "when defining" do
8
8
  it "should allow inheriting from deprecated SingleValue" do
9
9
  lambda {
10
- eval <<-END
11
- class SubclassSingleValue < BinData::SingleValue
12
- end
13
- END
10
+ class SubclassSingleValue < BinData::SingleValue
11
+ end
14
12
  }.should_not raise_error
15
13
  end
16
14
  end
@@ -18,10 +16,8 @@ end
18
16
  describe BinData::MultiValue, "when defining" do
19
17
  it "should allow inheriting from deprecated MultiValue" do
20
18
  lambda {
21
- eval <<-END
22
- class SubclassMultiValue < BinData::MultiValue
23
- end
24
- END
19
+ class SubclassMultiValue < BinData::MultiValue
20
+ end
25
21
  }.should_not raise_error
26
22
  end
27
23
  end
data/spec/int_spec.rb CHANGED
@@ -138,28 +138,32 @@ share_examples_for "All Integers" do
138
138
  end
139
139
  (@endian == :little) ? str : str.reverse
140
140
  end
141
+
142
+ def create_mapping_of_class_to_nbits(endian, signed)
143
+ base = signed ? "Int" : "Uint"
144
+ signed_sym = signed ? :signed : :unsigned
145
+ endian_str = (endian == :little) ? "le" : "be"
146
+
147
+ result = {}
148
+ result[BinData.const_get("#{base}8")] = 1
149
+ (1 .. 20).each do |nbytes|
150
+ nbits = nbytes * 8
151
+ class_name = "#{base}#{nbits}#{endian_str}"
152
+ BinData::Int.define_class(nbits, endian, signed_sym)
153
+ result[BinData.const_get(class_name)] = nbytes
154
+ end
155
+
156
+ result
157
+ end
141
158
  end
142
159
 
143
160
  describe "All signed big endian integers" do
144
161
  it_should_behave_like "All Integers"
145
162
 
146
163
  before(:all) do
147
- BinData::Integer.define_class(24, :big, :signed)
148
- BinData::Integer.define_class(48, :big, :signed)
149
- BinData::Integer.define_class(96, :big, :signed)
150
164
  @endian = :big
151
165
  @signed = true
152
- @ints = {
153
- BinData::Int8 => 1,
154
- BinData::Int8be => 1,
155
- BinData::Int16be => 2,
156
- BinData::Int24be => 3,
157
- BinData::Int32be => 4,
158
- BinData::Int48be => 6,
159
- BinData::Int64be => 8,
160
- BinData::Int96be => 12,
161
- BinData::Int128be => 16,
162
- }
166
+ @ints = create_mapping_of_class_to_nbits(@endian, @signed)
163
167
  end
164
168
  end
165
169
 
@@ -167,22 +171,9 @@ describe "All unsigned big endian integers" do
167
171
  it_should_behave_like "All Integers"
168
172
 
169
173
  before(:all) do
170
- BinData::Integer.define_class(24, :big, :unsigned)
171
- BinData::Integer.define_class(48, :big, :unsigned)
172
- BinData::Integer.define_class(96, :big, :unsigned)
173
174
  @endian = :big
174
175
  @signed = false
175
- @ints = {
176
- BinData::Uint8 => 1,
177
- BinData::Uint8be => 1,
178
- BinData::Uint16be => 2,
179
- BinData::Uint24be => 3,
180
- BinData::Uint32be => 4,
181
- BinData::Uint48be => 6,
182
- BinData::Uint64be => 8,
183
- BinData::Uint96be => 12,
184
- BinData::Uint128be => 16,
185
- }
176
+ @ints = create_mapping_of_class_to_nbits(@endian, @signed)
186
177
  end
187
178
  end
188
179
 
@@ -190,22 +181,9 @@ describe "All signed little endian integers" do
190
181
  it_should_behave_like "All Integers"
191
182
 
192
183
  before(:all) do
193
- BinData::Integer.define_class(24, :little, :signed)
194
- BinData::Integer.define_class(48, :little, :signed)
195
- BinData::Integer.define_class(96, :little, :signed)
196
184
  @endian = :little
197
185
  @signed = true
198
- @ints = {
199
- BinData::Int8 => 1,
200
- BinData::Int8le => 1,
201
- BinData::Int16le => 2,
202
- BinData::Int24le => 3,
203
- BinData::Int32le => 4,
204
- BinData::Int48le => 6,
205
- BinData::Int64le => 8,
206
- BinData::Int96le => 12,
207
- BinData::Int128le => 16,
208
- }
186
+ @ints = create_mapping_of_class_to_nbits(@endian, @signed)
209
187
  end
210
188
  end
211
189
 
@@ -213,41 +191,28 @@ describe "All unsigned little endian integers" do
213
191
  it_should_behave_like "All Integers"
214
192
 
215
193
  before(:all) do
216
- BinData::Integer.define_class(24, :little, :unsigned)
217
- BinData::Integer.define_class(48, :little, :unsigned)
218
- BinData::Integer.define_class(96, :little, :unsigned)
219
194
  @endian = :little
220
195
  @signed = false
221
- @ints = {
222
- BinData::Uint8 => 1,
223
- BinData::Uint8le => 1,
224
- BinData::Uint16le => 2,
225
- BinData::Uint24le => 3,
226
- BinData::Uint32le => 4,
227
- BinData::Uint48le => 6,
228
- BinData::Uint64le => 8,
229
- BinData::Uint96le => 12,
230
- BinData::Uint128le => 16,
231
- }
196
+ @ints = create_mapping_of_class_to_nbits(@endian, @signed)
232
197
  end
233
198
  end
234
199
 
235
200
  describe "Custom defined integers" do
236
201
  it "should fail unless bits are a multiple of 8" do
237
202
  lambda {
238
- BinData::Integer.define_class(7, :little, :unsigned)
203
+ BinData::Int.define_class(7, :little, :unsigned)
239
204
  }.should raise_error
240
205
 
241
206
  lambda {
242
- BinData::Integer.define_class(7, :big, :unsigned)
207
+ BinData::Int.define_class(7, :big, :unsigned)
243
208
  }.should raise_error
244
209
 
245
210
  lambda {
246
- BinData::Integer.define_class(7, :little, :signed)
211
+ BinData::Int.define_class(7, :little, :signed)
247
212
  }.should raise_error
248
213
 
249
214
  lambda {
250
- BinData::Integer.define_class(7, :big, :signed)
215
+ BinData::Int.define_class(7, :big, :signed)
251
216
  }.should raise_error
252
217
  end
253
218
  end
@@ -4,12 +4,8 @@ require File.expand_path(File.join(File.dirname(__FILE__), "spec_common"))
4
4
  require 'bindata'
5
5
 
6
6
  describe BinData::Primitive, "when subclassing" do
7
- before(:all) do
8
- eval <<-END
9
- class SubClassOfPrimitive < BinData::Primitive
10
- expose_methods_for_testing
11
- end
12
- END
7
+ class SubClassOfPrimitive < BinData::Primitive
8
+ expose_methods_for_testing
13
9
  end
14
10
 
15
11
  before(:each) do
@@ -25,57 +21,45 @@ end
25
21
  describe BinData::Primitive, "when defining" do
26
22
  it "should fail on non registered types" do
27
23
  lambda {
28
- eval <<-END
29
- class BadTypePrimitive < BinData::Primitive
30
- non_registered_type :a
31
- end
32
- END
24
+ class BadTypePrimitive < BinData::Primitive
25
+ non_registered_type :a
26
+ end
33
27
  }.should raise_error(TypeError)
34
28
  end
35
29
 
36
30
  it "should fail on duplicate names" do
37
31
  lambda {
38
- eval <<-END
39
- class DuplicateNamePrimitive < BinData::Primitive
40
- int8 :a
41
- int8 :b
42
- int8 :a
43
- end
44
- END
32
+ class DuplicateNamePrimitive < BinData::Primitive
33
+ int8 :a
34
+ int8 :b
35
+ int8 :a
36
+ end
45
37
  }.should raise_error(SyntaxError)
46
38
  end
47
39
 
48
40
  it "should fail when field name shadows an existing method" do
49
41
  lambda {
50
- eval <<-END
51
- class ExistingNamePrimitive < BinData::Primitive
52
- int8 :object_id
53
- end
54
- END
42
+ class ExistingNamePrimitive < BinData::Primitive
43
+ int8 :object_id
44
+ end
55
45
  }.should raise_error(NameError)
56
46
  end
57
47
 
58
48
  it "should fail on unknown endian" do
59
49
  lambda {
60
- eval <<-END
61
- class BadEndianPrimitive < BinData::Primitive
62
- endian 'a bad value'
63
- end
64
- END
50
+ class BadEndianPrimitive < BinData::Primitive
51
+ endian 'a bad value'
52
+ end
65
53
  }.should raise_error(ArgumentError)
66
54
  end
67
55
  end
68
56
 
69
57
  describe BinData::Primitive do
70
- before(:all) do
71
- eval <<-END
72
- class PrimitiveWithEndian < BinData::Primitive
73
- endian :little
74
- int16 :a
75
- def get; self.a; end
76
- def set(v); self.a = v; end
77
- end
78
- END
58
+ class PrimitiveWithEndian < BinData::Primitive
59
+ endian :little
60
+ int16 :a
61
+ def get; self.a; end
62
+ def set(v); self.a = v; end
79
63
  end
80
64
 
81
65
  before(:each) do
@@ -114,14 +98,10 @@ describe BinData::Primitive do
114
98
  end
115
99
 
116
100
  describe BinData::Primitive, "requiring custom parameters" do
117
- before(:all) do
118
- eval <<-END
119
- class PrimitiveWithCustom < BinData::Primitive
120
- int8 :a, :initial_value => :iv
121
- def get; self.a; end
122
- def set(v); self.a = v; end
123
- end
124
- END
101
+ class PrimitiveWithCustom < BinData::Primitive
102
+ int8 :a, :initial_value => :iv
103
+ def get; self.a; end
104
+ def set(v); self.a = v; end
125
105
  end
126
106
 
127
107
  it "should pass parameters correctly" do
@@ -131,16 +111,12 @@ describe BinData::Primitive, "requiring custom parameters" do
131
111
  end
132
112
 
133
113
  describe BinData::Primitive, "with custom mandatory parameters" do
134
- before(:all) do
135
- eval <<-END
136
- class MandatoryPrimitive < BinData::Primitive
137
- mandatory_parameter :arg1
138
-
139
- uint8 :a, :value => :arg1
140
- def get; self.a; end
141
- def set(v); self.a = v; end
142
- end
143
- END
114
+ class MandatoryPrimitive < BinData::Primitive
115
+ mandatory_parameter :arg1
116
+
117
+ uint8 :a, :value => :arg1
118
+ def get; self.a; end
119
+ def set(v); self.a = v; end
144
120
  end
145
121
 
146
122
  it "should raise error if mandatory parameter is not supplied" do
@@ -154,16 +130,12 @@ describe BinData::Primitive, "with custom mandatory parameters" do
154
130
  end
155
131
 
156
132
  describe BinData::Primitive, "with custom default parameters" do
157
- before(:all) do
158
- eval <<-END
159
- class DefaultPrimitive < BinData::Primitive
160
- default_parameter :arg1 => 5
161
-
162
- uint8 :a, :value => :arg1
163
- def get; self.a; end
164
- def set(v); self.a = v; end
165
- end
166
- END
133
+ class DefaultPrimitive < BinData::Primitive
134
+ default_parameter :arg1 => 5
135
+
136
+ uint8 :a, :value => :arg1
137
+ def get; self.a; end
138
+ def set(v); self.a = v; end
167
139
  end
168
140
 
169
141
  it "should not raise error if default parameter is not supplied" do
data/spec/record_spec.rb CHANGED
@@ -6,69 +6,55 @@ require 'bindata'
6
6
  describe BinData::Record, "when defining" do
7
7
  it "should fail on non registered types" do
8
8
  lambda {
9
- eval <<-END
10
- class BadTypeRecord < BinData::Record
11
- non_registerd_type :a
12
- end
13
- END
9
+ class BadTypeRecord < BinData::Record
10
+ non_registerd_type :a
11
+ end
14
12
  }.should raise_error(TypeError)
15
13
  end
16
14
 
17
15
  it "should fail on duplicate names" do
18
16
  lambda {
19
- eval <<-END
20
- class DuplicateNameRecord < BinData::Record
21
- int8 :a
22
- int8 :b
23
- int8 :a
24
- end
25
- END
17
+ class DuplicateNameRecord < BinData::Record
18
+ int8 :a
19
+ int8 :b
20
+ int8 :a
21
+ end
26
22
  }.should raise_error(SyntaxError)
27
23
  end
28
24
 
29
25
  it "should fail on reserved names" do
30
26
  lambda {
31
- eval <<-END
32
- class ReservedNameRecord < BinData::Record
33
- int8 :a
34
- int8 :invert # from Hash.instance_methods
35
- end
36
- END
27
+ class ReservedNameRecord < BinData::Record
28
+ int8 :a
29
+ int8 :invert # from Hash.instance_methods
30
+ end
37
31
  }.should raise_error(NameError)
38
32
  end
39
33
 
40
34
  it "should fail when field name shadows an existing method" do
41
35
  lambda {
42
- eval <<-END
43
- class ExistingNameRecord < BinData::Record
44
- int8 :object_id
45
- end
46
- END
36
+ class ExistingNameRecord < BinData::Record
37
+ int8 :object_id
38
+ end
47
39
  }.should raise_error(NameError)
48
40
  end
49
41
 
50
42
  it "should fail on unknown endian" do
51
43
  lambda {
52
- eval <<-END
53
- class BadEndianRecord < BinData::Record
54
- endian 'a bad value'
55
- end
56
- END
44
+ class BadEndianRecord < BinData::Record
45
+ endian 'a bad value'
46
+ end
57
47
  }.should raise_error(ArgumentError)
58
48
  end
59
49
  end
60
50
 
61
51
  describe BinData::Record, "with hidden fields" do
62
- before(:all) do
63
- eval <<-END
64
- class HiddenRecord < BinData::Record
65
- hide :b, 'c'
66
- int8 :a
67
- int8 'b', :initial_value => 10
68
- int8 :c
69
- int8 :d, :value => :b
70
- end
71
- END
52
+ class HiddenRecord < BinData::Record
53
+ hide :b, 'c'
54
+ int8 :a
55
+ int8 'b', :initial_value => 10
56
+ int8 :c
57
+ int8 :d, :value => :b
72
58
  end
73
59
 
74
60
  before(:each) do
@@ -94,13 +80,9 @@ describe BinData::Record, "with hidden fields" do
94
80
  end
95
81
 
96
82
  describe BinData::Record, "with multiple fields" do
97
- before(:all) do
98
- eval <<-END
99
- class MultiFieldRecord < BinData::Record
100
- int8 :a
101
- int8 :b
102
- end
103
- END
83
+ class MultiFieldRecord < BinData::Record
84
+ int8 :a
85
+ int8 :b
104
86
  end
105
87
 
106
88
  before(:each) do
@@ -162,24 +144,20 @@ describe BinData::Record, "with multiple fields" do
162
144
  end
163
145
 
164
146
  describe BinData::Record, "with nested structs" do
165
- before(:all) do
166
- eval <<-END
167
- class Inner1Record < BinData::Record
168
- int8 :w, :initial_value => 3
169
- int8 :x, :value => :the_val
170
- end
147
+ class Inner1Record < BinData::Record
148
+ int8 :w, :initial_value => 3
149
+ int8 :x, :value => :the_val
150
+ end
171
151
 
172
- class Inner2Record < BinData::Record
173
- int8 :y, :value => lambda { parent.b.w }
174
- int8 :z
175
- end
152
+ class Inner2Record < BinData::Record
153
+ int8 :y, :value => lambda { parent.b.w }
154
+ int8 :z
155
+ end
176
156
 
177
- class RecordOuter < BinData::Record
178
- int8 :a, :initial_value => 6
179
- inner1_record :b, :the_val => :a
180
- inner2_record :c
181
- end
182
- END
157
+ class RecordOuter < BinData::Record
158
+ int8 :a, :initial_value => 6
159
+ inner1_record :b, :the_val => :a
160
+ inner2_record :c
183
161
  end
184
162
 
185
163
  before(:each) do
@@ -206,19 +184,15 @@ describe BinData::Record, "with nested structs" do
206
184
  end
207
185
 
208
186
  describe BinData::Record, "with an endian defined" do
209
- before(:all) do
210
- eval <<-END
211
- class RecordWithEndian < BinData::Record
212
- endian :little
213
-
214
- uint16 :a
215
- float :b
216
- array :c, :type => :int8, :initial_length => 2
217
- choice :d, :choices => [ [:uint16], [:uint32] ], :selection => 1
218
- struct :e, :fields => [ [:uint16, :f], [:uint32be, :g] ]
219
- struct :h, :fields => [ [:struct, :i, {:fields => [[:uint16, :j]]}] ]
220
- end
221
- END
187
+ class RecordWithEndian < BinData::Record
188
+ endian :little
189
+
190
+ uint16 :a
191
+ float :b
192
+ array :c, :type => :int8, :initial_length => 2
193
+ choice :d, :choices => [ [:uint16], [:uint32] ], :selection => 1
194
+ struct :e, :fields => [ [:uint16, :f], [:uint32be, :g] ]
195
+ struct :h, :fields => [ [:struct, :i, {:fields => [[:uint16, :j]]}] ]
222
196
  end
223
197
 
224
198
  before(:each) do
@@ -242,15 +216,11 @@ describe BinData::Record, "with an endian defined" do
242
216
  end
243
217
 
244
218
  describe BinData::Record, "defined recursively" do
245
- before(:all) do
246
- eval <<-END
247
- class RecursiveRecord < BinData::Record
248
- endian :big
249
- uint16 :val
250
- uint8 :has_nxt, :value => lambda { nxt.clear? ? 0 : 1 }
251
- recursive_record :nxt, :onlyif => lambda { has_nxt > 0 }
252
- end
253
- END
219
+ class RecursiveRecord < BinData::Record
220
+ endian :big
221
+ uint16 :val
222
+ uint8 :has_nxt, :value => lambda { nxt.clear? ? 0 : 1 }
223
+ recursive_record :nxt, :onlyif => lambda { has_nxt > 0 }
254
224
  end
255
225
 
256
226
  it "should be able to be created" do
@@ -282,14 +252,10 @@ describe BinData::Record, "defined recursively" do
282
252
  end
283
253
 
284
254
  describe BinData::Record, "with custom mandatory parameters" do
285
- before(:all) do
286
- eval <<-END
287
- class MandatoryRecord < BinData::Record
288
- mandatory_parameter :arg1
255
+ class MandatoryRecord < BinData::Record
256
+ mandatory_parameter :arg1
289
257
 
290
- uint8 :a, :value => :arg1
291
- end
292
- END
258
+ uint8 :a, :value => :arg1
293
259
  end
294
260
 
295
261
  it "should raise error if mandatory parameter is not supplied" do
@@ -303,14 +269,10 @@ describe BinData::Record, "with custom mandatory parameters" do
303
269
  end
304
270
 
305
271
  describe BinData::Record, "with custom default parameters" do
306
- before(:all) do
307
- eval <<-END
308
- class DefaultRecord < BinData::Record
309
- default_parameter :arg1 => 5
272
+ class DefaultRecord < BinData::Record
273
+ default_parameter :arg1 => 5
310
274
 
311
- uint8 :a, :value => :arg1
312
- end
313
- END
275
+ uint8 :a, :value => :arg1
314
276
  end
315
277
 
316
278
  it "should not raise error if default parameter is not supplied" do
@@ -329,14 +291,10 @@ describe BinData::Record, "with custom default parameters" do
329
291
  end
330
292
 
331
293
  describe BinData::Record, "with :onlyif" do
332
- before(:all) do
333
- eval <<-END
334
- class OnlyIfRecord < BinData::Record
335
- uint8 :a, :initial_value => 3
336
- uint8 :b, :initial_value => 5, :onlyif => lambda { a == 3 }
337
- uint8 :c, :initial_value => 7, :onlyif => lambda { a != 3 }
338
- end
339
- END
294
+ class OnlyIfRecord < BinData::Record
295
+ uint8 :a, :initial_value => 3
296
+ uint8 :b, :initial_value => 5, :onlyif => lambda { a == 3 }
297
+ uint8 :c, :initial_value => 7, :onlyif => lambda { a != 3 }
340
298
  end
341
299
 
342
300
  before(:each) do