bindata 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (61) hide show
  1. data/ChangeLog.rdoc +7 -0
  2. data/NEWS.rdoc +11 -0
  3. data/Rakefile +6 -1
  4. data/bindata.gemspec +2 -1
  5. data/doc/manual.md +17 -9
  6. data/examples/gzip.rb +2 -2
  7. data/examples/list.rb +2 -2
  8. data/lib/bindata/alignment.rb +4 -9
  9. data/lib/bindata/array.rb +57 -51
  10. data/lib/bindata/base.rb +13 -110
  11. data/lib/bindata/base_primitive.rb +130 -75
  12. data/lib/bindata/bits.rb +5 -7
  13. data/lib/bindata/choice.rb +24 -32
  14. data/lib/bindata/dsl.rb +1 -6
  15. data/lib/bindata/framework.rb +81 -0
  16. data/lib/bindata/int.rb +5 -7
  17. data/lib/bindata/name.rb +28 -0
  18. data/lib/bindata/offset.rb +42 -53
  19. data/lib/bindata/params.rb +33 -38
  20. data/lib/bindata/struct.rb +2 -6
  21. data/lib/bindata/trace.rb +16 -16
  22. data/lib/bindata/version.rb +1 -1
  23. data/lib/bindata/virtual.rb +3 -3
  24. data/{spec/alignment_spec.rb → test/alignment_test.rb} +17 -16
  25. data/test/array_test.rb +371 -0
  26. data/test/base_primitive_test.rb +312 -0
  27. data/test/base_test.rb +183 -0
  28. data/{spec/bits_spec.rb → test/bits_test.rb} +59 -59
  29. data/test/choice_test.rb +260 -0
  30. data/{spec/spec_common.rb → test/common.rb} +33 -18
  31. data/test/count_bytes_remaining_test.rb +41 -0
  32. data/{spec/deprecated_spec.rb → test/deprecated_test.rb} +5 -7
  33. data/test/float_test.rb +72 -0
  34. data/{spec/int_spec.rb → test/int_test.rb} +34 -43
  35. data/{spec/io_spec.rb → test/io_test.rb} +70 -71
  36. data/{spec/lazy_spec.rb → test/lazy_test.rb} +38 -39
  37. data/test/offset_test.rb +93 -0
  38. data/test/params_test.rb +144 -0
  39. data/{spec/primitive_spec.rb → test/primitive_test.rb} +42 -54
  40. data/{spec/record_spec.rb → test/record_test.rb} +133 -154
  41. data/test/registry_test.rb +104 -0
  42. data/test/rest_test.rb +29 -0
  43. data/test/skip_test.rb +28 -0
  44. data/{spec/string_spec.rb → test/string_test.rb} +96 -97
  45. data/test/stringz_test.rb +127 -0
  46. data/{spec/struct_spec.rb → test/struct_test.rb} +119 -120
  47. data/{spec/system_spec.rb → test/system_test.rb} +66 -106
  48. metadata +39 -38
  49. data/lib/a.rb +0 -24
  50. data/spec/array_spec.rb +0 -331
  51. data/spec/base_primitive_spec.rb +0 -238
  52. data/spec/base_spec.rb +0 -376
  53. data/spec/choice_spec.rb +0 -263
  54. data/spec/count_bytes_remaining_spec.rb +0 -38
  55. data/spec/example.rb +0 -21
  56. data/spec/float_spec.rb +0 -37
  57. data/spec/registry_spec.rb +0 -108
  58. data/spec/rest_spec.rb +0 -26
  59. data/spec/skip_spec.rb +0 -27
  60. data/spec/stringz_spec.rb +0 -118
  61. data/tasks/rspec.rake +0 -17
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require File.expand_path(File.join(File.dirname(__FILE__), "spec_common"))
4
- require 'bindata/lazy'
3
+ require File.expand_path(File.join(File.dirname(__FILE__), "common"))
5
4
 
6
5
  # A mock data object with customizable fields.
7
6
  class MockBinDataObject
@@ -42,33 +41,33 @@ describe BinData::LazyEvaluator, "with no parents" do
42
41
  }
43
42
 
44
43
  it "evaluates raw value when instantiated" do
45
- lazy_eval(5).should == 5
44
+ lazy_eval(5).must_equal 5
46
45
  end
47
46
 
