spec/struct_spec.rb in bindata-0.9.1 vs spec/struct_spec.rb in bindata-0.9.2

- old
+ new

@@ -12,15 +12,10 @@ [:int8, :c], [:int8, :d, {:value => :b}]] } @obj = BinData::Struct.new(@params) end - it "should not include hidden names in all_possible_field_names" do - params = BinData::SanitizedParameters.new(BinData::Struct, @params) - BinData::Struct.all_possible_field_names(params).should == ["a", "d"] - end - it "should only show fields that aren't hidden" do @obj.field_names.should == ["a", "d"] end it "should be able to access hidden fields directly" do @@ -43,41 +38,17 @@ lambda { BinData::Struct.new(params) }.should raise_error(TypeError) end - it "should fail on all_possible_field_names with unsanitized parameters" do - params = {:fields => [[:int8, :a], [:int8, :b]]} - lambda { - BinData::Struct.all_possible_field_names(params) - }.should raise_error(ArgumentError) - end - it "should fail on duplicate names" do params = {:fields => [[:int8, :a], [:int8, :b], [:int8, :a]]} lambda { BinData::Struct.new(params) }.should raise_error(NameError) end - it "should fail on duplicate names in nested structs" do - params = {:fields => [[:int8, :a], - [:struct, nil, {:fields => [[:int8, :a]]}]]} - lambda { - BinData::Struct.new(params) - }.should raise_error(NameError) - end - - it "should fail on duplicate names in triple nested structs" do - params = {:fields => [[:int8, :a], - [:struct, nil, {:fields => [ - [:struct, nil, {:fields => [[:int8, :a]]}]]}]]} - lambda { - BinData::Struct.new(params) - }.should raise_error(NameError) - end - it "should fail on reserved names" do # note that #invert is from Hash.instance_methods params = {:fields => [[:int8, :a], [:int8, :invert]]} lambda { BinData::Struct.new(params) @@ -118,15 +89,10 @@ BinData::Struct.accepted_parameters.should include(:fields) BinData::Struct.accepted_parameters.should include(:hide) BinData::Struct.accepted_parameters.should include(:endian) end - it "should return all possible field names" do - params = BinData::SanitizedParameters.new(BinData::Struct, @params) - BinData::Struct.all_possible_field_names(params).should == ["a", "b"] - end - it "should return field names" do @obj.field_names.should == ["a", "b"] end it "should clear" do @@ -184,35 +150,37 @@ [:int8, :z] ] @params = { :fields => [ [:int8, :a, {:initial_value => 6}], [:struct, :b, {:fields => inner1, :the_val => :a}], - [:struct, nil, {:fields => inner2}]] } + [:struct, :c, {:fields => inner2}]] } @obj = BinData::Struct.new(@params) end it "should included nested field names" do - @obj.field_names.should == ["a", "b", "y", "z"] + @obj.field_names.should == ["a", "b", "c"] end - it "should return all possible field names" do - params = BinData::SanitizedParameters.new(BinData::Struct, @params) - all_params = BinData::Struct.all_possible_field_names(params) - all_params.should == ["a", "b", "y", "z"] + it "should return num_bytes" do + @obj.num_bytes(:b).should == 2 + @obj.num_bytes(:c).should == 2 + @obj.num_bytes.should == 5 end it "should access nested fields" do @obj.a.should == 6 @obj.b.w.should == 3 @obj.b.x.should == 6 - @obj.y.should == 3 + @obj.c.y.should == 3 + @obj.c.z.should == 0 end it "should return correct offset of" do @obj.offset_of("b").should == 1 - @obj.offset_of("y").should == 3 - @obj.offset_of("z").should == 4 + @obj.offset_of("b").should == 1 + @obj.offset_of("c").should == 3 + @obj.offset_of("y").should be_nil end end describe BinData::Struct, "with an endian defined" do before(:each) do @@ -277,5 +245,23 @@ @obj.a.should == 0 @obj.b.should == 3 end end +describe BinData::Struct, "with nested endian" do + it "should use correct endian" do + nested_params = { :endian => :little, + :fields => [[:int16, :b], [:int16, :c]] } + params = { :endian => :big, + :fields => [[:int16, :a], + [:struct, :s, nested_params], + [:int16, :d]] } + obj = BinData::Struct.new(params) + str = "\x00\x01\x02\x00\x03\x00\x00\x04" + obj.read(str) + + obj.a.should == 1 + obj.s.b.should == 2 + obj.s.c.should == 3 + obj.d.should == 4 + end +end