bencodr 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ module BEncodr
2
+ VERSION = "2.0.0"
3
+ end
data/spec/bencode_spec.rb CHANGED
@@ -1,45 +1,40 @@
1
1
  # encoding: UTF-8
2
-
3
- require "spec"
4
2
  require "spec_helper"
5
3
 
6
4
  describe BEncodr do
7
- describe "#decode" do
8
- # Most of this is covered in other tests. Only difference is this accepts string instead of scanner.
5
+ describe "#bdecode" do
9
6
  it "should parse a bencoded string" do
10
- BEncodr.decode("6:string").should == "string"
7
+ BEncodr.bdecode("6:string").should == "string"
11
8
  end
12
9
 
13
10
  it "should parse a bencoded integer" do
14
- BEncodr.decode("i4e").should == 4
11
+ BEncodr.bdecode("i4e").should == 4
15
12
  end
16
13
 
17
14
  it "should parse a bencoded list" do
18
- BEncodr.decode("l6:stringeeeee").should == ["string"]
15
+ BEncodr.bdecode("l6:stringeeeee").should == ["string"]
19
16
  end
20
17
 
21
18
  it "should parse a bencoded dictionary containing a key value pair" do
22
- BEncodr.decode("d6:stringi1ee").should == {"string" => 1}
19
+ BEncodr.bdecode("d6:stringi1ee").should == {"string" => 1}
23
20
  end
24
21
 
25
22
  it "should raise an error when the type is not recognized" do
26
- lambda{BEncodr.decode("freak out!")}.should raise_error BEncodr::BEncodeError
23
+ lambda{BEncodr.bdecode("freak out!")}.should raise_error BEncodr::BEncodeError
27
24
  end
28
25
  end
29
26
 
30
- describe "#decode_file" do
27
+ describe "#bdecode_file" do
31
28
  it "should parse a bencoded file" do
32
29
  dirname = File.dirname(__FILE__)
33
- BEncodr.decode_file("#{dirname}/samples/mini.bencode").should == {"ba" => 3}
30
+ BEncodr.bdecode_file("#{dirname}/samples/mini.bencode").should == {"ba" => 3}
34
31
  end
35
32
  end
36
33
 
37
- describe "#encode" do
38
- # Covered in other tests so only simple stuff here.
39
- it "should bencodr an object" do
40
- BEncodr.encode("string").should == "6:string"
41
- end
42
- end
34
+ it_behaves_like "BEncodr::String", BEncodr
35
+ it_behaves_like "BEncodr::Integer", BEncodr
36
+ it_behaves_like "BEncodr::List", BEncodr
37
+ it_behaves_like "BEncodr::Dictionary", BEncodr
43
38
 
44
39
  describe "#encode_file" do
45
40
  context "when an object gets bencoded and written to a file" do
@@ -51,7 +46,7 @@ describe BEncodr do
51
46
  before :each do
52
47
  @file = File.join(@path, 'test.bencodr')
53
48
  @object = "string"
54
- BEncodr.encode_file(@file, @object)
49
+ BEncodr.bencode_file(@file, @object)
55
50
  end
56
51
 
57
52
  it "should actually write a file" do
@@ -59,7 +54,7 @@ describe BEncodr do
59
54
  end
60
55
 
61
56
  it "should properly encode the file" do
62
- BEncodr.decode_file(@file).should == @object
57
+ BEncodr.bdecode_file(@file).should == @object
63
58
  end
64
59
 
65
60
  after :each do
@@ -73,14 +68,14 @@ describe BEncodr do
73
68
 
74
69
  it "should read a torrent with newlines as part of a string without raising an error" do
75
70
  file = File.join(File.dirname(__FILE__), 'samples', 'python.torrent')
76
- lambda{BEncodr.decode_file file}.should_not raise_error
71
+ lambda{BEncodr.bdecode_file file}.should_not raise_error
77
72
  end
78
73
  end
79
74
 
80
75
  context "when parsing and then encoding" do
81
76
  it "should be equal to the pre-parsed and encoded bencoded string" do
82
77
  file = File.dirname(__FILE__) + "/samples/bencode.rb.torrent"
83
- BEncodr.decode_file(file).bencode.should == File.open(file, "rb") {|f| f.read}
78
+ BEncodr.bencode(BEncodr.bdecode_file(file)).should == File.open(file, "rb") {|f| f.read}
84
79
  end