48
47
  it "evaluates raw value" do
49
- lazy_eval(5).should == 5
48
+ lazy_eval(5).must_equal 5
50
49
  end
51
50
 
52
51
  it "evaluates value" do
53
- lazy_eval(lambda { 5 }).should == 5
52
+ lazy_eval(lambda { 5 }).must_equal 5
54
53
  end
55
54
 
56
55
  it "evaluates overrides" do
57
- lazy_eval(lambda { o1 }, :o1 => 'o1').should == 'o1'
56
+ lazy_eval(lambda { o1 }, :o1 => 'o1').must_equal 'o1'
58
57
  end
59
58
 
60
59
  it "does not resolve any unknown methods" do
61
- expect { lazy_eval(lambda { unknown }) }.to raise_error(NameError)
62
- expect { lazy_eval(lambda { m1 }) }.to raise_error(NameError)
63
- expect { lazy_eval(lambda { p1 }) }.to raise_error(NameError)
60
+ lambda { lazy_eval(lambda { unknown }) }.must_raise NameError
61
+ lambda { lazy_eval(lambda { m1 }) }.must_raise NameError
62
+ lambda { lazy_eval(lambda { p1 }) }.must_raise NameError
64
63
  end
65
64
 
66
65
  it "does not have a parent" do
67
- lazy_eval(lambda { parent }).should be_nil
66
+ lazy_eval(lambda { parent }).must_be_nil
68
67
  end
69
68
 
70
69
  it "does not resolve #index" do
71
- expect { lazy_eval(lambda { index }) }.to raise_error(NoMethodError)
70
+ lambda { lazy_eval(lambda { index }) }.must_raise NoMethodError
72
71
  end
73
72
  end
74
73
 
@@ -88,47 +87,47 @@ describe BinData::LazyEvaluator, "with one parent" do
88
87
  }
89
88
 
90
89
  it "evaluates raw value" do
91
- lazy_eval(5).should == 5
90
+ lazy_eval(5).must_equal 5
92
91
  end
93
92
 
94
93
  it "evaluates value" do
95
- lazy_eval(lambda { 5 }).should == 5
94
+ lazy_eval(lambda { 5 }).must_equal 5
96
95
  end
97
96
 
98
97
  it "evaluates overrides before params" do
99
- lazy_eval(lambda { p1 }, :p1 => 'o1').should == 'o1'
98
+ lazy_eval(lambda { p1 }, :p1 => 'o1').must_equal 'o1'
100
99
  end
101
100
 
102
101
  it "evaluates overrides before methods" do
103
- lazy_eval(lambda { m1 }, :m1 => 'o1').should == 'o1'
102
+ lazy_eval(lambda { m1 }, :m1 => 'o1').must_equal 'o1'
104
103
  end
105
104
 
106
105
  it "does not resolve any unknown methods" do
107
- expect { lazy_eval(lambda { unknown }) }.to raise_error(NameError)
106
+ lambda { lazy_eval(lambda { unknown }) }.must_raise NoMethodError
108
107
  end
109
108
 
110
109
  it "resolves parameters in the parent" do
111
- lazy_eval(lambda { p1 }).should == 'Pp1'
110
+ lazy_eval(lambda { p1 }).must_equal 'Pp1'
112
111
  end
113
112
 
114
113
  it "resolves methods in the parent" do
115
- lazy_eval(lambda { m1 }).should == 'Pm1'
114
+ lazy_eval(lambda { m1 }).must_equal 'Pm1'
116
115
  end
117
116
 
118
117
  it "invokes methods in the parent" do
119
- lazy_eval(lambda { echo(p1, m1) }).should == ['Pp1', 'Pm1']
118
+ lazy_eval(lambda { echo(p1, m1) }).must_equal ['Pp1', 'Pm1']
120
119
  end
121
120
 
122
121
  it "resolves parameters in preference to methods in the parent" do
123
- lazy_eval(lambda { com }).should == 'PpC'
122
+ lazy_eval(lambda { com }).must_equal 'PpC'
124
123
  end
125
124
 
126
125
  it "has a parent" do
127
- lazy_eval(lambda { parent }).should_not be_nil
126
+ lazy_eval(lambda { parent }).wont_be_nil
128
127
  end
129
128
 
130
129
  it "does not resolve #index" do
