lame 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +3 -4
  3. data/README.md +51 -17
  4. data/lib/lame.rb +1 -0
  5. data/lib/lame/buffer.rb +1 -1
  6. data/lib/lame/encoder.rb +10 -11
  7. data/lib/lame/encoding/long_buffer_encoder.rb +1 -1
  8. data/lib/lame/encoding/stereo_buffer_encoder.rb +1 -0
  9. data/lib/lame/ffi.rb +2 -0
  10. data/lib/lame/version.rb +1 -1
  11. data/spec/buffer_spec.rb +8 -8
  12. data/spec/configuration_spec.rb +76 -76
  13. data/spec/decoder_spec.rb +34 -34
  14. data/spec/decoding/decoded_frame_spec.rb +7 -7
  15. data/spec/decoding/id3_tag_parser_spec.rb +3 -3
  16. data/spec/decoding/mp3_data_header_parser_spec.rb +21 -21
  17. data/spec/decoding/mpeg_audio_frame_finder_spec.rb +15 -15
  18. data/spec/decoding/mpeg_audio_frame_matcher_spec.rb +2 -2
  19. data/spec/decoding/single_frame_decoder_spec.rb +36 -35
  20. data/spec/decoding/stream_decoder_spec.rb +10 -10
  21. data/spec/delegation_spec.rb +37 -37
  22. data/spec/encoder_spec.rb +100 -100
  23. data/spec/encoding/flusher_spec.rb +16 -16
  24. data/spec/encoding/id3_spec.rb +38 -38
  25. data/spec/encoding/interleaved_buffer_encoder_spec.rb +25 -25
  26. data/spec/encoding/stereo_buffer_encoder_spec.rb +34 -33
  27. data/spec/encoding/vbr_info_spec.rb +16 -16
  28. data/spec/ffi/decode_flags_spec.rb +3 -2
  29. data/spec/ffi/encoding_spec.rb +22 -22
  30. data/spec/ffi/global_flags_spec.rb +159 -157
  31. data/spec/ffi/id3tag_spec.rb +24 -24
  32. data/spec/ffi/mp3_data_spec.rb +3 -3
  33. data/spec/integration/encoding_spec.rb +75 -3
  34. data/spec/integration/id3_tags_spec.rb +18 -18
  35. data/spec/lib/custom_matchers.rb +4 -4
  36. data/spec/lib/wave_file_generator.rb +9 -9
  37. data/spec/spec_helper.rb +0 -1
  38. metadata +38 -60
@@ -3,16 +3,16 @@ require 'spec_helper'
3
3
  module LAME
4
4
  describe Decoder do
5
5
 
6
- let(:decode_flags) { stub("decode flags") }
7
- let(:mp3_file) { stub("mp3 file") }
8
- let(:id3_tag_parser) { stub("id3 tag parser", :skip! => nil) }
9
- let(:mp3_data_header_parser) { stub("mp3 data header parser", :parse! => nil) }
6
+ let(:decode_flags) { double("decode flags") }
7
+ let(:mp3_file) { double("mp3 file") }
8
+ let(:id3_tag_parser) { double("id3 tag parser", :skip! => nil) }
9
+ let(:mp3_data_header_parser) { double("mp3 data header parser", :parse! => nil) }
10
10
 
11
11
  # Stub away all collaborators:
12
12
  before do
13
- Decoding::Id3TagParser.stub(:new).and_return(id3_tag_parser)
14
- Decoding::Mp3DataHeaderParser.stub(:new).and_return(mp3_data_header_parser)
15
- FFI::DecodeFlags.stub(:new).and_return(decode_flags)
13
+ allow(Decoding::Id3TagParser).to receive(:new).and_return(id3_tag_parser)
14
+ allow(Decoding::Mp3DataHeaderParser).to receive(:new).and_return(mp3_data_header_parser)
15
+ allow(FFI::DecodeFlags).to receive(:new).and_return(decode_flags)
16
16
  end
