Chromium Code Reviews| Index: media/base/pipeline_unittest.cc |
| diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc |
| index 4c8640c7807b65b6d2c0a7b25f0fd714b6ebbc97..a213875d54f07f4fa1f41c5679b1606b87d09b6e 100644 |
| --- a/media/base/pipeline_unittest.cc |
| +++ b/media/base/pipeline_unittest.cc |
| @@ -94,6 +94,10 @@ class PipelineTest : public ::testing::Test { |
| scoped_ptr<AudioRenderer> audio_renderer(audio_renderer_); |
| filter_collection_->SetAudioRenderer(audio_renderer.Pass()); |
| + text_renderer_ = new MockTextRenderer(); |
| + scoped_ptr<TextRenderer> text_renderer(text_renderer_); |
| + filter_collection_->SetTextRenderer(text_renderer.Pass()); |
| + |
| // InitializeDemuxer() adds overriding expectations for expected non-NULL |
| // streams. |
| DemuxerStream* null_pointer = NULL; |
| @@ -174,6 +178,16 @@ class PipelineTest : public ::testing::Test { |
| } |
| } |
| + // Sets up expectations to allow the text renderer to initialize. |
| + void InitializeTextRenderer() { |
| + EXPECT_CALL(*text_renderer_, Initialize(demuxer_.get(), _, _)) |
| + .WillOnce(RunCallback<1>(PIPELINE_OK)); |
| + |
| + // Startup sequence. |
| + EXPECT_CALL(*text_renderer_, Play(_)) |
| + .WillOnce(RunClosure<0>()); |
| + } |
| + |
| // Sets up expectations on the callback and initializes the pipeline. Called |
| // after tests have set expectations any filters they wish to use. |
| void InitializePipeline(PipelineStatus start_status) { |
| @@ -217,6 +231,10 @@ class PipelineTest : public ::testing::Test { |
| video_stream_->set_video_decoder_config(video_decoder_config_); |
| } |
| + void CreateTextStream() { |
| + text_stream_ = CreateStream(DemuxerStream::TEXT); |
| + } |
| + |
| MockDemuxerStream* audio_stream() { |
| return audio_stream_.get(); |
| } |
| @@ -225,6 +243,10 @@ class PipelineTest : public ::testing::Test { |
| return video_stream_.get(); |
| } |
| + MockDemuxerStream* text_stream() { |
| + return text_stream_.get(); |
| + } |
| + |
| void ExpectSeek(const base::TimeDelta& seek_time) { |
| // Every filter should receive a call to Seek(). |
| EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
| @@ -256,6 +278,13 @@ class PipelineTest : public ::testing::Test { |
| .WillOnce(RunClosure<0>()); |
| } |
| + if (text_stream_) { |
| + EXPECT_CALL(*text_renderer_, Pause(_)) |
| + .WillOnce(RunClosure<0>()); |
| + EXPECT_CALL(*text_renderer_, Play(_)) |
| + .WillOnce(RunClosure<0>()); |
| + } |
| + |
| EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted)); |
| // We expect a successful seek callback. |
| @@ -282,6 +311,9 @@ class PipelineTest : public ::testing::Test { |
| if (video_stream_) |
| EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
| + |
| + if (text_stream_) |
| + EXPECT_CALL(*text_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
| } |
| // Fixture members. |
| @@ -294,8 +326,10 @@ class PipelineTest : public ::testing::Test { |
| scoped_ptr<MockDemuxer> demuxer_; |
| MockVideoRenderer* video_renderer_; |
| MockAudioRenderer* audio_renderer_; |
| + MockTextRenderer* text_renderer_; |
| scoped_ptr<StrictMock<MockDemuxerStream> > audio_stream_; |
| scoped_ptr<StrictMock<MockDemuxerStream> > video_stream_; |
| + scoped_ptr<StrictMock<MockDemuxerStream> > text_stream_; |
| AudioRenderer::TimeCB audio_time_cb_; |
| VideoDecoderConfig video_decoder_config_; |
| @@ -311,6 +345,7 @@ TEST_F(PipelineTest, NotStarted) { |
| EXPECT_FALSE(pipeline_->IsRunning()); |
| EXPECT_FALSE(pipeline_->HasAudio()); |
| EXPECT_FALSE(pipeline_->HasVideo()); |
| + EXPECT_FALSE(pipeline_->HasText()); |
| // Setting should still work. |
| EXPECT_EQ(0.0f, pipeline_->GetPlaybackRate()); |
| @@ -394,6 +429,7 @@ TEST_F(PipelineTest, AudioStream) { |
| InitializePipeline(PIPELINE_OK); |
| EXPECT_TRUE(pipeline_->HasAudio()); |
| EXPECT_FALSE(pipeline_->HasVideo()); |
| + EXPECT_FALSE(pipeline_->HasText()); |
| } |
| TEST_F(PipelineTest, VideoStream) { |
| @@ -407,6 +443,7 @@ TEST_F(PipelineTest, VideoStream) { |
| InitializePipeline(PIPELINE_OK); |
| EXPECT_FALSE(pipeline_->HasAudio()); |
| EXPECT_TRUE(pipeline_->HasVideo()); |
| + EXPECT_FALSE(pipeline_->HasText()); |
| } |
| TEST_F(PipelineTest, AudioVideoStream) { |
| @@ -423,18 +460,39 @@ TEST_F(PipelineTest, AudioVideoStream) { |
| InitializePipeline(PIPELINE_OK); |
| EXPECT_TRUE(pipeline_->HasAudio()); |
| EXPECT_TRUE(pipeline_->HasVideo()); |
| + EXPECT_FALSE(pipeline_->HasText()); |
| +} |
| + |
| +TEST_F(PipelineTest, VideoTextStream) { |
|
fgalligan1
2013/09/04 22:23:09
Maybe add a Text only stream test that will fail.
|
| + CreateVideoStream(); |
| + CreateTextStream(); |
| + MockDemuxerStreamVector streams; |
| + streams.push_back(video_stream()); |
| + streams.push_back(text_stream()); |
| + |
| + InitializeDemuxer(&streams); |
| + InitializeVideoRenderer(video_stream()); |
| + InitializeTextRenderer(); |
| + |
| + InitializePipeline(PIPELINE_OK); |
| + EXPECT_FALSE(pipeline_->HasAudio()); |
| + EXPECT_TRUE(pipeline_->HasVideo()); |
| + EXPECT_TRUE(pipeline_->HasText()); |
| } |
| TEST_F(PipelineTest, Seek) { |
| CreateAudioStream(); |
| CreateVideoStream(); |
| + CreateTextStream(); |
| MockDemuxerStreamVector streams; |
| streams.push_back(audio_stream()); |
| streams.push_back(video_stream()); |
| + streams.push_back(text_stream()); |
| InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000)); |
| InitializeAudioRenderer(audio_stream(), false); |
| InitializeVideoRenderer(video_stream()); |
| + InitializeTextRenderer(); |
| // Initialize then seek! |
| InitializePipeline(PIPELINE_OK); |
| @@ -543,6 +601,7 @@ TEST_F(PipelineTest, DisableAudioRenderer) { |
| InitializePipeline(PIPELINE_OK); |
| EXPECT_TRUE(pipeline_->HasAudio()); |
| EXPECT_TRUE(pipeline_->HasVideo()); |
| + EXPECT_FALSE(pipeline_->HasText()); |
| EXPECT_CALL(*demuxer_, OnAudioRendererDisabled()); |
| pipeline_->OnAudioDisabled(); |
| @@ -568,6 +627,7 @@ TEST_F(PipelineTest, DisableAudioRendererDuringInit) { |
| InitializePipeline(PIPELINE_OK); |
| EXPECT_FALSE(pipeline_->HasAudio()); |
| EXPECT_TRUE(pipeline_->HasVideo()); |
| + EXPECT_FALSE(pipeline_->HasText()); |
| // Verify that ended event is fired when video ends. |
| EXPECT_CALL(callbacks_, OnEnded()); |
| @@ -577,19 +637,25 @@ TEST_F(PipelineTest, DisableAudioRendererDuringInit) { |
| TEST_F(PipelineTest, EndedCallback) { |
| CreateAudioStream(); |
| CreateVideoStream(); |
| + CreateTextStream(); |
| MockDemuxerStreamVector streams; |
| streams.push_back(audio_stream()); |
| streams.push_back(video_stream()); |
| + streams.push_back(text_stream()); |
| InitializeDemuxer(&streams); |
| InitializeAudioRenderer(audio_stream(), false); |
| InitializeVideoRenderer(video_stream()); |
| + InitializeTextRenderer(); |
| InitializePipeline(PIPELINE_OK); |
| - // The ended callback shouldn't run until both renderers have ended. |
| + // The ended callback shouldn't run until all renderers have ended. |
| pipeline_->OnAudioRendererEnded(); |
| message_loop_.RunUntilIdle(); |
| + pipeline_->OnTextRendererEnded(); |
| + message_loop_.RunUntilIdle(); |
| + |
| EXPECT_CALL(callbacks_, OnEnded()); |
| pipeline_->OnVideoRendererEnded(); |
| message_loop_.RunUntilIdle(); |
| @@ -747,6 +813,7 @@ TEST_F(PipelineTest, StartTimeIsZero) { |
| InitializePipeline(PIPELINE_OK); |
| EXPECT_FALSE(pipeline_->HasAudio()); |
| EXPECT_TRUE(pipeline_->HasVideo()); |
| + EXPECT_FALSE(pipeline_->HasText()); |
| EXPECT_EQ(base::TimeDelta(), pipeline_->GetMediaTime()); |
| } |
| @@ -768,6 +835,7 @@ TEST_F(PipelineTest, StartTimeIsNonZero) { |
| InitializePipeline(PIPELINE_OK); |
| EXPECT_FALSE(pipeline_->HasAudio()); |
| EXPECT_TRUE(pipeline_->HasVideo()); |
| + EXPECT_FALSE(pipeline_->HasText()); |
| EXPECT_EQ(kStartTime, pipeline_->GetMediaTime()); |
| } |