131
- expect { lazy_eval(lambda { index }) }.to raise_error(NoMethodError)
130
+ lambda { lazy_eval(lambda { index }) }.must_raise NoMethodError
132
131
  end
133
132
  end
134
133
 
@@ -160,58 +159,58 @@ describe BinData::LazyEvaluator, "with nested parents" do
160
159
  }
161
160
 
162
161
  it "accepts symbols as a shortcut to lambdas" do
163
- lazy_eval(:p1).should == 'Pp1'
164
- lazy_eval(:p2).should == 'PPp2'
165
- lazy_eval(:m1).should == 'Pm1'
166
- lazy_eval(:m2).should == 'PPm2'
162
+ lazy_eval(:p1).must_equal 'Pp1'
163
+ lazy_eval(:p2).must_equal 'PPp2'
164
+ lazy_eval(:m1).must_equal 'Pm1'
165
+ lazy_eval(:m2).must_equal 'PPm2'
167
166
  end
168
167
 
169
168
  it "does not resolve any unknown methods" do
170
- expect { lazy_eval(lambda { unknown }) }.to raise_error(NameError)
169
+ lambda { lazy_eval(lambda { unknown }) }.must_raise NoMethodError
171
170
  end
172
171
 
173
172
  it "resolves parameters in the parent" do
174
- lazy_eval(lambda { p1 }).should == 'Pp1'
173
+ lazy_eval(lambda { p1 }).must_equal 'Pp1'
175
174
  end
176
175
 
177
176
  it "resolves methods in the parent" do
178
- lazy_eval(lambda { m1 }).should == 'Pm1'
177
+ lazy_eval(lambda { m1 }).must_equal 'Pm1'
179
178
  end
180
179
 
181
180
  it "resolves parameters in the parent's parent" do
182
- lazy_eval(lambda { p2 }).should == 'PPp2'
181
+ lazy_eval(lambda { p2 }).must_equal 'PPp2'
183
182
  end
184
183
 
185
184
  it "resolves methods in the parent's parent" do
186
- lazy_eval(lambda { m2 }).should == 'PPm2'
185
+ lazy_eval(lambda { m2 }).must_equal 'PPm2'
187
186
  end
188
187
 
189
188
  it "invokes methods in the parent" do
190
- lazy_eval(lambda { echo(m1) }).should == ['P', 'Pm1']
189
+ lazy_eval(lambda { echo(m1) }).must_equal ['P', 'Pm1']
191
190
  end
192
191
 
193
192
  it "invokes methods in the parent's parent" do
194
- lazy_eval(lambda { parent.echo(m1) }, { :m1 => 'o1'}).should == ['PP', 'o1']
193
+ lazy_eval(lambda { parent.echo(m1) }, { :m1 => 'o1'}).must_equal ['PP', 'o1']
195
194
  end
196
195
 
197
196
  it "invokes methods in the parent's parent" do
198
- lazy_eval(lambda { echo2(m1) }).should == ['PP2', 'Pm1']
197
+ lazy_eval(lambda { echo2(m1) }).must_equal ['PP2', 'Pm1']
199
198
  end
200
199
 
201
200
  it "resolves parameters in preference to methods in the parent" do
202
- lazy_eval(lambda { com }).should == 'PpC'
201
+ lazy_eval(lambda { com }).must_equal 'PpC'
203
202
  end
204
203
 
205
204
  it "resolves methods in the parent explicitly" do
206
- lazy_eval(lambda { parent.m1 }).should == 'PPm1'
205
+ lazy_eval(lambda { parent.m1 }).must_equal 'PPm1'
207
206
  end
208
207
 
209
208
  it "cascades lambdas " do
210
- lazy_eval(lambda { sym1 }).should == 'PPm2'
211
- lazy_eval(lambda { sym2 }).should == 'PPm2'
209
+ lazy_eval(lambda { sym1 }).must_equal 'PPm2'
210
+ lazy_eval(lambda { sym2 }).must_equal 'PPm2'
212
211
  end
213
212
 
214
213
  it "does not resolve #index" do
215
- expect { lazy_eval(lambda { index }) }.to raise_error(NoMethodError)
214
+ lambda { lazy_eval(lambda { index }) }.must_raise NoMethodError
216
215
  end
