Chromium Code Reviews| Index: media/filters/decrypting_audio_decoder_unittest.cc |
| diff --git a/media/filters/decrypting_audio_decoder_unittest.cc b/media/filters/decrypting_audio_decoder_unittest.cc |
| index 007a288e1592769d07bdc9542a30e3b3c48d81cc..076c814adf6c9c35025e949da515e024f59aeba8 100644 |
| --- a/media/filters/decrypting_audio_decoder_unittest.cc |
| +++ b/media/filters/decrypting_audio_decoder_unittest.cc |
| @@ -19,6 +19,7 @@ |
| #include "testing/gmock/include/gmock/gmock.h" |
| using ::testing::_; |
| +using ::testing::Assign; |
| using ::testing::AtMost; |
| using ::testing::IsNull; |
| using ::testing::SaveArg; |
| @@ -59,13 +60,6 @@ ACTION_P(RunCallbackIfNotNull, param) { |
| arg0.Run(param); |
| } |
| -// Mock action which we use to repeatedly call ReadAndExpectFrameReadyWith() if |
| -// we get kNotEnoughData from a Decode() call to |decoder_|. |
| -ACTION_P2(CallExpectFrameReadyMoreData, test, buffer) { |
| - test->ReadAndExpectFrameReadyWith( |
| - CreateFakeEncryptedBuffer(), AudioDecoder::kNotEnoughData, buffer); |
| -} |
| - |
| MATCHER(IsEndOfStream, "end of stream") { |
| return (arg->end_of_stream()); |
| } |
| @@ -107,7 +101,9 @@ class DecryptingAudioDecoderTest : public testing::Test { |
| kNoTimestamp()); |
| decoded_frame_list_.push_back(decoded_frame_); |
| - decoder_->Initialize(config, NewExpectedStatusCB(status)); |
| + decoder_->Initialize(config, NewExpectedStatusCB(status), |
| + base::Bind(&DecryptingAudioDecoderTest::FrameReady, |
| + base::Unretained(this))); |
| message_loop_.RunUntilIdle(); |
| } |
| @@ -136,35 +132,27 @@ class DecryptingAudioDecoderTest : public testing::Test { |
| .WillOnce(RunCallback<1>(true)); |
| EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kAudio, _)) |
| .WillOnce(SaveArg<1>(&key_added_cb_)); |
| - decoder_->Initialize(new_config, NewExpectedStatusCB(PIPELINE_OK)); |
| + decoder_->Initialize(new_config, NewExpectedStatusCB(PIPELINE_OK), |
| + base::Bind(&DecryptingAudioDecoderTest::FrameReady, |
| + base::Unretained(this))); |
| } |
| void ReadAndExpectFrameReadyWith( |
|
xhwang
2014/06/05 21:53:49
This should really be renamed to DecodeAndExpect..
Sergey Ulanov
2014/06/06 22:49:40
Done.
|
| scoped_refptr<DecoderBuffer> input, |
| AudioDecoder::Status status, |
| - const scoped_refptr<AudioBuffer>& audio_frame) { |
| - |
| - const scoped_refptr<AudioBuffer>& buffer = decoder_->GetDecodeOutput(); |
| - |
| - if (buffer) { |
| - EXPECT_EQ(audio_frame, buffer); |
| - EXPECT_EQ(status, AudioDecoder::kOk); |
| - return; |
| + const Decryptor::AudioBuffers& audio_frames) { |
| + for (Decryptor::AudioBuffers::const_iterator it = audio_frames.begin(); |
| + it != audio_frames.end(); ++it) { |
| + if ((*it)->end_of_stream()) { |
| + EXPECT_CALL(*this, FrameReady(IsEndOfStream())); |
| + } else { |
| + EXPECT_CALL(*this, FrameReady(*it)); |
| + } |
| } |
| - |
| - if (status == AudioDecoder::kNotEnoughData) |
| - // Keep calling again to give it more data if we get kNotEnoughData. |
| - EXPECT_CALL(*this, FrameReady(status, scoped_refptr<AudioBuffer>(NULL))). |
| - WillRepeatedly(CallExpectFrameReadyMoreData(this, audio_frame)); |
| - else if (status != AudioDecoder::kOk) |
| - EXPECT_CALL(*this, FrameReady(status, IsNull())); |
| - else if (audio_frame->end_of_stream()) |
| - EXPECT_CALL(*this, FrameReady(status, IsEndOfStream())); |
| - else |
| - EXPECT_CALL(*this, FrameReady(status, audio_frame)); |
| + EXPECT_CALL(*this, DecodeDone(status)); |
| decoder_->Decode(input, |
| - base::Bind(&DecryptingAudioDecoderTest::FrameReady, |
| + base::Bind(&DecryptingAudioDecoderTest::DecodeDone, |
| base::Unretained(this))); |
| message_loop_.RunUntilIdle(); |
| } |
| @@ -179,17 +167,17 @@ class DecryptingAudioDecoderTest : public testing::Test { |
| .WillRepeatedly(RunCallback<1>(Decryptor::kNeedMoreData, |
| Decryptor::AudioBuffers())); |
| - ReadAndExpectFrameReadyWith( |
| - encrypted_buffer_, AudioDecoder::kOk, decoded_frame_); |
| + ReadAndExpectFrameReadyWith(encrypted_buffer_, AudioDecoder::kOk, |
| + Decryptor::AudioBuffers(1, decoded_frame_)); |
| } |
| // Sets up expectations and actions to put DecryptingAudioDecoder in an end |
| // of stream state. This function must be called after |
| // EnterNormalDecodingState() to work. |
| void EnterEndOfStreamState() { |
| - ReadAndExpectFrameReadyWith(DecoderBuffer::CreateEOSBuffer(), |
| - AudioDecoder::kOk, |
| - end_of_stream_frame_); |
| + ReadAndExpectFrameReadyWith( |
| + DecoderBuffer::CreateEOSBuffer(), AudioDecoder::kOk, |
| + Decryptor::AudioBuffers(1, end_of_stream_frame_)); |
| } |
| // Make the audio decode callback pending by saving and not firing it. |
| @@ -199,7 +187,7 @@ class DecryptingAudioDecoderTest : public testing::Test { |
| .WillOnce(SaveArg<1>(&pending_audio_decode_cb_)); |
| decoder_->Decode(encrypted_buffer_, |
| - base::Bind(&DecryptingAudioDecoderTest::FrameReady, |
| + base::Bind(&DecryptingAudioDecoderTest::DecodeDone, |
| base::Unretained(this))); |
| message_loop_.RunUntilIdle(); |
| // Make sure the Decode() on the decoder triggers a DecryptAndDecode() on |
| @@ -212,7 +200,7 @@ class DecryptingAudioDecoderTest : public testing::Test { |
| .WillRepeatedly(RunCallback<1>(Decryptor::kNoKey, |
| Decryptor::AudioBuffers())); |
| decoder_->Decode(encrypted_buffer_, |
| - base::Bind(&DecryptingAudioDecoderTest::FrameReady, |
| + base::Bind(&DecryptingAudioDecoderTest::DecodeDone, |
| base::Unretained(this))); |
| message_loop_.RunUntilIdle(); |
| } |
| @@ -254,8 +242,8 @@ class DecryptingAudioDecoderTest : public testing::Test { |
| MOCK_METHOD1(RequestDecryptorNotification, void(const DecryptorReadyCB&)); |
| - MOCK_METHOD2(FrameReady, |
| - void(AudioDecoder::Status, const scoped_refptr<AudioBuffer>&)); |
| + MOCK_METHOD1(FrameReady, void(const scoped_refptr<AudioBuffer>&)); |
| + MOCK_METHOD1(DecodeDone, void(AudioDecoder::Status)); |
| base::MessageLoop message_loop_; |
| scoped_ptr<DecryptingAudioDecoder> decoder_; |
| @@ -333,7 +321,7 @@ TEST_F(DecryptingAudioDecoderTest, DecryptAndDecode_DecodeError) { |
| Decryptor::AudioBuffers())); |
| ReadAndExpectFrameReadyWith( |
| - encrypted_buffer_, AudioDecoder::kDecodeError, NULL); |
| + encrypted_buffer_, AudioDecoder::kDecodeError, Decryptor::AudioBuffers()); |
| } |
| // Test the case where the decryptor returns kNeedMoreData to ask for more |
| @@ -348,9 +336,14 @@ TEST_F(DecryptingAudioDecoderTest, DecryptAndDecode_NeedMoreData) { |
| // We expect it to eventually return kOk, with any number of returns of |
| // kNotEnoughData beforehand. |
| - EXPECT_CALL(*this, FrameReady(AudioDecoder::kOk, decoded_frame_)); |
| - ReadAndExpectFrameReadyWith( |
| - encrypted_buffer_, AudioDecoder::kNotEnoughData, decoded_frame_); |
| + bool frame_delivered = false; |
| + EXPECT_CALL(*this, FrameReady(decoded_frame_)) |
| + .WillOnce(Assign(&frame_delivered, true)); |
| + |
| + while (!frame_delivered) { |
| + ASSERT_NO_FATAL_FAILURE(ReadAndExpectFrameReadyWith( |
| + encrypted_buffer_, AudioDecoder::kOk, Decryptor::AudioBuffers())); |
| + } |
| } |
| // Test the case where the decryptor returns multiple decoded frames. |
| @@ -375,10 +368,11 @@ TEST_F(DecryptingAudioDecoderTest, DecryptAndDecode_MultipleFrames) { |
| EXPECT_CALL(*decryptor_, DecryptAndDecodeAudio(_, _)) |
| .WillOnce(RunCallback<1>(Decryptor::kSuccess, decoded_frame_list_)); |
| - ReadAndExpectFrameReadyWith( |
| - encrypted_buffer_, AudioDecoder::kOk, decoded_frame_); |
| - ReadAndExpectFrameReadyWith(encrypted_buffer_, AudioDecoder::kOk, frame_a); |
| - ReadAndExpectFrameReadyWith(encrypted_buffer_, AudioDecoder::kOk, frame_b); |
| + Decryptor::AudioBuffers buffers; |
| + buffers.push_back(decoded_frame_); |
| + buffers.push_back(frame_a); |
| + buffers.push_back(frame_b); |
| + ReadAndExpectFrameReadyWith(encrypted_buffer_, AudioDecoder::kOk, buffers); |
| } |
| // Test the case where the decryptor receives end-of-stream buffer. |
| @@ -416,7 +410,8 @@ TEST_F(DecryptingAudioDecoderTest, KeyAdded_DuringWaitingForKey) { |
| EXPECT_CALL(*decryptor_, DecryptAndDecodeAudio(_, _)) |
| .WillRepeatedly(RunCallback<1>(Decryptor::kSuccess, decoded_frame_list_)); |
| - EXPECT_CALL(*this, FrameReady(AudioDecoder::kOk, decoded_frame_)); |
| + EXPECT_CALL(*this, FrameReady(decoded_frame_)); |
| + EXPECT_CALL(*this, DecodeDone(AudioDecoder::kOk)); |
| key_added_cb_.Run(); |
| message_loop_.RunUntilIdle(); |
| } |
| @@ -429,7 +424,8 @@ TEST_F(DecryptingAudioDecoderTest, KeyAdded_DruingPendingDecode) { |
| EXPECT_CALL(*decryptor_, DecryptAndDecodeAudio(_, _)) |
| .WillRepeatedly(RunCallback<1>(Decryptor::kSuccess, decoded_frame_list_)); |
| - EXPECT_CALL(*this, FrameReady(AudioDecoder::kOk, decoded_frame_)); |
| + EXPECT_CALL(*this, FrameReady(decoded_frame_)); |
| + EXPECT_CALL(*this, DecodeDone(AudioDecoder::kOk)); |
| // The audio decode callback is returned after the correct decryption key is |
| // added. |
| key_added_cb_.Run(); |
| @@ -458,7 +454,7 @@ TEST_F(DecryptingAudioDecoderTest, Reset_DuringPendingDecode) { |
| Initialize(); |
| EnterPendingDecodeState(); |
| - EXPECT_CALL(*this, FrameReady(AudioDecoder::kAborted, IsNull())); |
| + EXPECT_CALL(*this, DecodeDone(AudioDecoder::kAborted)); |
| Reset(); |
| } |
| @@ -468,7 +464,7 @@ TEST_F(DecryptingAudioDecoderTest, Reset_DuringWaitingForKey) { |
| Initialize(); |
| EnterWaitingForKeyState(); |
| - EXPECT_CALL(*this, FrameReady(AudioDecoder::kAborted, IsNull())); |
| + EXPECT_CALL(*this, DecodeDone(AudioDecoder::kAborted)); |
| Reset(); |
| } |