85
80
  end
86
- end
81
+ end
@@ -1,79 +1,6 @@
1
1
  # encoding: UTF-8
2
-
3
- require "spec"
4
2
  require "spec_helper"
5
3
 
6
- describe Hash do
7
- describe "#bencodr" do
8
- it "should encode an empty hash" do
9
- {}.bencode.should == "de"
10
- end
11
-
12
- context "a key should always be encoded as a string" do
13
- it "should encode a string key as a string" do
14
- {"string" => "string"}.bencode.should == "d6:string6:stringe"
15
- end
16
-
17
- it "should encode a symbol key as a string" do
18
- {:symbol => :symbol}.bencode.should == "d6:symbol6:symbole"
19
- end
20
-
21
- it "should encode a uri key as a string" do
22
- uri = URI.parse("http://github.com/blatyo/bencode")
23
- {uri => uri}.bencode.should == "d32:http://github.com/blatyo/bencode32:http://github.com/blatyo/bencodee"
24
- end
25
-
26
- it "should encode an integer key as a string" do
27
- {1 => 1}.bencode.should == "d1:1i1ee"
28
- end
29
-
30
- it "should encode a float key as a string" do
31
- {1.1 => 1.1}.bencode.should == "d3:1.1i1ee"
32
- end
33
-
34
- it "should encode a time key as a string" do
35
- time = Time.utc(0)
36
- {time => time}.bencode.should == "d23:2000-01-01 00:00:00 UTCi946684800ee"
37
- end
38
-
39
- it "should encode an array key as a string" do
40
- array = (1..4).to_a
41
- {array => array}.bencode.should == "d12:[1, 2, 3, 4]li1ei2ei3ei4eee"
42
- end
43
-
44
- it "should encode a hash key as a string" do
45
- {{} => {}}.bencode.should == "d2:{}dee"
46
- end
47
- end
48
-
49
- it "should encode keys in sorted (as raw strings) order" do
50
- {:a => 1, "A" => 1, 1=> 1}.bencode.should == "d1:1i1e1:Ai1e1:ai1ee"
51
- end
52
- end
53
- end
54
-
55
4
  describe BEncodr::Dictionary do
56
- describe "#register" do
57
- context "once an object has been registered as a BEncode dictionary" do
58
- before :all do
59
- klass = Class.new do
60
- def to_h
61
- {:a => "a", :b => "b"}
62
- end
63
- end
64
- BEncodr::Dictionary.register klass
65
- @instance = klass.new
66
- end
67
-
68
- context "an instance of that object" do
69
- it "should respond to bencodr" do
70
- @instance.should respond_to :bencode
71
- end
72
-
73
- it "should encode to a bencoded dictionary" do
74
- @instance.bencode.should == "d1:a1:a1:b1:be"
75
- end
76
- end
77
- end
78
- end
5
+ it_behaves_like "BEncodr::Dictionary", BEncodr::Dictionary
79
6
  end
@@ -0,0 +1,66 @@
1
+ # encoding: UTF-8
2
+ require "spec_helper"
3
+
4
+ describe BEncodr::Ext do
5
+ describe "#include!" do
6
+ before :all do
7
+ BEncodr::Ext.include!
8
+ end
9
+
10
+ context BEncodr::String do
11
+ context ::String do
12
+ it_behaves_like "a BEncodr extension", "", BEncodr::String
13
+
14
+ subject{ "" }
15
+ it { should be_a(BEncodr::Object) }
16
+ it { should respond_to(:bdecode) }
17
+ end
18
+
19
+ context Symbol do
20
+ it_behaves_like "a BEncodr extension", :a, BEncodr::String
21
+ end
22
+
23
+ context URI::Generic do
24
+ it_behaves_like "a BEncodr extension", URI.parse("www.google.com"), BEncodr::String
25
+ end
26
+ end
27
+
28
+ context BEncodr::Integer do
29
+ context Numeric do
30
+ it_behaves_like "a BEncodr extension", 1, BEncodr::Integer
31
+ end
32
+
33
+ context Time do
34
+ it_behaves_like "a BEncodr extension", Time.at(0), BEncodr::Integer
35
+ end
36
+ end
37
+
38
+ context BEncodr::List do
39
+ context Array do
40
+ it_behaves_like "a BEncodr extension", [], BEncodr::List
41
+ end
42
+ end
43
+
44
+ context BEncodr::Dictionary do
45
+ context Hash do
46
+ it_behaves_like "a BEncodr extension", {}, BEncodr::Dictionary
47
+ end
48
+ end
49
+
50
+ context BEncodr::IO do
51
+ context IO do
52
+ subject{IO}
53
+ it{ should respond_to(:bencode) }
54
+
55
+ it_behaves_like "a BEncodr extension", IO.new(0), BEncodr::IO
56
+ end
57
+
58
+ context File do
59
+ subject{File}
60
+ it{ should respond_to(:bencode) }
61
+
62
+ it_behaves_like "a BEncodr extension", File.open(File.dirname(__FILE__)), BEncodr::IO
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,72 +1,6 @@
1
1
  # encoding: UTF-8