217
216
  end
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), "common"))
4
+
5
+ describe BinData::Base, "offsets" do
6
+ class ThreeByteReader < BinData::Base
7
+ def do_read(io)
8
+ @val = io.readbytes(3)
9
+ end
10
+
11
+ def snapshot
12
+ @val
13
+ end
14
+ end
15
+
16
+ class TenByteOffsetBase < BinData::Base
17
+ def self.create(params)
18
+ obj = self.new
19
+ obj.initialize_child(params)
20
+ obj
21
+ end
22
+
23
+ def initialize_child(params)
24
+ @child = ThreeByteReader.new(params, self)
25
+ end
26
+
27
+ def snapshot
28
+ @child.snapshot
29
+ end
30
+
31
+ def do_read(io)
32
+ io.seekbytes(10)
33
+ @child.do_read(io)
34
+ end
35
+
36
+ def clear
37
+ end
38
+ end
39
+
40
+ let(:data) { "0123456789abcdefghijk" }
41
+ let(:io) { StringIO.new(data) }
42
+
43
+ describe "with :check_offset" do
44
+ it "fails when offset is incorrect" do
45
+ io.seek(2)
46
+ obj = TenByteOffsetBase.create(:check_offset => 10 - 4)
47
+ lambda { obj.read(io) }.must_raise BinData::ValidityError
48
+ end
49
+
50
+ it "succeeds when offset is correct" do
51
+ io.seek(3)
52
+ obj = TenByteOffsetBase.create(:check_offset => 10)
53
+ obj.read(io).snapshot.must_equal data[3 + 10, 3]
54
+ end
55
+
56
+ it "fails when :check_offset fails" do
57
+ io.seek(4)
58
+ obj = TenByteOffsetBase.create(:check_offset => lambda { offset == 10 + 1 } )
59
+ lambda { obj.read(io) }.must_raise BinData::ValidityError
60
+ end
61
+
62
+ it "succeeds when :check_offset succeeds" do
63
+ io.seek(5)
64
+ obj = TenByteOffsetBase.create(:check_offset => lambda { offset == 10 } )
65
+ obj.read(io).snapshot.must_equal data[5 + 10, 3]
66
+ end
67
+ end
68
+
69
+ describe "with :adjust_offset" do
70
+ it "is mutually exclusive with :check_offset" do
71
+ params = { :check_offset => 8, :adjust_offset => 8 }
72
+ lambda { TenByteOffsetBase.create(params) }.must_raise ArgumentError
73
+ end
74
+
75
+ it "adjust offset when incorrect" do
76
+ io.seek(2)
77
+ obj = TenByteOffsetBase.create(:adjust_offset => 13)
78
+ obj.read(io).snapshot.must_equal data[2 + 13, 3]
79
+ end
80
+
81
+ it "succeeds when offset is correct" do
82
+ io.seek(3)
83
+ obj = TenByteOffsetBase.create(:adjust_offset => 10)
84
+ obj.read(io).snapshot.must_equal data[3 + 10, 3]
85
+ end
86
+
87
+ it "fails if cannot adjust offset" do
88
+ io.seek(4)
89
+ obj = TenByteOffsetBase.create(:adjust_offset => -5)
90
+ lambda { obj.read(io) }.must_raise BinData::ValidityError
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), "common"))
4
+
5
+
6
+ describe BinData::Base, "parameters" do
7
+ it "fails when parameter name is invalid" do
8
+ lambda {
9
+ class InvalidParameterNameBase < BinData::Base
10
+ optional_parameter :eval # i.e. Kernel#eval
11
+ end
12
+ }.must_raise NameError
13
+ end
14
+
15
+ it "fails when parameter has nil value" do
16
+ lambda { BinData::Base.new(:a => nil) }.must_raise ArgumentError
17
+ end
18
+ end
19
+
20
+ describe BinData::Base, "#has_parameter?" do
21
+ it "true for existing parameters" do
22
+ obj = BinData::Base.new(:a => 3)
23
+ assert obj.has_parameter?(:a)
24
+ end
25
+
26
+ it "false for non-existing parameters" do
27
+ obj = BinData::Base.new
28
+ refute obj.has_parameter?(:a)
29
+ end
30
+ end
31
+
32
+ describe BinData::Base, "#get_parameter" do
33
+ it "retrieves parameter values" do
34
+ obj = BinData::Base.new(:a => 3)
35
+ obj.get_parameter(:a).must_equal 3
36
+ end
37
+
38
+ it "retrieves parameter values with string keys" do
39
+ obj = BinData::Base.new('a' => 3)
40
+ obj.get_parameter(:a).must_equal 3
41
+ end
42
+
43
+ it "returns nil for non existing parameters" do
44
+ obj = BinData::Base.new
45
+ obj.get_parameter(:a).must_be_nil
46
+ end
47
+
48
+ it "wont eval parameters" do
49
+ obj = BinData::Base.new(:a => lambda { 3 })
50
+ assert_kind_of Proc, obj.get_parameter(:a)
51
+ end
52
+ end
53
+
54
+ describe BinData::Base, "#eval_parameter" do
55
+ it "evals the parameter" do
56
+ obj = BinData::Base.new(:a => lambda { 3 })
57
+ obj.eval_parameter(:a).must_equal 3
58
+ end
59
+
60
+ it "returns nil for a non existing parameter" do
61
+ obj = BinData::Base.new
62
+ obj.eval_parameter(:a).must_be_nil
63
+ end
64
+ end
65
+
66
+ describe BinData::Base, ".mandatory_parameters" do
67
+ class MandatoryBase < BinData::Base
68
+ mandatory_parameter :p1
69
+ mandatory_parameter :p2
70
+ end
71
+
72
+ it "fails when not all mandatory parameters are present" do
73
+ params = {:p1 => "a", :xx => "b" }
74
+ lambda { MandatoryBase.new(params) }.must_raise ArgumentError
75
+ end
76
+
77
+ it "fails when no mandatory parameters are present" do
78
+ lambda { MandatoryBase.new() }.must_raise ArgumentError
79
+ end
80
+ end
81
+
82
+ describe BinData::Base, ".default_parameters" do
83
+ class DefaultBase < BinData::Base
84
+ default_parameter :p1 => "a"
85
+ end
86
+
87
+ it "uses default parameters when not specified" do
88
+ obj = DefaultBase.new
89
+ obj.eval_parameter(:p1).must_equal "a"
90
+ end
91
+
92
+ it "can override default parameters" do
93
+ obj = DefaultBase.new(:p1 => "b")
94
+ obj.eval_parameter(:p1).must_equal "b"
95
+ end
96
+ end
97
+
98
+ describe BinData::Base, ".mutually_exclusive_parameters" do
99
+ class MutexParamBase < BinData::Base
100
+ optional_parameters :p1, :p2, :p3
101
+ mutually_exclusive_parameters :p1, :p2, :p3
102
+ end
103
+
104
+ it "fails when any two of those parameters are present" do
105
+ lambda { MutexParamBase.new(:p1 => "a", :p2 => "b") }.must_raise ArgumentError
106
+ lambda { MutexParamBase.new(:p1 => "a", :p3 => "c") }.must_raise ArgumentError
107
+ lambda { MutexParamBase.new(:p2 => "b", :p3 => "c") }.must_raise ArgumentError
108
+ end
109
+ end
110
+
111
+ describe BinData::Base, "subclassing" do
112
+ class ParamLevel1Base < BinData::Base
113
+ optional_parameter :p1
114
+ end
115
+
116
+ class ParamLevel2Base < ParamLevel1Base
117
+ optional_parameter :p2
118
+ end
119
+
120
+ it "inherits parameters" do
121
+ accepted = ParamLevel2Base.accepted_parameters.all
122
+ accepted.must_include :p1
123
+ accepted.must_include :p2
124
+ end
125
+ end
126
+
127
+ describe BinData::Base, "subclassing when skipping a level" do
128
+ class ParamLevel1Base < BinData::Base
129
+ optional_parameter :p1
130
+ end
131
+
132
+ class ParamLevel2Base < ParamLevel1Base
133
+ end
134
+
135
+ class ParamLevel3Base < ParamLevel2Base
136
+ optional_parameter :p2
137
+ end
138
+
139
+ it "inherits parameters" do
140
+ accepted = ParamLevel3Base.accepted_parameters.all
141
+ accepted.must_include :p1
142
+ accepted.must_include :p2
143
+ end
144
+ end
@@ -1,13 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require File.expand_path(File.join(File.dirname(__FILE__), "spec_common"))
4
- require 'bindata'
3
+ require File.expand_path(File.join(File.dirname(__FILE__), "common"))
5
4
 