17
17
 
18
18
  subject(:decoder) { Decoder.new(mp3_file) }
@@ -20,74 +20,74 @@ module LAME
20
20
  context "initialization" do
21
21
 
22
22
  it "initializes DecodeFlags" do
23
- FFI::DecodeFlags.should_receive(:new)
23
+ expect(FFI::DecodeFlags).to receive(:new)
24
24
  Decoder.new(mp3_file)
25
25
  end
26
26
 
27
27
  it "has the DecodeFlags" do
28
- decode_flags = stub
29
- FFI::DecodeFlags.stub(:new).and_return(decode_flags)
30
- decoder.decode_flags.should eql decode_flags
28
+ decode_flags = double("decode_flags")
29
+ allow(FFI::DecodeFlags).to receive(:new).and_return(decode_flags)
30
+ expect(decoder.decode_flags).to eql decode_flags
31
31
  end
32
32
 
33
33
  it "has the mp3 file path" do
34
- decoder.mp3_file.should eql mp3_file
34
+ expect(decoder.mp3_file).to eql mp3_file
35
35
  end
36
36
 
37
37
  it "skips the id3 offset" do
38
- Decoding::Id3TagParser.should_receive(:new).with(mp3_file)
39
- id3_tag_parser.should_receive(:skip!)
38
+ expect(Decoding::Id3TagParser).to receive(:new).with(mp3_file)
39
+ expect(id3_tag_parser).to receive(:skip!)
40
40
 
41
41
  decoder
42
42
  end
43
43
 
44
44
  it "parses the mp3 data header" do
45
- parser = stub
46
- mp3_data = stub
47
- Decoding::Mp3DataHeaderParser.should_receive(:new).with(decode_flags, mp3_file).and_return(parser)
48
- parser.should_receive(:parse!).and_return(mp3_data)
45
+ parser = double("parser")
46
+ mp3_data = double("mp3_data")
47
+ expect(Decoding::Mp3DataHeaderParser).to receive(:new).with(decode_flags, mp3_file).and_return(parser)
48
+ expect(parser).to receive(:parse!).and_return(mp3_data)
49
49
 
50
- decoder.mp3_data.should eql mp3_data
50
+ expect(decoder.mp3_data).to eql mp3_data
51
51
  end
52
52
 
53
53
  end
54
54
 
55
55
  context "after initialization" do
56
56
 
57
- let(:mp3_data) { stub("mp3 data") }
57
+ let(:mp3_data) { double("mp3 data") }
58
58
 
59
59
  # stubbing galore!
60
60
  before do
61
- FFI::DecodeFlags.stub(:new).and_return(decode_flags)
61
+ allow(FFI::DecodeFlags).to receive(:new).and_return(decode_flags)
62
62
 
63
- parser = stub
64
- Decoding::Mp3DataHeaderParser.stub(:new).and_return(parser)
65
- parser.stub(:parse!).and_return(mp3_data)
63
+ parser = double("parser")
64
+ allow(Decoding::Mp3DataHeaderParser).to receive(:new).and_return(parser)
65
+ allow(parser).to receive(:parse!).and_return(mp3_data)
66
66
  end
67
67
 
68
68
  describe "#each_decoded_frame" do
69
69
 
70
- let(:stream_decoder) { stub }
70
+ let(:stream_decoder) { double("stream_decoder") }
71
71
  before do
72
- Decoding::StreamDecoder.stub(:new).and_return(stream_decoder)
72
+ allow(Decoding::StreamDecoder).to receive(:new).and_return(stream_decoder)
73
73
  end
74
74
 
75
75
  it "initializes a stream decoder with mp3 file and mp3 data" do
76
- stream_decoder.stub(:each_decoded_frame)
76
+ allow(stream_decoder).to receive(:each_decoded_frame)
77
77
 