2
-
3
- require "spec"
4
2
  require "spec_helper"
5
3
 
6
- describe Integer do
7
- describe "#bencodr" do
8
- it "should encode a positive integer" do
9
- 1.bencode.should == "i1e"
10
- end
11
-
12
- it "should encode a negative integer" do
13
- -1.bencode.should == "i-1e"
14
- end
15
-
16
- it "should encode a positive big integer" do
17
- 10_000_000_000.bencode.should == "i10000000000e"
18
- end
19
-
20
- it "should encode a negative big integer" do
21
- -10_000_000_000.bencode.should == "i-10000000000e"
22
- end
23
- end
24
- end
25
-
26
- describe Numeric do
27
- describe "#bencodr" do
28
- it "should encode a positive float with precision loss" do
29
- 1.1.bencode.should == "i1e"
30
- end
31
-
32
- it "should encode a negative float with precision loss" do
33
- -1.1.bencode.should == "i-1e"
34
- end
35
-
36
- it "should encode an positive exponential float" do
37
- 1e10.bencode.should == "i10000000000e"
38
- end
39
-
40
- it "should encode an negative exponential float" do
41
- -1e10.bencode.should == "i-10000000000e"
42
- end
43
- end
44
- end
45
-
46
- describe Time do
47
- describe "#bencodr" do
48
- it "should encode to bencoding" do
49
- Time.at(4).bencode.should == "i4e"
50
- end
51
- end
52
- end
53
-
54
4
  describe BEncodr::Integer do
55
- describe "#register" do
56
- context "once an object has been registered as a BEncode integer" do
57
- before :all do
58
- BEncodr::Integer.register NilClass
59
- end
60
-
61
- context "an instance of that object" do
62
- it "should respond to bencodr" do
63
- nil.should respond_to :bencode
64
- end
65
-
66
- it "should encode to a bencoded integer" do
67
- nil.bencode.should == "i0e"
68
- end
69
- end
70
- end
71
- end
5
+ it_behaves_like "BEncodr::Integer", BEncodr::Integer
72
6
  end
@@ -1,36 +1,34 @@
1
- require "spec"
1
+ require "spec_helper"
2
2
 
3
3
  describe File do
4
- describe "#bencode" do
5
- context "when an object gets bencoded and written to a file" do
6
- before :all do
7
- @path = "tmp"
8
- Dir.mkdir(@path) unless File.exists? @path
9
- end
10
-
11
- before :each do
12
- @file = File.join(@path, 'test.bencodr')
13
- @object = "string"
14
- File.bencode(@file, @object)
15
- end
16
-
17
- it "should actually write a file" do
18
- File.exists?(@file).should be_true
19
- end
20
-
21
- describe "#bdecode" do
22
- it "should properly encode the file" do
23
- File.bdecode(@file).should == @object
24
- end
25
- end
4
+ before :all do
5
+ @path = "tmp"
6
+ Dir.mkdir(@path) unless File.exists? @path
7
+ BEncodr.include!
8
+ end
26
9
 
