| Index: media/base/pipeline_unittest.cc
|
| diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc
|
| index bd00361c47959848dbf2c66e8ff21d59480b0ed5..a4a0588e1fdc2a7ead348f905ed3a40bd6f0bb1e 100644
|
| --- a/media/base/pipeline_unittest.cc
|
| +++ b/media/base/pipeline_unittest.cc
|
| @@ -135,7 +135,6 @@ class PipelineTest : public ::testing::Test {
|
| EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
|
| .WillOnce(DoAll(SetDemuxerProperties(duration),
|
| RunPipelineStatusCB1()));
|
| - EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
|
|
|
| // Configure the demuxer to return the streams.
|
| for (size_t i = 0; i < streams->size(); ++i) {
|
| @@ -202,14 +201,6 @@ class PipelineTest : public ::testing::Test {
|
| .WillOnce(DoAll(SaveArg<3>(&audio_time_cb_),
|
| RunPipelineStatusCB1()));
|
| }
|
| - EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f));
|
| - EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f));
|
| -
|
| - // Startup sequence.
|
| - EXPECT_CALL(*mocks_->audio_renderer(), Preroll(base::TimeDelta(), _))
|
| - .WillOnce(RunPipelineStatusCB1());
|
| - EXPECT_CALL(*mocks_->audio_renderer(), Play(_))
|
| - .WillOnce(RunClosure());
|
| }
|
|
|
| // Sets up expectations on the callback and initializes the pipeline. Called
|
| @@ -217,6 +208,21 @@ class PipelineTest : public ::testing::Test {
|
| void InitializePipeline(PipelineStatus start_status) {
|
| EXPECT_CALL(callbacks_, OnStart(start_status));
|
|
|
| + if (start_status == PIPELINE_OK) {
|
| + EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
|
| +
|
| + if (audio_stream_) {
|
| + EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f));
|
| + EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f));
|
| +
|
| + // Startup sequence.
|
| + EXPECT_CALL(*mocks_->audio_renderer(), Preroll(base::TimeDelta(), _))
|
| + .WillOnce(RunPipelineStatusCB1());
|
| + EXPECT_CALL(*mocks_->audio_renderer(), Play(_))
|
| + .WillOnce(RunClosure());
|
| + }
|
| + }
|
| +
|
| pipeline_->Start(
|
| mocks_->Create().Pass(),
|
| base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
|
| @@ -715,7 +721,7 @@ TEST_F(PipelineTest, ErrorDuringSeek) {
|
| MockDemuxerStreamVector streams;
|
| streams.push_back(audio_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(10));
|
| + InitializeDemuxer(&streams);
|
| InitializeAudioDecoder(audio_stream());
|
| InitializeAudioRenderer();
|
| InitializePipeline(PIPELINE_OK);
|
| @@ -771,7 +777,7 @@ TEST_F(PipelineTest, NoMessageDuringTearDownFromError) {
|
| MockDemuxerStreamVector streams;
|
| streams.push_back(audio_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(10));
|
| + InitializeDemuxer(&streams);
|
| InitializeAudioDecoder(audio_stream());
|
| InitializeAudioRenderer();
|
| InitializePipeline(PIPELINE_OK);
|
| @@ -856,7 +862,7 @@ TEST_F(PipelineTest, AudioTimeUpdateDuringSeek) {
|
| MockDemuxerStreamVector streams;
|
| streams.push_back(audio_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(10));
|
| + InitializeDemuxer(&streams);
|
| InitializeAudioDecoder(audio_stream());
|
| InitializeAudioRenderer();
|
| InitializePipeline(PIPELINE_OK);
|
| @@ -904,6 +910,119 @@ TEST_F(PipelineTest, AudioTimeUpdateDuringSeek) {
|
| EXPECT_EQ(pipeline_->GetMediaTime(), new_time);
|
| }
|
|
|
| +TEST_F(PipelineTest, InitFailure_Demuxer) {
|
| + PipelineStatus expected_status = DEMUXER_ERROR_COULD_NOT_OPEN;
|
| + EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
|
| + .WillOnce(RunPipelineStatusCB1WithStatus(expected_status));
|
| + EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| + .WillOnce(RunClosure());
|
| + InitializePipeline(expected_status);
|
| + EXPECT_FALSE(pipeline_->IsInitialized());
|
| +}
|
| +
|
| +TEST_F(PipelineTest, InitFailure_AudioDecoder) {
|
| + CreateAudioStream();
|
| + MockDemuxerStreamVector streams;
|
| + streams.push_back(audio_stream());
|
| +
|
| + InitializeDemuxer(&streams);
|
| +
|
| + PipelineStatus expected_status = PIPELINE_ERROR_DECODE;
|
| + scoped_refptr<DemuxerStream> stream = streams[0];
|
| + EXPECT_CALL(*mocks_->audio_decoder(), Initialize(stream, _, _))
|
| + .WillOnce(RunPipelineStatusCB1WithStatus(expected_status));
|
| +
|
| + EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| + .WillOnce(RunClosure());
|
| +
|
| + InitializePipeline(expected_status);
|
| + EXPECT_FALSE(pipeline_->IsInitialized());
|
| + EXPECT_FALSE(pipeline_->HasAudio());
|
| +}
|
| +
|
| +TEST_F(PipelineTest, InitFailure_AudioRenderer) {
|
| + CreateAudioStream();
|
| + MockDemuxerStreamVector streams;
|
| + streams.push_back(audio_stream());
|
| +
|
| + InitializeDemuxer(&streams);
|
| + InitializeAudioDecoder(audio_stream());
|
| +
|
| + PipelineStatus expected_status = PIPELINE_ERROR_INITIALIZATION_FAILED;
|
| + EXPECT_CALL(*mocks_->audio_renderer(), Initialize(
|
| + scoped_refptr<AudioDecoder>(mocks_->audio_decoder()),
|
| + _, _, _, _, _, _))
|
| + .WillOnce(RunPipelineStatusCB1WithStatus(expected_status));
|
| +
|
| + EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| + .WillOnce(RunClosure());
|
| + EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
|
| + .WillOnce(RunClosure());
|
| +
|
| + InitializePipeline(expected_status);
|
| + EXPECT_FALSE(pipeline_->IsInitialized());
|
| + EXPECT_TRUE(pipeline_->HasAudio());
|
| +}
|
| +
|
| +TEST_F(PipelineTest, InitFailure_VideoDecoder) {
|
| + CreateAudioStream();
|
| + CreateVideoStream();
|
| + MockDemuxerStreamVector streams;
|
| + streams.push_back(audio_stream());
|
| + streams.push_back(video_stream());
|
| +
|
| + InitializeDemuxer(&streams);
|
| + InitializeAudioDecoder(audio_stream());
|
| + InitializeAudioRenderer();
|
| +
|
| + PipelineStatus expected_status = PIPELINE_ERROR_DECODE;
|
| + scoped_refptr<DemuxerStream> stream = streams[1];
|
| + EXPECT_CALL(*mocks_->video_decoder(),
|
| + Initialize(stream, _, _))
|
| + .WillOnce(RunPipelineStatusCB1WithStatus(expected_status));
|
| +
|
| + EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| + .WillOnce(RunClosure());
|
| + EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
|
| + .WillOnce(RunClosure());
|
| +
|
| + InitializePipeline(expected_status);
|
| + EXPECT_FALSE(pipeline_->IsInitialized());
|
| + EXPECT_TRUE(pipeline_->HasAudio());
|
| + EXPECT_FALSE(pipeline_->HasVideo());
|
| +}
|
| +
|
| +TEST_F(PipelineTest, InitFailure_VideoRenderer) {
|
| + CreateAudioStream();
|
| + CreateVideoStream();
|
| + MockDemuxerStreamVector streams;
|
| + streams.push_back(audio_stream());
|
| + streams.push_back(video_stream());
|
| +
|
| + InitializeDemuxer(&streams);
|
| + InitializeAudioDecoder(audio_stream());
|
| + InitializeAudioRenderer();
|
| + InitializeVideoDecoder(video_stream());
|
| +
|
| + PipelineStatus expected_status = PIPELINE_ERROR_INITIALIZATION_FAILED;
|
| + EXPECT_CALL(*mocks_->video_renderer(), Initialize(
|
| + scoped_refptr<VideoDecoder>(mocks_->video_decoder()),
|
| + _, _, _, _, _, _, _, _))
|
| + .WillOnce(RunPipelineStatusCB1WithStatus(expected_status));
|
| +
|
| + EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| + .WillOnce(RunClosure());
|
| + EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
|
| + .WillOnce(RunClosure());
|
| + EXPECT_CALL(*mocks_->video_renderer(), Stop(_))
|
| + .WillOnce(RunClosure());
|
| +
|
| + InitializePipeline(expected_status);
|
| + EXPECT_FALSE(pipeline_->IsInitialized());
|
| + EXPECT_TRUE(pipeline_->HasAudio());
|
| + EXPECT_TRUE(pipeline_->HasVideo());
|
| +}
|
| +
|
| class FlexibleCallbackRunner : public base::DelegateSimpleThread::Delegate {
|
| public:
|
| FlexibleCallbackRunner(base::TimeDelta delay, PipelineStatus status,
|
|
|