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()); | 
| } |