bindata 0.9.0 → 0.9.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.
- data/ChangeLog +9 -3
- data/README +10 -0
- data/examples/gzip.rb +32 -45
- data/lib/bindata.rb +2 -1
- data/lib/bindata/array.rb +51 -51
- data/lib/bindata/base.rb +69 -39
- data/lib/bindata/bits.rb +807 -0
- data/lib/bindata/choice.rb +3 -3
- data/lib/bindata/float.rb +2 -2
- data/lib/bindata/int.rb +5 -5
- data/lib/bindata/io.rb +192 -0
- data/lib/bindata/rest.rb +1 -1
- data/lib/bindata/single.rb +42 -53
- data/lib/bindata/string.rb +1 -1
- data/lib/bindata/stringz.rb +1 -1
- data/lib/bindata/struct.rb +45 -37
- data/spec/array_spec.rb +37 -0
- data/spec/base_spec.rb +34 -17
- data/spec/bits_spec.rb +139 -0
- data/spec/io_spec.rb +288 -0
- data/spec/single_spec.rb +4 -3
- data/spec/string_spec.rb +2 -1
- data/spec/struct_spec.rb +25 -0
- metadata +6 -2
data/spec/single_spec.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require File.expand_path(File.dirname(__FILE__)) + '/spec_common'
|
4
|
+
require 'bindata/io'
|
4
5
|
require 'bindata/single'
|
5
6
|
|
6
7
|
# An implementation of a unsigned 4 byte integer.
|
7
8
|
class ConcreteSingle < BinData::Single
|
8
9
|
def val_to_str(val) [val].pack("V") end
|
9
|
-
def read_val(io) readbytes(
|
10
|
+
def read_val(io) io.readbytes(4).unpack("V")[0] end
|
10
11
|
def sensible_default() 0 end
|
11
12
|
|
12
13
|
def in_read?() @in_read end
|
@@ -22,7 +23,7 @@ describe BinData::Single do
|
|
22
23
|
it "should conform to rule 2 for returning a value" do
|
23
24
|
io = StringIO.new([42].pack("V"))
|
24
25
|
data = ConcreteSingle.new(:value => 5)
|
25
|
-
data.do_read(io)
|
26
|
+
data.do_read(BinData::IO.new(io))
|
26
27
|
data.should be_in_read
|
27
28
|
data.value.should == 42
|
28
29
|
end
|
@@ -159,7 +160,7 @@ describe BinData::Single, "with :value" do
|
|
159
160
|
|
160
161
|
it "should change during reading" do
|
161
162
|
io = StringIO.new([56].pack("V"))
|
162
|
-
@data.do_read(io)
|
163
|
+
@data.do_read(BinData::IO.new(io))
|
163
164
|
@data.value.should == 56
|
164
165
|
@data.done_read
|
165
166
|
end
|
data/spec/string_spec.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require File.expand_path(File.dirname(__FILE__)) + '/spec_common'
|
4
|
+
require 'bindata/io'
|
4
5
|
require 'bindata/string'
|
5
6
|
|
6
7
|
describe BinData::String, "with mutually exclusive parameters" do
|
@@ -146,7 +147,7 @@ describe BinData::String, "with :read_length and :value" do
|
|
146
147
|
it "should return read value before calling done_read" do
|
147
148
|
io = StringIO.new("ABCDEFGHIJKLMNOPQRST")
|
148
149
|
|
149
|
-
@str.do_read(io)
|
150
|
+
@str.do_read(BinData::IO.new(io))
|
150
151
|
@str.value.should == "ABCDE"
|
151
152
|
|
152
153
|
@str.done_read
|
data/spec/struct_spec.rb
CHANGED
@@ -254,3 +254,28 @@ describe BinData::Struct, "with an endian defined" do
|
|
254
254
|
io.read.should == expected
|
255
255
|
end
|
256
256
|
end
|
257
|
+
|
258
|
+
describe BinData::Struct, "with bit fields" do
|
259
|
+
before(:each) do
|
260
|
+
@params = { :fields => [ [:bit1le, :a], [:bit2le, :b] ] }
|
261
|
+
@obj = BinData::Struct.new(@params)
|
262
|
+
@obj.a = 1
|
263
|
+
@obj.b = 2
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should return num_bytes" do
|
267
|
+
@obj.num_bytes.should == 1
|
268
|
+
end
|
269
|
+
|
270
|
+
it "should write" do
|
271
|
+
@obj.to_s.should == [0b0000_0101].pack("C")
|
272
|
+
end
|
273
|
+
|
274
|
+
it "should read" do
|
275
|
+
str = [0b0000_0110].pack("C")
|
276
|
+
@obj.read(str)
|
277
|
+
@obj.a.should == 0
|
278
|
+
@obj.b.should == 3
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: bindata
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.9.
|
7
|
-
date: 2008-06-
|
6
|
+
version: 0.9.1
|
7
|
+
date: 2008-06-15 00:00:00 +08:00
|
8
8
|
summary: A declarative way to read and write binary file formats
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- README
|
38
38
|
- examples/gzip.rb
|
39
39
|
- spec/registry_spec.rb
|
40
|
+
- spec/bits_spec.rb
|
40
41
|
- spec/sanitize_spec.rb
|
41
42
|
- spec/array_spec.rb
|
42
43
|
- spec/float_spec.rb
|
@@ -51,11 +52,13 @@ files:
|
|
51
52
|
- spec/base_spec.rb
|
52
53
|
- spec/single_value_spec.rb
|
53
54
|
- spec/int_spec.rb
|
55
|
+
- spec/io_spec.rb
|
54
56
|
- spec/stringz_spec.rb
|
55
57
|
- lib/bindata.rb
|
56
58
|
- lib/bindata
|
57
59
|
- lib/bindata/lazy.rb
|
58
60
|
- lib/bindata/sanitize.rb
|
61
|
+
- lib/bindata/io.rb
|
59
62
|
- lib/bindata/string.rb
|
60
63
|
- lib/bindata/int.rb
|
61
64
|
- lib/bindata/multi_value.rb
|
@@ -68,6 +71,7 @@ files:
|
|
68
71
|
- lib/bindata/single.rb
|
69
72
|
- lib/bindata/base.rb
|
70
73
|
- lib/bindata/array.rb
|
74
|
+
- lib/bindata/bits.rb
|
71
75
|
- lib/bindata/float.rb
|
72
76
|
test_files: []
|
73
77
|
|