27
- after :each do
28
- File.delete(@file)
29
- end
10
+ before :each do
11
+ @file = File.join(@path, 'test.bencodr')
12
+ @object = "string"
13
+ File.bencode(@file, @object)
14
+ end
15
+
16
+ describe "#bencode" do
17
+ subject{ File }
18
+
19
+ it{ File.should exist(@file) }
20
+ end
21
+
22
+ describe "#bdecode" do
23
+ subject{ File }
24
+ it{ should bdecode(@file).to(@object) }
25
+ end
26
+
27
+ after :each do
28
+ File.delete(@file)
29
+ end
30
30
 
31
- after :all do
32
- Dir.delete(@path) if File.exists? @path
33
- end
34
- end
31
+ after :all do
32
+ Dir.delete(@path) if File.exists? @path
35
33
  end
36
34
  end
@@ -1,36 +1,6 @@
1
1
  # encoding: UTF-8
2
-
3
- require "spec"
4
2
  require "spec_helper"
5
3
 
6
- describe Array do
7
- describe "#bencodr" do
8
- it "should encode an empty array" do
9
- [].bencode.should == "le"
10
- end
11
-
12
- it "should encode an array filled with bencodable objects" do
13
- [:e, "a", 1, Time.at(11)].bencode.should == "l1:e1:ai1ei11ee"
14
- end
15
- end
16
- end
17
-
18
4
  describe BEncodr::List do
19
- describe "#register" do
20
- context "once an object has been registered as a BEncode list" do
21
- before :all do
22
- BEncodr::List.register Range
23
- end
24
-
25
- context "an instance of that object" do
26
- it "should respond to bencodr" do
27
- (1..2).should respond_to :bencode
28
- end
29
-
30
- it "should encode to a bencoded list" do
31
- (1..2).bencode.should == "li1ei2ee"
32
- end
33
- end
34
- end
35
- end
5
+ it_behaves_like "BEncodr::List", BEncodr::List
36
6
  end
@@ -0,0 +1,9 @@
1
+ # encoding: UTF-8
2
+ require "spec_helper"
3
+
4
+ describe BEncodr::Object do
5
+ it_behaves_like "BEncodr::String", BEncodr::Object
6
+ it_behaves_like "BEncodr::Integer", BEncodr::Object
7
+ it_behaves_like "BEncodr::List", BEncodr::Object
8
+ it_behaves_like "BEncodr::Dictionary", BEncodr::Object
9
+ end
@@ -1,196 +1,61 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require "spec"
3
+ require "spec_helper"
4
4
 
5
5
  describe BEncodr::Parser do
6
6
  describe "#parse_object" do
7
- # Most of this functionality is covered with other tests. So minimal stuff here.
8
- it "should parse a bencoded string" do
9
- scanner = StringScanner.new("6:string")
10
- BEncodr::Parser.parse_object(scanner).should == "string"
11
- end
12
-
13
- it "should parse a bencoded integer" do
14
- scanner = StringScanner.new("i4e")
15
- BEncodr::Parser.parse_object(scanner).should == 4
16
- end
17
-
18
- it "should parse a bencoded list" do
19
- scanner = StringScanner.new("l6:stringeeeee")
20
- BEncodr::Parser.parse_object(scanner).should == ["string"]
21
- end
22
-
23
- it "should parse a bencoded dictionary containing a key value pair" do
24
- scanner = StringScanner.new("d6:stringi1ee")
25
- BEncodr::Parser.parse_object(scanner).should == {"string" => 1}
26
- end
27
-
28
- it "should return nil when the type is not recognized" do
29
- scanner = StringScanner.new("freak out!")
30
- BEncodr::Parser.parse_object(scanner).should == nil
31
- end
7
+ it{ should parse("6:string").as(:object).to("string") }
8
+ it{ should parse("i4e").as(:object).to(4) }
9
+ it{ should parse("l6:stringeeeee").as(:object).to(["string"]) }
10
+ it{ should parse("d6:stringi1ee").as(:object).to({"string" => 1}) }
11
+ it{ should parse("freak out!").as(:object).to(nil) }
32
12
  end
33
13
 