6
5
  describe BinData::Primitive do
7
6
  it "is not registered" do
8
- expect {
7
+ lambda {
9
8
  BinData::RegisteredClasses.lookup("Primitive")
10
- }.to raise_error(BinData::UnRegisteredTypeError)
9
+ }.must_raise BinData::UnRegisteredTypeError
11
10
  end
12
11
  end
13
12
 
@@ -16,11 +15,11 @@ describe BinData::Primitive, "all subclasses" do
16
15
  expose_methods_for_testing
17
16
  end
18
17
 
19
- subject { SubClassOfPrimitive.new }
18
+ let(:obj) { SubClassOfPrimitive.new }
20
19
 
21
20
  it "raise errors on unimplemented methods" do
22
- expect { subject.set(nil) }.to raise_error(NotImplementedError)
23
- expect { subject.get }.to raise_error(NotImplementedError)
21
+ lambda { obj.set(nil) }.must_raise NotImplementedError
22
+ lambda { obj.get }.must_raise NotImplementedError
24
23
  end
25
24
  end
26
25
 
@@ -30,9 +29,7 @@ describe BinData::Primitive, "when defining with errors" do
30
29
  class BadTypePrimitive < BinData::Primitive
31
30
  non_registered_type :a
32
31
  end
33
- }.should raise_error_on_line(TypeError, 2) { |err|
34
- err.message.should == "unknown type 'non_registered_type' in #{BadTypePrimitive}"
35
- }
32
+ }.must_raise_on_line TypeError, 2, "unknown type 'non_registered_type' in BadTypePrimitive"
36
33
  end
