Commit 2b74405f authored by xhwang@chromium.org's avatar xhwang@chromium.org

Some cleanup in PipelineTest.

Do not call Pipeline::On{Audio|Video}RendererEnded() because it's pipeline's
implementation detail and will go away. Instead, let the mock renderers call the
ended_cb.

Also rename several helper functions to reflect what they really do.

BUG=392259
TEST=All current tests pass.

Review URL: https://codereview.chromium.org/388763003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282798 0039d316-1c4b-4281-b951-d872f2087c98
parent 8c2efc2e
...@@ -105,8 +105,8 @@ class PipelineTest : public ::testing::Test { ...@@ -105,8 +105,8 @@ class PipelineTest : public ::testing::Test {
scoped_ptr<TextRenderer> text_renderer(text_renderer_); scoped_ptr<TextRenderer> text_renderer(text_renderer_);
filter_collection_->SetTextRenderer(text_renderer.Pass()); filter_collection_->SetTextRenderer(text_renderer.Pass());
// InitializeDemuxer() adds overriding expectations for expected non-NULL // SetDemuxerExpectations() adds overriding expectations for expected
// streams. // non-NULL streams.
DemuxerStream* null_pointer = NULL; DemuxerStream* null_pointer = NULL;
EXPECT_CALL(*demuxer_, GetStream(_)) EXPECT_CALL(*demuxer_, GetStream(_))
.WillRepeatedly(Return(null_pointer)); .WillRepeatedly(Return(null_pointer));
...@@ -141,8 +141,8 @@ class PipelineTest : public ::testing::Test { ...@@ -141,8 +141,8 @@ class PipelineTest : public ::testing::Test {
protected: protected:
// Sets up expectations to allow the demuxer to initialize. // Sets up expectations to allow the demuxer to initialize.
typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector; typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector;
void InitializeDemuxer(MockDemuxerStreamVector* streams, void SetDemuxerExpectations(MockDemuxerStreamVector* streams,
const base::TimeDelta& duration) { const base::TimeDelta& duration) {
EXPECT_CALL(callbacks_, OnDurationChange()); EXPECT_CALL(callbacks_, OnDurationChange());
EXPECT_CALL(*demuxer_, Initialize(_, _, _)) EXPECT_CALL(*demuxer_, Initialize(_, _, _))
.WillOnce(DoAll(SetDemuxerProperties(duration), .WillOnce(DoAll(SetDemuxerProperties(duration),
...@@ -156,9 +156,9 @@ class PipelineTest : public ::testing::Test { ...@@ -156,9 +156,9 @@ class PipelineTest : public ::testing::Test {
} }
} }
void InitializeDemuxer(MockDemuxerStreamVector* streams) { void SetDemuxerExpectations(MockDemuxerStreamVector* streams) {
// Initialize with a default non-zero duration. // Initialize with a default non-zero duration.
InitializeDemuxer(streams, base::TimeDelta::FromSeconds(10)); SetDemuxerExpectations(streams, base::TimeDelta::FromSeconds(10));
} }
scoped_ptr<StrictMock<MockDemuxerStream> > CreateStream( scoped_ptr<StrictMock<MockDemuxerStream> > CreateStream(
...@@ -169,17 +169,19 @@ class PipelineTest : public ::testing::Test { ...@@ -169,17 +169,19 @@ class PipelineTest : public ::testing::Test {
} }
// Sets up expectations to allow the video renderer to initialize. // Sets up expectations to allow the video renderer to initialize.
void InitializeVideoRenderer(DemuxerStream* stream) { void SetVideoRendererExpectations(DemuxerStream* stream) {
EXPECT_CALL(*video_renderer_, Initialize(stream, _, _, _, _, _, _, _, _, _)) EXPECT_CALL(*video_renderer_, Initialize(stream, _, _, _, _, _, _, _, _, _))
.WillOnce(DoAll(SaveArg<5>(&video_buffering_state_cb_), .WillOnce(DoAll(SaveArg<5>(&video_buffering_state_cb_),
SaveArg<6>(&video_ended_cb_),
RunCallback<2>(PIPELINE_OK))); RunCallback<2>(PIPELINE_OK)));
} }
// Sets up expectations to allow the audio renderer to initialize. // Sets up expectations to allow the audio renderer to initialize.
void InitializeAudioRenderer(DemuxerStream* stream) { void SetAudioRendererExpectations(DemuxerStream* stream) {
EXPECT_CALL(*audio_renderer_, Initialize(stream, _, _, _, _, _, _)) EXPECT_CALL(*audio_renderer_, Initialize(stream, _, _, _, _, _, _))
.WillOnce(DoAll(SaveArg<3>(&audio_time_cb_), .WillOnce(DoAll(SaveArg<3>(&audio_time_cb_),
SaveArg<4>(&audio_buffering_state_cb_), SaveArg<4>(&audio_buffering_state_cb_),
SaveArg<5>(&audio_ended_cb_),
RunCallback<1>(PIPELINE_OK))); RunCallback<1>(PIPELINE_OK)));
} }
...@@ -192,7 +194,7 @@ class PipelineTest : public ::testing::Test { ...@@ -192,7 +194,7 @@ class PipelineTest : public ::testing::Test {
// Sets up expectations on the callback and initializes the pipeline. Called // Sets up expectations on the callback and initializes the pipeline. Called
// after tests have set expectations any filters they wish to use. // after tests have set expectations any filters they wish to use.
void InitializePipeline(PipelineStatus start_status) { void StartPipeline(PipelineStatus start_status) {
EXPECT_CALL(callbacks_, OnStart(start_status)); EXPECT_CALL(callbacks_, OnStart(start_status));
if (start_status == PIPELINE_OK) { if (start_status == PIPELINE_OK) {
...@@ -340,6 +342,8 @@ class PipelineTest : public ::testing::Test { ...@@ -340,6 +342,8 @@ class PipelineTest : public ::testing::Test {
AudioRenderer::TimeCB audio_time_cb_; AudioRenderer::TimeCB audio_time_cb_;
BufferingStateCB audio_buffering_state_cb_; BufferingStateCB audio_buffering_state_cb_;
BufferingStateCB video_buffering_state_cb_; BufferingStateCB video_buffering_state_cb_;
base::Closure audio_ended_cb_;
base::Closure video_ended_cb_;
VideoDecoderConfig video_decoder_config_; VideoDecoderConfig video_decoder_config_;
PipelineMetadata metadata_; PipelineMetadata metadata_;
...@@ -406,7 +410,7 @@ TEST_F(PipelineTest, URLNotFound) { ...@@ -406,7 +410,7 @@ TEST_F(PipelineTest, URLNotFound) {
EXPECT_CALL(*demuxer_, Stop(_)) EXPECT_CALL(*demuxer_, Stop(_))
.WillOnce(RunClosure<0>()); .WillOnce(RunClosure<0>());
InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND); StartPipeline(PIPELINE_ERROR_URL_NOT_FOUND);
} }
TEST_F(PipelineTest, NoStreams) { TEST_F(PipelineTest, NoStreams) {
...@@ -415,7 +419,7 @@ TEST_F(PipelineTest, NoStreams) { ...@@ -415,7 +419,7 @@ TEST_F(PipelineTest, NoStreams) {
EXPECT_CALL(*demuxer_, Stop(_)) EXPECT_CALL(*demuxer_, Stop(_))
.WillOnce(RunClosure<0>()); .WillOnce(RunClosure<0>());
InitializePipeline(PIPELINE_ERROR_COULD_NOT_RENDER); StartPipeline(PIPELINE_ERROR_COULD_NOT_RENDER);
} }
TEST_F(PipelineTest, AudioStream) { TEST_F(PipelineTest, AudioStream) {
...@@ -423,10 +427,10 @@ TEST_F(PipelineTest, AudioStream) { ...@@ -423,10 +427,10 @@ TEST_F(PipelineTest, AudioStream) {
MockDemuxerStreamVector streams; MockDemuxerStreamVector streams;
streams.push_back(audio_stream()); streams.push_back(audio_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
EXPECT_TRUE(metadata_.has_audio); EXPECT_TRUE(metadata_.has_audio);
EXPECT_FALSE(metadata_.has_video); EXPECT_FALSE(metadata_.has_video);
} }
...@@ -436,10 +440,10 @@ TEST_F(PipelineTest, VideoStream) { ...@@ -436,10 +440,10 @@ TEST_F(PipelineTest, VideoStream) {
MockDemuxerStreamVector streams; MockDemuxerStreamVector streams;
streams.push_back(video_stream()); streams.push_back(video_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
EXPECT_FALSE(metadata_.has_audio); EXPECT_FALSE(metadata_.has_audio);
EXPECT_TRUE(metadata_.has_video); EXPECT_TRUE(metadata_.has_video);
} }
...@@ -451,11 +455,11 @@ TEST_F(PipelineTest, AudioVideoStream) { ...@@ -451,11 +455,11 @@ TEST_F(PipelineTest, AudioVideoStream) {
streams.push_back(audio_stream()); streams.push_back(audio_stream());
streams.push_back(video_stream()); streams.push_back(video_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
EXPECT_TRUE(metadata_.has_audio); EXPECT_TRUE(metadata_.has_audio);
EXPECT_TRUE(metadata_.has_video); EXPECT_TRUE(metadata_.has_video);
} }
...@@ -466,10 +470,10 @@ TEST_F(PipelineTest, VideoTextStream) { ...@@ -466,10 +470,10 @@ TEST_F(PipelineTest, VideoTextStream) {
MockDemuxerStreamVector streams; MockDemuxerStreamVector streams;
streams.push_back(video_stream()); streams.push_back(video_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
EXPECT_FALSE(metadata_.has_audio); EXPECT_FALSE(metadata_.has_audio);
EXPECT_TRUE(metadata_.has_video); EXPECT_TRUE(metadata_.has_video);
...@@ -485,11 +489,11 @@ TEST_F(PipelineTest, VideoAudioTextStream) { ...@@ -485,11 +489,11 @@ TEST_F(PipelineTest, VideoAudioTextStream) {
streams.push_back(video_stream()); streams.push_back(video_stream());
streams.push_back(audio_stream()); streams.push_back(audio_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
EXPECT_TRUE(metadata_.has_audio); EXPECT_TRUE(metadata_.has_audio);
EXPECT_TRUE(metadata_.has_video); EXPECT_TRUE(metadata_.has_video);
...@@ -505,12 +509,12 @@ TEST_F(PipelineTest, Seek) { ...@@ -505,12 +509,12 @@ TEST_F(PipelineTest, Seek) {
streams.push_back(audio_stream()); streams.push_back(audio_stream());
streams.push_back(video_stream()); streams.push_back(video_stream());
InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000)); SetDemuxerExpectations(&streams, base::TimeDelta::FromSeconds(3000));
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
// Initialize then seek! // Initialize then seek!
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
message_loop_.RunUntilIdle(); message_loop_.RunUntilIdle();
...@@ -525,15 +529,15 @@ TEST_F(PipelineTest, SetVolume) { ...@@ -525,15 +529,15 @@ TEST_F(PipelineTest, SetVolume) {
MockDemuxerStreamVector streams; MockDemuxerStreamVector streams;
streams.push_back(audio_stream()); streams.push_back(audio_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
// The audio renderer should receive a call to SetVolume(). // The audio renderer should receive a call to SetVolume().
float expected = 0.5f; float expected = 0.5f;
EXPECT_CALL(*audio_renderer_, SetVolume(expected)); EXPECT_CALL(*audio_renderer_, SetVolume(expected));
// Initialize then set volume! // Initialize then set volume!
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
pipeline_->SetVolume(expected); pipeline_->SetVolume(expected);
} }
...@@ -543,10 +547,10 @@ TEST_F(PipelineTest, Properties) { ...@@ -543,10 +547,10 @@ TEST_F(PipelineTest, Properties) {
streams.push_back(video_stream()); streams.push_back(video_stream());
const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100);
InitializeDemuxer(&streams, kDuration); SetDemuxerExpectations(&streams, kDuration);
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
EXPECT_EQ(kDuration.ToInternalValue(), EXPECT_EQ(kDuration.ToInternalValue(),
pipeline_->GetMediaDuration().ToInternalValue()); pipeline_->GetMediaDuration().ToInternalValue());
EXPECT_FALSE(pipeline_->DidLoadingProgress()); EXPECT_FALSE(pipeline_->DidLoadingProgress());
...@@ -558,10 +562,10 @@ TEST_F(PipelineTest, GetBufferedTimeRanges) { ...@@ -558,10 +562,10 @@ TEST_F(PipelineTest, GetBufferedTimeRanges) {
streams.push_back(video_stream()); streams.push_back(video_stream());
const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100);
InitializeDemuxer(&streams, kDuration); SetDemuxerExpectations(&streams, kDuration);
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
EXPECT_EQ(0u, pipeline_->GetBufferedTimeRanges().size()); EXPECT_EQ(0u, pipeline_->GetBufferedTimeRanges().size());
...@@ -588,18 +592,18 @@ TEST_F(PipelineTest, EndedCallback) { ...@@ -588,18 +592,18 @@ TEST_F(PipelineTest, EndedCallback) {
streams.push_back(audio_stream()); streams.push_back(audio_stream());
streams.push_back(video_stream()); streams.push_back(video_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
AddTextStream(); AddTextStream();
// The ended callback shouldn't run until all renderers have ended. // The ended callback shouldn't run until all renderers have ended.
pipeline_->OnAudioRendererEnded(); audio_ended_cb_.Run();
message_loop_.RunUntilIdle(); message_loop_.RunUntilIdle();
pipeline_->OnVideoRendererEnded(); video_ended_cb_.Run();
message_loop_.RunUntilIdle(); message_loop_.RunUntilIdle();
EXPECT_CALL(*audio_renderer_, StopRendering()); EXPECT_CALL(*audio_renderer_, StopRendering());
...@@ -621,10 +625,10 @@ TEST_F(PipelineTest, AudioStreamShorterThanVideo) { ...@@ -621,10 +625,10 @@ TEST_F(PipelineTest, AudioStreamShorterThanVideo) {
pipeline_->SetTimeDeltaInterpolatorForTesting( pipeline_->SetTimeDeltaInterpolatorForTesting(
new TimeDeltaInterpolator(&test_tick_clock_)); new TimeDeltaInterpolator(&test_tick_clock_));
InitializeDemuxer(&streams, duration); SetDemuxerExpectations(&streams, duration);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
EXPECT_EQ(0, pipeline_->GetMediaTime().ToInternalValue()); EXPECT_EQ(0, pipeline_->GetMediaTime().ToInternalValue());
...@@ -642,7 +646,7 @@ TEST_F(PipelineTest, AudioStreamShorterThanVideo) { ...@@ -642,7 +646,7 @@ TEST_F(PipelineTest, AudioStreamShorterThanVideo) {
EXPECT_EQ(pipeline_->GetMediaTime().ToInternalValue(), start_time); EXPECT_EQ(pipeline_->GetMediaTime().ToInternalValue(), start_time);
// Signal end of audio stream. // Signal end of audio stream.
pipeline_->OnAudioRendererEnded(); audio_ended_cb_.Run();
message_loop_.RunUntilIdle(); message_loop_.RunUntilIdle();
// Verify that the clock advances. // Verify that the clock advances.
...@@ -653,7 +657,7 @@ TEST_F(PipelineTest, AudioStreamShorterThanVideo) { ...@@ -653,7 +657,7 @@ TEST_F(PipelineTest, AudioStreamShorterThanVideo) {
// Signal end of video stream and make sure OnEnded() callback occurs. // Signal end of video stream and make sure OnEnded() callback occurs.
EXPECT_CALL(*audio_renderer_, StopRendering()); EXPECT_CALL(*audio_renderer_, StopRendering());
EXPECT_CALL(callbacks_, OnEnded()); EXPECT_CALL(callbacks_, OnEnded());
pipeline_->OnVideoRendererEnded(); video_ended_cb_.Run();
} }
TEST_F(PipelineTest, ErrorDuringSeek) { TEST_F(PipelineTest, ErrorDuringSeek) {
...@@ -661,9 +665,9 @@ TEST_F(PipelineTest, ErrorDuringSeek) { ...@@ -661,9 +665,9 @@ TEST_F(PipelineTest, ErrorDuringSeek) {
MockDemuxerStreamVector streams; MockDemuxerStreamVector streams;
streams.push_back(audio_stream()); streams.push_back(audio_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
float playback_rate = 1.0f; float playback_rate = 1.0f;
EXPECT_CALL(*audio_renderer_, SetPlaybackRate(playback_rate)); EXPECT_CALL(*audio_renderer_, SetPlaybackRate(playback_rate));
...@@ -716,9 +720,9 @@ TEST_F(PipelineTest, NoMessageDuringTearDownFromError) { ...@@ -716,9 +720,9 @@ TEST_F(PipelineTest, NoMessageDuringTearDownFromError) {
MockDemuxerStreamVector streams; MockDemuxerStreamVector streams;
streams.push_back(audio_stream()); streams.push_back(audio_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
// Trigger additional requests on the pipeline during tear down from error. // Trigger additional requests on the pipeline during tear down from error.
base::Callback<void(PipelineStatus)> cb = base::Bind( base::Callback<void(PipelineStatus)> cb = base::Bind(
...@@ -760,9 +764,9 @@ TEST_F(PipelineTest, AudioTimeUpdateDuringSeek) { ...@@ -760,9 +764,9 @@ TEST_F(PipelineTest, AudioTimeUpdateDuringSeek) {
MockDemuxerStreamVector streams; MockDemuxerStreamVector streams;
streams.push_back(audio_stream()); streams.push_back(audio_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
float playback_rate = 1.0f; float playback_rate = 1.0f;
EXPECT_CALL(*audio_renderer_, SetPlaybackRate(playback_rate)); EXPECT_CALL(*audio_renderer_, SetPlaybackRate(playback_rate));
...@@ -818,9 +822,9 @@ TEST_F(PipelineTest, DeleteAfterStop) { ...@@ -818,9 +822,9 @@ TEST_F(PipelineTest, DeleteAfterStop) {
CreateAudioStream(); CreateAudioStream();
MockDemuxerStreamVector streams; MockDemuxerStreamVector streams;
streams.push_back(audio_stream()); streams.push_back(audio_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
ExpectStop(); ExpectStop();
...@@ -836,10 +840,10 @@ TEST_F(PipelineTest, Underflow) { ...@@ -836,10 +840,10 @@ TEST_F(PipelineTest, Underflow) {
streams.push_back(audio_stream()); streams.push_back(audio_stream());
streams.push_back(video_stream()); streams.push_back(video_stream());
InitializeDemuxer(&streams); SetDemuxerExpectations(&streams);
InitializeAudioRenderer(audio_stream()); SetAudioRendererExpectations(audio_stream());
InitializeVideoRenderer(video_stream()); SetVideoRendererExpectations(video_stream());
InitializePipeline(PIPELINE_OK); StartPipeline(PIPELINE_OK);
// Simulate underflow. // Simulate underflow.
EXPECT_CALL(*audio_renderer_, StopRendering()); EXPECT_CALL(*audio_renderer_, StopRendering());
...@@ -941,7 +945,7 @@ class PipelineTeardownTest : public PipelineTest { ...@@ -941,7 +945,7 @@ class PipelineTeardownTest : public PipelineTest {
MockDemuxerStreamVector streams; MockDemuxerStreamVector streams;
streams.push_back(audio_stream()); streams.push_back(audio_stream());
streams.push_back(video_stream()); streams.push_back(video_stream());
InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000)); SetDemuxerExpectations(&streams, base::TimeDelta::FromSeconds(3000));
if (state == kInitAudioRenderer) { if (state == kInitAudioRenderer) {
if (stop_or_error == kStop) { if (stop_or_error == kStop) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment