Index: media/filters/audio_renderer_impl_unittest.cc |
diff --git a/media/filters/audio_renderer_impl_unittest.cc b/media/filters/audio_renderer_impl_unittest.cc |
index 89c870b2be144a022c9f0b626ba750ef536e1a91..fe901f099465cc591d457303f3dac321e6ca7e73 100644 |
--- a/media/filters/audio_renderer_impl_unittest.cc |
+++ b/media/filters/audio_renderer_impl_unittest.cc |
@@ -20,6 +20,10 @@ using ::testing::Return; |
using ::testing::NiceMock; |
using ::testing::StrictMock; |
+ACTION_P(RunPipelineStatusCB1, status) { |
+ arg1.Run(status); |
+} |
+ |
namespace media { |
// Constants for distinguishing between muted audio and playing audio when using |
@@ -32,7 +36,10 @@ class AudioRendererImplTest : public ::testing::Test { |
// Give the decoder some non-garbage media properties. |
AudioRendererImplTest() |
: renderer_(new AudioRendererImpl(new NiceMock<MockAudioRendererSink>())), |
+ demuxer_stream_(new MockDemuxerStream()), |
decoder_(new MockAudioDecoder()) { |
+ EXPECT_CALL(*demuxer_stream_, type()) |
+ .WillRepeatedly(Return(DemuxerStream::AUDIO)); |
// Queue all reads from the decoder by default. |
ON_CALL(*decoder_, Read(_)) |
@@ -46,6 +53,8 @@ class AudioRendererImplTest : public ::testing::Test { |
.Times(AnyNumber()); |
EXPECT_CALL(*decoder_, samples_per_second()) |
.Times(AnyNumber()); |
+ |
+ decoders_.push_back(decoder_); |
} |
virtual ~AudioRendererImplTest() { |
@@ -76,6 +85,7 @@ class AudioRendererImplTest : public ::testing::Test { |
base::Unretained(this)); |
} |
+ MOCK_METHOD1(OnStatistics, void(const PipelineStatistics&)); |
MOCK_METHOD0(OnUnderflow, void()); |
MOCK_METHOD0(OnEnded, void()); |
MOCK_METHOD0(OnDisabled, void()); |
@@ -87,12 +97,19 @@ class AudioRendererImplTest : public ::testing::Test { |
} |
void Initialize() { |
+ EXPECT_CALL(*decoder_, Initialize(_, _, _)) |
+ .WillOnce(RunPipelineStatusCB1(PIPELINE_OK)); |
+ |
InitializeWithStatus(PIPELINE_OK); |
} |
void InitializeWithStatus(PipelineStatus expected) { |
renderer_->Initialize( |
- decoder_, NewExpectedStatusCB(expected), |
+ demuxer_stream_, |
+ decoders_, |
+ NewExpectedStatusCB(expected), |
+ base::Bind(&AudioRendererImplTest::OnStatistics, |
+ base::Unretained(this)), |
base::Bind(&AudioRendererImplTest::OnUnderflow, |
base::Unretained(this)), |
base::Bind(&AudioRendererImplTest::OnAudioTimeCallback, |
@@ -207,7 +224,9 @@ class AudioRendererImplTest : public ::testing::Test { |
// Fixture members. |
scoped_refptr<AudioRendererImpl> renderer_; |
+ scoped_refptr<MockDemuxerStream> demuxer_stream_; |
scoped_refptr<MockAudioDecoder> decoder_; |
+ AudioRendererImpl::AudioDecoderList decoders_; |
AudioDecoder::ReadCB read_cb_; |
base::TimeDelta next_timestamp_; |
@@ -221,7 +240,10 @@ class AudioRendererImplTest : public ::testing::Test { |
}; |
TEST_F(AudioRendererImplTest, Initialize_Failed) { |
+ EXPECT_CALL(*decoder_, Initialize(_, _, _)) |
+ .WillOnce(RunPipelineStatusCB1(PIPELINE_OK)); |
SetUnsupportedAudioDecoderProperties(); |
+ |
InitializeWithStatus(PIPELINE_ERROR_INITIALIZATION_FAILED); |
// We should have no reads. |
@@ -235,6 +257,29 @@ TEST_F(AudioRendererImplTest, Initialize_Successful) { |
EXPECT_TRUE(read_cb_.is_null()); |
} |
+TEST_F(AudioRendererImplTest, Initialize_DecoderInitFailure) { |
+ EXPECT_CALL(*decoder_, Initialize(_, _, _)) |
+ .WillOnce(RunPipelineStatusCB1(PIPELINE_ERROR_DECODE)); |
+ InitializeWithStatus(PIPELINE_ERROR_DECODE); |
+ |
+ // We should have no reads. |
+ EXPECT_TRUE(read_cb_.is_null()); |
+} |
+ |
+TEST_F(AudioRendererImplTest, Initialize_MultipleDecoders) { |
+ scoped_refptr<MockAudioDecoder> decoder1 = new MockAudioDecoder(); |
+ // Insert |decoder1| as the first decoder in the list. |
+ decoders_.push_front(decoder1); |
+ EXPECT_CALL(*decoder1, Initialize(_, _, _)) |
+ .WillOnce(RunPipelineStatusCB1(DECODER_ERROR_NOT_SUPPORTED)); |
+ EXPECT_CALL(*decoder_, Initialize(_, _, _)) |
+ .WillOnce(RunPipelineStatusCB1(PIPELINE_OK)); |
+ InitializeWithStatus(PIPELINE_OK); |
+ |
+ // We should have no reads. |
+ EXPECT_TRUE(read_cb_.is_null()); |
+} |
+ |
TEST_F(AudioRendererImplTest, Preroll) { |
Initialize(); |
Preroll(); |