37
34
 
38
35
  it "fails on duplicate names" do
@@ -42,9 +39,7 @@ describe BinData::Primitive, "when defining with errors" do
42
39
  int8 :b
43
40
  int8 :a
44
41
  end
45
- }.should raise_error_on_line(SyntaxError, 4) { |err|
46
- err.message.should == "duplicate field 'a' in #{DuplicateNamePrimitive}"
47
- }
42
+ }.must_raise_on_line SyntaxError, 4, "duplicate field 'a' in DuplicateNamePrimitive"
48
43
  end
49
44
 
50
45
  it "fails when field name shadows an existing method" do
@@ -52,9 +47,7 @@ describe BinData::Primitive, "when defining with errors" do
52
47
  class ExistingNamePrimitive < BinData::Primitive
53
48
  int8 :object_id
54
49
  end
55
- }.should raise_error_on_line(NameError, 2) { |err|
56
- err.message.should == "field 'object_id' shadows an existing method in #{ExistingNamePrimitive}"
57
- }
50
+ }.must_raise_on_line NameError, 2, "field 'object_id' shadows an existing method in ExistingNamePrimitive"
58
51
  end
59
52
 
60
53
  it "fails on unknown endian" do
@@ -62,9 +55,7 @@ describe BinData::Primitive, "when defining with errors" do
62
55
  class BadEndianPrimitive < BinData::Primitive
63
56
  endian 'a bad value'
64
57
  end
65
- }.should raise_error_on_line(ArgumentError, 2) { |err|
66
- err.message.should == "unknown value for endian 'a bad value' in #{BadEndianPrimitive}"
67
- }
58
+ }.must_raise_on_line ArgumentError, 2, "unknown value for endian 'a bad value' in BadEndianPrimitive"
68
59
  end
69
60
  end
70
61
 
@@ -76,50 +67,51 @@ describe BinData::Primitive do
76
67
  def set(v); self.a = v; end
77
68
  end
78
69
 
79
- subject { PrimitiveWithEndian.new }
70
+ let(:obj) { PrimitiveWithEndian.new }
80
71
 
81
72
  it "assigns value" do
82
- subject.value = 5
83
- subject.value.should == 5
73
+ obj.value = 5
74
+ obj.value.must_equal 5
84
75
  end
85
76
 
86
77
  it "produces binary string" do
87
- subject.assign(5)
88
- subject.to_binary_s.should == "\x05\x00"
78
+ obj.assign(5)
79
+ obj.to_binary_s.must_equal "\x05\x00"
89
80
  end
90
81
 
91
82
  it "reads value" do
92
- subject.read("\x00\x01")
93
- subject.should == 0x100
83
+ obj.read("\x00\x01")
84
+ obj.must_equal 0x100
94
85
  end