34
- describe "#parse_stirng" do
35
- it "should parse a bencoded string" do
36
- scanner = StringScanner.new("6:string")
37
- BEncodr::Parser.parse_string(scanner).should == "string"
38
- end
39
-
40
- it "should parse a zero length bencoded string" do
41
- scanner = StringScanner.new("0:")
42
- BEncodr::Parser.parse_string(scanner).should == ""
43
- end
44
-
45
- it "should raise an error if the length is invalid" do
46
- scanner = StringScanner.new("fail:")
47
- lambda {BEncodr::Parser.parse_string(scanner)}.should raise_error BEncodr::BEncodeError
48
- end
49
-
50
- it "should raise an error if length is too long" do
51
- scanner = StringScanner.new("3:a")
52
- lambda {BEncodr::Parser.parse_string(scanner)}.should raise_error BEncodr::BEncodeError
53
- end
54
-
55
- it "should raise an error if the colon is missing" do
56
- scanner = StringScanner.new("3aaa")
57
- lambda {BEncodr::Parser.parse_string(scanner)}.should raise_error BEncodr::BEncodeError
58
- end
14
+ describe "#parse_string" do
15
+ it{ should parse("6:string").as(:string).to("string") }
16
+ it{ should parse("0:").as(:string).to("") }
17
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:string).with("fail:") }
18
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:string).with("3:a") }
19
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:string).with("3aaa") }
59
20
  end
60
21
 
61
22
  describe "#parse_integer" do
62
- it "should parse a bencoded integer" do
63
- scanner = StringScanner.new("i4e")
64
- BEncodr::Parser.parse_integer(scanner).should == 4
65
- end
66
-
67
- it "should raise an error if there is no starting i" do
68
- scanner = StringScanner.new("4e")
69
- lambda{BEncodr::Parser.parse_integer(scanner)}.should raise_error BEncodr::BEncodeError
70
- end
71
-
72
- it "should raise an error if there is no integer" do
73
- scanner = StringScanner.new("ie")
74
- lambda{BEncodr::Parser.parse_integer(scanner)}.should raise_error BEncodr::BEncodeError
75
- end
76
-
77
- it "should raise an error if there is no closing e" do
78
- scanner = StringScanner.new("i4")
79
- lambda{BEncodr::Parser.parse_integer(scanner)}.should raise_error BEncodr::BEncodeError
80
- end
23
+ it{ should parse("i4e").as(:integer).to(4) }
24
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:integer).with("4e") }
25
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:integer).with("ie") }
26
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:integer).with("i4") }
81
27
  end
82
28
 
83
29
  describe "#parse_list" do
84
- it "should parse an empty bencoded list" do
85
- scanner = StringScanner.new("le")
86
- BEncodr::Parser.parse_list(scanner).should == []
87
- end
88
-
89
- it "should parse a bencoded list containing a string" do
90
- scanner = StringScanner.new("l6:stringeeeee")
91
- BEncodr::Parser.parse_list(scanner).should == ["string"]
92
- end
93
-
94
- it "should parse a bencoded list containing more than one string" do
95
- scanner = StringScanner.new("l6:string6:stringe")
96
- BEncodr::Parser.parse_list(scanner).should == ["string", "string"]
97
- end
98
-
99
- it "should parse a bencoded list containing an integer" do
100
- scanner = StringScanner.new("li1ee")
101
- BEncodr::Parser.parse_list(scanner).should == [1]
102
- end
103
-
104
- it "should parse a bencoded list containing more than one integer" do
105
- scanner = StringScanner.new("li1ei2ee")
106
- BEncodr::Parser.parse_list(scanner).should == [1, 2]
107
- end
108
-
109
- it "should parse a bencoded list containing a list" do
110
- scanner = StringScanner.new("llee")
111
- BEncodr::Parser.parse_list(scanner).should == [[]]
112
- end
113
-
114
- it "should parse a bencoded list containing more than one list" do
115
- scanner = StringScanner.new("llelee")
116
- BEncodr::Parser.parse_list(scanner).should == [[], []]
117
- end
118
-
119
- it "should parse a bencoded list containing a dictionary" do
120
- scanner = StringScanner.new("ldee")
121
- BEncodr::Parser.parse_list(scanner).should == [{}]
122
- end
123
-
124
- it "should parse a bencoded list containing more than one dictionary" do
125
- scanner = StringScanner.new("ldedee")
126
- BEncodr::Parser.parse_list(scanner).should == [{}, {}]
127
- end
128
-
129
- it "should raise an error if there is no starting l" do
130
- scanner = StringScanner.new("e")
131
- lambda{BEncodr::Parser.parse_list(scanner)}.should raise_error BEncodr::BEncodeError
132
- end
133
-
134
- it "should raise an error if there is no closing e" do
135
- scanner = StringScanner.new("l")
136
- lambda{BEncodr::Parser.parse_list(scanner)}.should raise_error BEncodr::BEncodeError
137
- end
30
+ it{ should parse("le").as(:list).to([]) }
31
+ it{ should parse("l6:stringeeeee").as(:list).to(["string"]) }
32
+ it{ should parse("l6:string6:stringe").as(:list).to(["string", "string"]) }
33
+ it{ should parse("li1ee").as(:list).to([1]) }
34
+ it{ should parse("li1ei-2ee").as(:list).to([1, -2]) }
35
+ it{ should parse("llee").as(:list).to([[]]) }
36
+ it{ should parse("llelee").as(:list).to([[], []]) }
37
+ it{ should parse("ldee").as(:list).to([{}]) }
38
+ it{ should parse("ldedee").as(:list).to([{}, {}]) }
39
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:list).with("e") }
40
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:list).with("l") }
138
41
  end
