spec/formatting/binary/string_spec.rb in ronin-0.2.1 vs spec/formatting/binary/string_spec.rb in ronin-0.2.2
- old
+ new
@@ -1,23 +1,32 @@
require 'ronin/formatting/binary'
require 'spec_helper'
+require 'formatting/binary/helpers/hexdumps'
describe String do
it "should provide String#depack" do
String.instance_method('depack').should_not be_nil
end
it "should provide String#hex_escape" do
String.instance_method('hex_escape').should_not be_nil
end
+ it "should provide String#hex_unescape" do
+ String.instance_method('hex_unescape').should_not be_nil
+ end
+
it "should provide String#xor" do
String.instance_method('xor').should_not be_nil
end
- describe "pack" do
+ it "should provide String#unhexdump" do
+ String.instance_method('unhexdump').should_not be_nil
+ end
+
+ describe "depack" do
before(:all) do
@integer = 0x1337
@i386_packed_int = "7\023\000\000"
@i386_packed_short = "7\023"
@@ -28,39 +37,39 @@
@ppc_packed_short = "\0237"
@ppc_packed_long = "\000\000\0237"
@ppc_packed_quad = "\000\000\000\000\000\000\0237"
end
- it "should pack itself for a little-endian architecture" do
+ it "should depack itself for a little-endian architecture" do
@i386_packed_int.depack(Arch.i386).should == @integer
end
- it "should pack itself as a short for a little-endian architecture" do
+ it "should depack itself as a short for a little-endian architecture" do
@i386_packed_short.depack(Arch.i386,2).should == @integer
end
- it "Integer#pack should pack itself as a long for a little-endian architecture" do
+ it "should depack itself as a long for a little-endian architecture" do
@i386_packed_long.depack(Arch.i386,4).should == @integer
end
- it "should pack itself as a quad for a little-endian architecture" do
+ it "should depack itself as a quad for a little-endian architecture" do
@i386_packed_quad.depack(Arch.i386,8).should == @integer
end
- it "should pack itself for a big-endian architecture" do
+ it "should depack itself for a big-endian architecture" do
@ppc_packed_int.depack(Arch.ppc).should == @integer
end
- it "should pack itself as a short for a big-endian architecture" do
+ it "should depack itself as a short for a big-endian architecture" do
@ppc_packed_short.depack(Arch.ppc,2).should == @integer
end
- it "should pack itself as a long for a big-endian architecture" do
+ it "should depack itself as a long for a big-endian architecture" do
@ppc_packed_long.depack(Arch.ppc,4).should == @integer
end
- it "should pack itself as a quad for a big-endian architecture" do
+ it "should depack itself as a quad for a big-endian architecture" do
@ppc_packed_quad.depack(Arch.ppc,8).should == @integer
end
end
describe "hex_escape" do
@@ -71,10 +80,28 @@
it "should hex escape a String" do
@binary_string.hex_escape.should == "\\x68\\x65\\x6c\\x6c\\x6f\\x4e"
end
end
+ describe "hex_unescape" do
+ it "should unescape a normal String" do
+ "hello".hex_unescape.should == "hello"
+ end
+
+ it "should unescape a hex String" do
+ "\\x68\\x65\\x6c\\x6c\\x6f\\x4e".hex_unescape.should == "hello\x4e"
+ end
+
+ it "should unescape an octal String" do
+ "hello\012".hex_unescape.should == "hello\n"
+ end
+
+ it "should unescape control characters" do
+ "hello\\n".hex_unescape.should == "hello\n"
+ end
+ end
+
describe "xor" do
before(:all) do
@string = 'hello'
@key = 0x50
end
@@ -87,8 +114,138 @@
@string.xor(@key).should_not == @string
end
it "should be able to be decoded with another xor" do
@string.xor(@key).xor(@key).should == @string
+ end
+ end
+
+ describe "unhexdump" do
+ describe "GNU hexdump" do
+ before(:all) do
+ @ascii = load_binary_data('ascii')
+ @repeated = load_binary_data('repeated')
+ end
+
+ it "should unhexdump octal-byte hexdump output" do
+ hexdump = load_hexdump('hexdump_octal_bytes')
+
+ hexdump.unhexdump(:format => :hexdump, :encoding => :octal_bytes).should == @ascii
+ end
+
+ it "should unhexdump hex-byte hexdump output" do
+ hexdump = load_hexdump('hexdump_hex_bytes')
+
+ hexdump.unhexdump(:format => :hexdump, :encoding => :hex_bytes).should == @ascii
+ end
+
+ it "should unhexdump decimal-short hexdump output" do
+ hexdump = load_hexdump('hexdump_decimal_shorts')
+
+ hexdump.unhexdump(:format => :hexdump, :encoding => :decimal_shorts).should == @ascii
+ end
+
+ it "should unhexdump octal-short hexdump output" do
+ hexdump = load_hexdump('hexdump_octal_shorts')
+
+ hexdump.unhexdump(:format => :hexdump, :encoding => :octal_shorts).should == @ascii
+ end
+
+ it "should unhexdump hex-short hexdump output" do
+ hexdump = load_hexdump('hexdump_hex_shorts')
+
+ hexdump.unhexdump(:format => :hexdump, :encoding => :hex_shorts).should == @ascii
+ end
+
+ it "should unhexdump repeated hexdump output" do
+ hexdump = load_hexdump('hexdump_repeated')
+
+ hexdump.unhexdump(:format => :hexdump, :encoding => :hex_bytes).should == @repeated
+ end
+ end
+
+ describe "od" do
+ before(:all) do
+ @ascii = load_binary_data('ascii')
+ @repeated = load_binary_data('repeated')
+ end
+
+ it "should unhexdump octal-byte hexdump output" do
+ hexdump = load_hexdump('od_octal_bytes')
+
+ hexdump.unhexdump(:format => :od, :encoding => :octal_bytes).should == @ascii
+ end
+
+ it "should unhexdump octal-shorts hexdump output" do
+ hexdump = load_hexdump('od_octal_shorts')
+
+ hexdump.unhexdump(:format => :od, :encoding => :octal_shorts).should == @ascii
+ end
+
+ it "should unhexdump octal-ints hexdump output" do
+ hexdump = load_hexdump('od_octal_ints')
+
+ hexdump.unhexdump(:format => :od, :encoding => :octal_ints).should == @ascii
+ end
+
+ it "should unhexdump octal-quads hexdump output" do
+ hexdump = load_hexdump('od_octal_quads')
+
+ hexdump.unhexdump(:format => :od, :encoding => :octal_quads).should == @ascii
+ end
+
+ it "should unhexdump decimal-byte hexdump output" do
+ hexdump = load_hexdump('od_decimal_bytes')
+
+ hexdump.unhexdump(:format => :od, :encoding => :decimal_bytes).should == @ascii
+ end
+
+ it "should unhexdump decimal-shorts hexdump output" do
+ hexdump = load_hexdump('od_decimal_shorts')
+
+ hexdump.unhexdump(:format => :od, :encoding => :decimal_shorts).should == @ascii
+ end
+
+ it "should unhexdump decimal-ints hexdump output" do
+ hexdump = load_hexdump('od_decimal_ints')
+
+ hexdump.unhexdump(:format => :od, :encoding => :decimal_ints).should == @ascii
+ end
+
+ it "should unhexdump decimal-quads hexdump output" do
+ hexdump = load_hexdump('od_decimal_quads')
+
+ hexdump.unhexdump(:format => :od, :encoding => :decimal_quads).should == @ascii
+ end
+
+ it "should unhexdump hex-byte hexdump output" do
+ hexdump = load_hexdump('od_hex_bytes')
+
+ hexdump.unhexdump(:format => :od, :encoding => :hex_bytes).should == @ascii
+ end
+
+ it "should unhexdump hex-shorts hexdump output" do
+ hexdump = load_hexdump('od_hex_shorts')
+
+ hexdump.unhexdump(:format => :od, :encoding => :hex_shorts).should == @ascii
+ end
+
+ it "should unhexdump hex-ints hexdump output" do
+ hexdump = load_hexdump('od_hex_ints')
+
+ hexdump.unhexdump(:format => :od, :encoding => :hex_ints).should == @ascii
+ end
+
+ it "should unhexdump hex-quads hexdump output" do
+ hexdump = load_hexdump('od_hex_quads')
+
+ hexdump.unhexdump(:format => :od, :encoding => :hex_quads).should == @ascii
+ end
+
+ it "should unhexdump repeated hexdump output" do
+ hexdump = load_hexdump('od_repeated')
+
+ hexdump.unhexdump(:format => :od, :encoding => :octal_shorts).should == @repeated
+ end
end
end
end