95
86
 
96
87
  it "accepts standard parameters" do
97
- subject = PrimitiveWithEndian.new(:initial_value => 2)
98
- subject.to_binary_s.should == "\x02\x00"
88
+ obj = PrimitiveWithEndian.new(:initial_value => 2)
89
+ obj.to_binary_s.must_equal "\x02\x00"
99
90
  end
100
91
 
101
92
  it "returns num_bytes" do
102
- subject.num_bytes.should == 2
93
+ obj.num_bytes.must_equal 2
103
94
  end
104
95
 
105
96
  it "raises error on missing methods" do
106
- expect {
107
- subject.does_not_exist
108
- }.to raise_error(NoMethodError)
97
+ lambda {
98
+ obj.does_not_exist
99
+ }.must_raise NoMethodError
109
100
  end
110
101
 
111
102
  it "uses read value whilst reading" do
112
- subject = PrimitiveWithEndian.new(:value => 2)
113
- subject.read "\x05\x00"
114
- subject.should == 2
103
+ obj = PrimitiveWithEndian.new(:value => 2)
104
+ obj.read "\x05\x00"
105
+ obj.must_equal 2
115
106
 
116
- subject.stub(:reading?).and_return(true)
117
- subject.should == 5
107
+ obj.stub :reading?, true do
108
+ obj.must_equal 5
109
+ end
118
110
  end
119
111
 
120
112
  it "behaves as primitive" do
121
- subject.assign(5)
122
- (2 + subject).should == 7
113
+ obj.assign(5)
114
+ (2 + obj).must_equal 7
123
115
  end
124
116
  end
125
117
 
@@ -131,8 +123,8 @@ describe BinData::Primitive, "requiring custom parameters" do
131
123
  end
132
124
 
133
125
  it "passes parameters correctly" do
134
- subject = PrimitiveWithCustom.new(:iv => 5)
135
- subject.should == 5
126
+ obj = PrimitiveWithCustom.new(:iv => 5)
127
+ obj.must_equal 5
136
128
  end
137
129
  end
138
130
 
@@ -146,12 +138,12 @@ describe BinData::Primitive, "with custom mandatory parameters" do
146
138
  end
147
139
 
148
140
  it "raises error if mandatory parameter is not supplied" do
149
- expect { MandatoryPrimitive.new }.to raise_error(ArgumentError)
141
+ lambda { MandatoryPrimitive.new }.must_raise ArgumentError
150
142
  end
151
143
 
152
144
  it "uses mandatory parameter" do
153
- subject = MandatoryPrimitive.new(:arg1 => 5)
154
- subject.should == 5
145
+ obj = MandatoryPrimitive.new(:arg1 => 5)
146
+ obj.must_equal 5
155
147
  end
156
148
  end
157
149
 
@@ -164,18 +156,14 @@ describe BinData::Primitive, "with custom default parameters" do
164
156
  def set(v); self.a = v; end
165
157
  end
166
158
 
167
- it "does not raise error if default parameter is not supplied" do
168
- expect { DefaultPrimitive.new }.not_to raise_error(ArgumentError)
169
- end
170
-
171
159
  it "uses default parameter" do
172
- subject = DefaultPrimitive.new
173
- subject.should == 5
160
+ obj = DefaultPrimitive.new
161
+ obj.must_equal 5
174
162
  end
175
163
 
176
164
  it "overrides default parameter" do
177
- subject = DefaultPrimitive.new(:arg1 => 7)
178
- subject.should == 7
165
+ obj = DefaultPrimitive.new(:arg1 => 7)
166
+ obj.must_equal 7
179
167
  end
180
168
  end
181
169
 
@@ -192,11 +180,11 @@ describe BinData::Primitive, "subclassed with default parameter" do
192
180
 
193
181
  it "overrides initial_value" do
194
182
  a = ChildDerivedPrimitive.new(:initial_value => 7)
195
- a.to_binary_s.should == "\000\007"
183
+ a.to_binary_s.must_equal "\000\007"
196
184
  end
197
185
 
198
186
  it "uses default parameter" do
199
187
  a = ChildDerivedPrimitive.new
200
- a.to_binary_s.should == "\000\005"
188
+ a.to_binary_s.must_equal "\000\005"
201
189
  end
202
190
  end