139
42
 
140
43
  describe "#parse_dictionary" do
141
- it "should parse an empty bencoded dictionary" do
142
- scanner = StringScanner.new("de")
143
- BEncodr::Parser.parse_dictionary(scanner).should == {}
144
- end
145
-
146
- it "should parse a bencoded dictionary containing a key value pair" do
147
- scanner = StringScanner.new("d6:stringi1ee")
148
- BEncodr::Parser.parse_dictionary(scanner).should == {"string" => 1}
149
- end
150
-
151
- it "should parse a bencoded dictionary containing more than one key value pair" do
152
- scanner = StringScanner.new("d7:anotherle6:stringi1ee")
153
- BEncodr::Parser.parse_dictionary(scanner).should == {"string" => 1, "another" => []}
154
- end
155
-
156
- it "should raise an error if there is no starting d" do
157
- scanner = StringScanner.new("e")
158
- lambda{BEncodr::Parser.parse_dictionary(scanner)}.should raise_error BEncodr::BEncodeError
159
- end
160
-
161
- it "should raise an error if the key is not a string" do
162
- scanner = StringScanner.new("di1ei1ee")
163
- lambda{BEncodr::Parser.parse_dictionary(scanner)}.should raise_error BEncodr::BEncodeError
164
- end
165
-
166
- it "should raise an error if there is no closing e" do
167
- scanner = StringScanner.new("d")
168
- lambda{BEncodr::Parser.parse_dictionary(scanner)}.should raise_error BEncodr::BEncodeError
169
- end
170
-
171
- it "should raise an error if there is a key with no value" do
172
- scanner = StringScanner.new("d1:ae")
173
- lambda{BEncodr::Parser.parse_dictionary(scanner)}.should raise_error BEncodr::BEncodeError
174
- end
44
+ it{ should parse("de").as(:dictionary).to({}) }
45
+ it{ should parse("d6:stringi1ee").as(:dictionary).to({"string" => 1}) }
46
+ it{ should parse("d7:anotherle6:stringi1ee").as(:dictionary).to({"string" => 1, "another" => []}) }
47
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:dictionary).with("e") }
48
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:dictionary).with("di1ei1ee") }
49
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:dictionary).with("d") }
50
+ it{ should generate_parse_error(BEncodr::BEncodeError).for(:dictionary).with("d1:ae") }
175
51
  end
176
52
  end
177
53
 
178
54
  describe String do
179
55
  describe "#bdecode" do
180
- it "should decode a bencoded string into a ruby string" do
181
- "6:string".bdecode.should == "string"
182
- end
183
-
184
- it "should decode a bencoded integer into a ruby integer" do
185
- "i-1e".bdecode.should == -1
186
- end
187
-
188
- it "should decode a bencoded list into a ruby array" do
189
- "le".bdecode.should == []
190
- end
191
-
192
- it "should decode a bencoded dictionary into a ruby hash" do
193
- "de".bdecode.should == {}
194
- end
56
+ it{ "6:string".should bdecode_to("string") }
57
+ it{ "i-1e".should bdecode_to(-1) }
58
+ it{ "le".should bdecode_to([]) }
59
+ it{ "de".should bdecode_to({}) }
195
60
  end
196
61
  end