78
- Decoding::StreamDecoder.should_receive(:new).with(decode_flags, mp3_data, mp3_file)
78
+ expect(Decoding::StreamDecoder).to receive(:new).with(decode_flags, mp3_data, mp3_file)
79
79
 
80
80
  decoder.each_decoded_frame
81
81
  end
82
82
 
83
83
  it "delegates to a stream decoder" do
84
- stream_decoder.should_receive(:each_decoded_frame)
84
+ expect(stream_decoder).to receive(:each_decoded_frame)
85
85
 
86
86
  decoder.each_decoded_frame
87
87
  end
88
88
 
89
89
  it "re-yields the stream decoder's yield" do
90
- stream_decoder.stub(:each_decoded_frame).and_yield(:one).and_yield(:two)
90
+ allow(stream_decoder).to receive(:each_decoded_frame).and_yield(:one).and_yield(:two)
91
91
 
92
92
  expect { |block|
93
93
  decoder.each_decoded_frame(&block)
@@ -99,8 +99,8 @@ module LAME
99
99
  describe "#channel_mode" do
100
100
 
101
101
  it "delegates to mp3_data" do
102
- mp3_data.should_receive(:channel_mode).and_return(:stereo)
103
- decoder.channel_mode.should eql :stereo
102
+ expect(mp3_data).to receive(:channel_mode).and_return(:stereo)
103
+ expect(decoder.channel_mode).to eql :stereo
104
104
  end
105
105
 
106
106
  end
@@ -108,8 +108,8 @@ module LAME
108
108
  describe "#sample_rate" do
109
109
 
110
110
  it "delegates to mp3_data" do
111
- mp3_data.should_receive(:sample_rate).and_return(44100)
112
- decoder.sample_rate.should eql 44100
111
+ allow(mp3_data).to receive(:sample_rate).and_return(44100)
112
+ expect(decoder.sample_rate).to eql 44100
113
113
  end
114
114
 
115
115
  end
@@ -5,13 +5,13 @@ module LAME
5
5
  describe DecodedFrame do
6
6
 
7
7
  it "is initialized with left and right samples" do
8
- left = stub
9
- right = stub
8
+ left = double("left")
9
+ right = double("right")
10
10
 
11
11
  decoded_frame = DecodedFrame.new(left, right)
12
12
 
13
- decoded_frame.left.should eql left
14
- decoded_frame.right.should eql right
13
+ expect(decoded_frame.left).to eql left
14
+ expect(decoded_frame.right).to eql right
15
15
  end
16
16
 
17
17
  it "can be built with FFI Buffers" do
@@ -23,8 +23,8 @@ module LAME
23
23
 
24
24
  decoded_frame = DecodedFrame.from_short_buffers(left_buffer, right_buffer)
25
25
 
26
- decoded_frame.left.should eql [1,2,3,4]
27
- decoded_frame.right.should eql [5,6,7,8]
26
+ expect(decoded_frame.left).to eql [1,2,3,4]
27
+ expect(decoded_frame.right).to eql [5,6,7,8]
28
28
  end
29
29
 
30
30
  describe "#samples" do
@@ -35,7 +35,7 @@ module LAME
35
35
 
36
36
  decoded_frame = DecodedFrame.new(left, right)
37
37
 
38
- decoded_frame.samples.should eql [[1,5],[2,6],[3,7],[4,8]]
38
+ expect(decoded_frame.samples).to eql [[1,5],[2,6],[3,7],[4,8]]
39
39
  end
40
40
  end
41
41
 
@@ -21,13 +21,13 @@ module LAME
21
21
 
22
22
  it "seeks the file until after the id3 tag" do
23
23
  parser.skip!
24
- stream.pos.should eql 351
24
+ expect(stream.pos).to eql 351
25
25
  end
26
26
 
27
27
  it "start from the start of the stream" do
28
28
  stream.seek(42)
29
29
  parser.skip!
30
- stream.pos.should eql 351
30
+ expect(stream.pos).to eql 351
31
31
  end
32
32
  end
33
33
 
@@ -43,7 +43,7 @@ module LAME
43
43
 
44
44
  it "does not seek the stream if no header is present" do
45
45
  parser.skip!
46
- stream.pos.should eql 0
46
+ expect(stream.pos).to eql 0
47
47
  end
48
48
  end
49
49
 
@@ -6,22 +6,22 @@ module LAME
6
6
 
7
7
  subject(:parser) { Mp3DataHeaderParser.new(decode_flags, stream) }
8
8
 
9
- let(:decode_flags) { stub("decode flags") }
9
+ let(:decode_flags) { double("decode flags") }
10
10
  let(:stream) { StringIO.new(stream_string) }
11
- let(:mpeg_finder) { stub }
11
+ let(:mpeg_finder) { double("mpeg_finder") }
12
12
 
13
13
  let(:stream_string) { "a"*100 }
14
14
 
15
15
  before do
16
- LAME.stub(:hip_decode1_headersB) do |_, _, _, _, _, mp3_data, _, _|
16
+ allow(LAME).to receive(:hip_decode1_headersB) do |_, _, _, _, _, mp3_data, _, _|
17
17
  # fake that the header was found
18
18
  mp3_data[:header_parsed] = 1
19
19
  end
20
20
  end
21
21
 
22
22
  it "seeks the input stream until the first mpeg frame" do
23
- MPEGAudioFrameFinder.should_receive(:new).with(stream).and_return(mpeg_finder)
24
- mpeg_finder.should_receive(:find!)
23
+ expect(MPEGAudioFrameFinder).to receive(:new).with(stream).and_return(mpeg_finder)
24
+ expect(mpeg_finder).to receive(:find!)
25
25
 
26
26
  parser.parse!
27
27
  end
@@ -29,20 +29,20 @@ module LAME
29
29
  context "decoding headers" do
30
30
 
31
31
  before do
32
- MPEGAudioFrameFinder.stub(:new => stub.as_null_object)
32
+ allow(MPEGAudioFrameFinder).to receive(:new).and_return(double.as_null_object)
33
33
  end
34
34
 
35
35
  it "reads 100 bytes from the stream" do
36
- stream.should_receive(:read).with(100).and_return("a"*100)
36
+ expect(stream).to receive(:read).with(100).and_return("a"*100)
37
37
  parser.parse!
38
38
  end
39
39
 
40
40
  it "parses headers with LAME" do
41
- LAME.should_receive(:hip_decode1_headersB) do |decode_flags, in_buffer, size, _, _, mp3_data, _, _|
42
- decode_flags.should eql decode_flags
43
- in_buffer.get_string(0).should eql "a"*100
44
- size.should eql 100
45
- mp3_data.should be_a(LAME::FFI::MP3Data)
41
+ expect(LAME).to receive(:hip_decode1_headersB) do |decode_flags, in_buffer, size, _, _, mp3_data, _, _|
42
+ expect(decode_flags).to eql decode_flags
43
+ expect(in_buffer.get_string(0)).to eql "a"*100
44
+ expect(size).to eql 100
45
+ expect(mp3_data).to be_a(LAME::FFI::MP3Data)
46
46
 
47
47
  # fake that the header was found
48
48
  mp3_data[:header_parsed] = 1
@@ -57,9 +57,9 @@ module LAME
57
57
  it "reads 100 bytes until a header was parsed" do
58
58
  decode_count = 0
59
59
 
60
- LAME.should_receive(:hip_decode1_headersB).exactly(expected_reads).times
60
+ expect(LAME).to receive(:hip_decode1_headersB).exactly(expected_reads).times
61
61
 
62
- LAME.stub(:hip_decode1_headersB) do |_, _, _, _, _, mp3_data, _, _|
62
+ allow(LAME).to receive(:hip_decode1_headersB) do |_, _, _, _, _, mp3_data, _, _|
63
63
  decode_count += 1
64
64
 
65
65
  # simulate parsed header after 5 reads:
@@ -71,17 +71,17 @@ module LAME
71
71
  end
72
72
 
73
73
  it "returns the parsed mp3 data if a header was parsed" do
74
- mp3_data = stub("mp3 data", :header_parsed? => true)
75
- LAME::FFI::MP3Data.stub(:new).and_return(mp3_data)
76
- LAME.stub(:hip_decode1_headersB)
74
+ mp3_data = double("mp3 data", :header_parsed? => true)
75
+ allow(LAME::FFI::MP3Data).to receive(:new).and_return(mp3_data)
76
+ allow(LAME).to receive(:hip_decode1_headersB)
77
77
 
78
- parser.parse!.should eql mp3_data
78
+ expect(parser.parse!).to eql mp3_data
79
79
  end
80
80
 
81
81
  it "raises an error if the header could not be parsed" do
82
- mp3_data = stub("mp3 data", :header_parsed? => false)
83
- LAME::FFI::MP3Data.stub(:new).and_return(mp3_data)
84
- LAME.stub(:hip_decode1_headersB)
82
+ mp3_data = double("mp3 data", :header_parsed? => false)
83
+ allow(LAME::FFI::MP3Data).to receive(:new).and_return(mp3_data)
84
+ allow(LAME).to receive(:hip_decode1_headersB)
85
85
 
86
86
  expect {
87
87
  parser.parse!
@@ -10,35 +10,35 @@ module LAME
10
10
  let(:stream_string) { "1234567890" }
11
11
 
12
12
  it "tries to find the mpeg frame 4 bytes at a time until a header is found" do
13
- matcher1 = stub("matcher", :match? => false)
14
- matcher2 = stub("matcher", :match? => false)
15
- matcher3 = stub("matcher", :match? => true)
13
+ matcher1 = double("matcher", :match? => false)
14
+ matcher2 = double("matcher", :match? => false)
15
+ matcher3 = double("matcher", :match? => true)
16
16
 
17
- MPEGAudioFrameMatcher.should_receive(:new).with("1234").and_return(matcher1)
18
- MPEGAudioFrameMatcher.should_receive(:new).with("2345").and_return(matcher2)
19
- MPEGAudioFrameMatcher.should_receive(:new).with("3456").and_return(matcher3)
17
+ expect(MPEGAudioFrameMatcher).to receive(:new).with("1234").and_return(matcher1)
18
+ expect(MPEGAudioFrameMatcher).to receive(:new).with("2345").and_return(matcher2)
19
+ expect(MPEGAudioFrameMatcher).to receive(:new).with("3456").and_return(matcher3)
20
20
 
21
21
  finder.find!
22
22
  end
23
23
 
24
24
  it "seeks the stream at the position of the found frame" do
25
- matcher1 = stub("matcher", :match? => false)
26
- matcher2 = stub("matcher", :match? => false)
27
- matcher3 = stub("matcher", :match? => true)
25
+ matcher1 = double("matcher", :match? => false)
26
+ matcher2 = double("matcher", :match? => false)
27
+ matcher3 = double("matcher", :match? => true)
28
28
 
29
- MPEGAudioFrameMatcher.stub(:new).with("1234").and_return(matcher1)
30
- MPEGAudioFrameMatcher.stub(:new).with("2345").and_return(matcher2)
31
- MPEGAudioFrameMatcher.stub(:new).with("3456").and_return(matcher3)
29
+ allow(MPEGAudioFrameMatcher).to receive(:new).with("1234").and_return(matcher1)
30
+ allow(MPEGAudioFrameMatcher).to receive(:new).with("2345").and_return(matcher2)
31
+ allow(MPEGAudioFrameMatcher).to receive(:new).with("3456").and_return(matcher3)
32
32
 
33
33
  finder.find!
34
34
 
35
- stream.pos.should eql 2
35
+ expect(stream.pos).to eql 2
36
36
  end
37
37
 
38
38
  it "raises an error if no header could be found" do
39
- matcher = stub("matcher", :match? => false)
39
+ matcher = double("matcher", :match? => false)
40
40
 
41
- MPEGAudioFrameMatcher.stub(:new).and_return(matcher)
41
+ allow(MPEGAudioFrameMatcher).to receive(:new).and_return(matcher)
42
42
 
43
43
  expect {
44
44
  finder.find!
@@ -41,14 +41,14 @@ module LAME
41
41
  shared_examples_for "4 valid bytes" do
42
42
  it "matches" do
43
43
  bytes = [b1, b2, b3, b4].pack("C*")
44
- MPEGAudioFrameMatcher.new(bytes).match?.should be_true
44
+ expect(MPEGAudioFrameMatcher.new(bytes).match?).to be_truthy
45
45
  end
46
46
  end
47
47
 
48
48
  shared_examples_for "4 invalid bytes" do
49
49
  it "does not match" do
50
50
  bytes = [b1, b2, b3, b4].pack("C*")
51
- MPEGAudioFrameMatcher.new(bytes).match?.should be_false
51
+ expect(MPEGAudioFrameMatcher.new(bytes).match?).to be_falsy
52
52
  end
53
53
  end
54
54
 
@@ -6,41 +6,41 @@ module LAME
6
6
 
7
7
  subject(:decoder) { SingleFrameDecoder.new(decode_flags, mp3_data) }
8
8
 
9
- let(:decode_flags) { stub("decode flags") }
10
- let(:mp3_data) { stub("mp3 data") }
9
+ let(:decode_flags) { double("decode flags") }
10
+ let(:mp3_data) { double("mp3 data") }
11
11
  let(:data) { "a"*1024 }
12
12
 
13
13
  it "always checks if there is a decoded frame in the internal buffer" do
14
14
  # initial decoded frame
15
- LAME.should_receive(:hip_decode1_headers) do |flags, in_buffer, in_size, out_left, out_right, mp3_data_arg|
16
- flags.should eql decode_flags
17
- in_buffer.size.should eql 0
18
- in_size.should eql 0
19
- out_left.size.should eql 1152*2 # short is 2 bytes
20
- out_right.size.should eql 1152*2
21
- mp3_data_arg.should eql mp3_data
15
+ expect(LAME).to receive(:hip_decode1_headers) do |flags, in_buffer, in_size, out_left, out_right, mp3_data_arg|
16
+ expect(flags).to eql decode_flags
17
+ expect(in_buffer.size).to eql 0
18
+ expect(in_size).to eql 0
19
+ expect(out_left.size).to eql 1152*2 # short is 2 bytes
20
+ expect(out_right.size).to eql 1152*2
21
+ expect(mp3_data_arg).to eql mp3_data
22
22
  0
23
23
  end
24
24
  # new data
25
- LAME.stub(:hip_decode1_headers).and_return(0)
25
+ allow(LAME).to receive(:hip_decode1_headers).and_return(0)
26
26
 
27
27
  decoder.decode(data)
28
28
  end
29
29
 
30
30
  it "writes the input data into the LAME decoder" do
31
31
  # initial
32
- LAME.should_receive(:hip_decode1_headers) do |_, in_buffer, _, _ , _, _|
33
- in_buffer.size.should eql 0
32
+ expect(LAME).to receive(:hip_decode1_headers) do |_, in_buffer, _, _ , _, _|
33
+ expect(in_buffer.size).to eql 0
34
34
  0
35
35
  end
36
36
  # new data
37
- LAME.should_receive(:hip_decode1_headers) do |flags, in_buffer, in_size, out_left, out_right, mp3_data_arg|
38
- flags.should eql decode_flags
39
- in_buffer.size.should eql 1024
40
- in_size.should eql 1024
41
- out_left.size.should eql 1152*2 # short is 2 bytes
42
- out_right.size.should eql 1152*2
43
- mp3_data_arg.should eql mp3_data
37
+ expect(LAME).to receive(:hip_decode1_headers) do |flags, in_buffer, in_size, out_left, out_right, mp3_data_arg|
38
+ expect(flags).to eql decode_flags
39
+ expect(in_buffer.size).to eql 1024
40
+ expect(in_size).to eql 1024
41
+ expect(out_left.size).to eql 1152*2 # short is 2 bytes
42
+ expect(out_right.size).to eql 1152*2
43
+ expect(mp3_data_arg).to eql mp3_data
44
44
  0
45
45
  end
46
46
 
@@ -48,14 +48,14 @@ module LAME
48
48
  end
49
49
 
50
50
  it "decodes until no more frames were decoded" do
51
- LAME.stub(:hip_decode1_headers).and_return(0, 1, 1, 0)
52
- LAME.should_receive(:hip_decode1_headers).exactly(4).times
51
+ allow(LAME).to receive(:hip_decode1_headers).and_return(0, 1, 1, 0)
52
+ expect(LAME).to receive(:hip_decode1_headers).exactly(4).times
53
53
 
54
54
  decoder.decode(data) {}
55
55
  end
56
56
 
57
57
  it "yields decoded frames if one is left in internal buffer" do
58
- LAME.stub(:hip_decode1_headers).and_return(1, 0)
58
+ allow(LAME).to receive(:hip_decode1_headers).and_return(1, 0)
59
59
 
60
60
  expect { |block|
61
61
  decoder.decode(data, &block)
@@ -63,7 +63,7 @@ module LAME
63
63
  end
64
64
 
65
65
  it "yields decoded frames for new data" do
66
- LAME.stub(:hip_decode1_headers).and_return(0, 1, 1, 0)
66
+ allow(LAME).to receive(:hip_decode1_headers).and_return(0, 1, 1, 0)
67
67
 
68
68
  expect { |block|
69
69
  decoder.decode(data, &block)
@@ -71,31 +71,32 @@ module LAME
71
71
  end
72
72
 
73
73
  it "raises an error if decoding failed" do
74
- LAME.stub(:hip_decode1_headers).and_return(-1)
74
+ allow(LAME).to receive(:hip_decode1_headers).and_return(-1)
75
75
 
76
76
  expect {
77
77
  decoder.decode(data)
78
78
  }.to raise_error(DecodingError)
79
79
  end
80
80
 
81
- # Enable these tests once next rspec-expectations has been released
82
- xit "yields until no more data is decoded" do
83
- LAME.stub(:hip_decode1_headers).and_return(0, 1, 1, 0)
81
+ it "yields until no more data is decoded" do
82
+ allow(LAME).to receive(:hip_decode1_headers).and_return(0, 1, 1, 0)
84
83
 
85
- LAME.should_receive(:hip_decode1_headers).exactly(4).times
84
+ expect(LAME).to receive(:hip_decode1_headers).exactly(4).times
86
85
 
87
- expect {
88
- decoder.decode(data)
86
+ expect { |block|
87
+ decoder.decode(data, &block)
89
88
  }.to yield_control.exactly(2).times
90
89
  end
91
90
 
92
- xit "yields if the decoder had a decoded frame " do
93
- LAME.stub(:hip_decode1_headers).and_return(1, 1, 1, 0)
91
+ it "yields if the decoder still had a decoded frame " do
92
+ # the initial '1' indicates a frame was still in the internal buffer (flush)
93
+ # the subsequent '1's are newly decoded frames
94
+ allow(LAME).to receive(:hip_decode1_headers).and_return(1, 0, 1, 1, 0)
94
95
 
95
- LAME.should_receive(:hip_decode1_headers).exactly(4).times
96
+ expect(LAME).to receive(:hip_decode1_headers).exactly(5).times
96
97
 
97
- expect {
98
- decoder.decode(data)
98
+ expect { |block|
99
+ decoder.decode(data, &block)
99
100
  }.to yield_control.exactly(3).times
100
101
  end
101
102