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