Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(429)

Unified Diff: media/base/pipeline_unittest.cc

Issue 10834266: Fold Pipeline initialization failure tests added in r150636 into PipelineTeardownTest. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/pipeline_unittest.cc
diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc
index bb6ba61895727bb8e9ee5c69cb99de6b5ed52b08..b126add875c5975e9d34a41a5480740f46b79712 100644
--- a/media/base/pipeline_unittest.cc
+++ b/media/base/pipeline_unittest.cc
@@ -878,114 +878,6 @@ 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(RunPipelineStatusCBWithStatus(expected_status));
- EXPECT_CALL(*mocks_->demuxer(), Stop(_))
- .WillOnce(RunClosure());
- InitializePipeline(expected_status);
-}
-
-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(RunPipelineStatusCBWithStatus(expected_status));
-
- EXPECT_CALL(*mocks_->demuxer(), Stop(_))
- .WillOnce(RunClosure());
-
- InitializePipeline(expected_status);
- 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(RunPipelineStatusCBWithStatus(expected_status));
-
- EXPECT_CALL(*mocks_->demuxer(), Stop(_))
- .WillOnce(RunClosure());
- EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
- .WillOnce(RunClosure());
-
- InitializePipeline(expected_status);
- 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(RunPipelineStatusCBWithStatus(expected_status));
-
- EXPECT_CALL(*mocks_->demuxer(), Stop(_))
- .WillOnce(RunClosure());
- EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
- .WillOnce(RunClosure());
-
- InitializePipeline(expected_status);
- 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(RunPipelineStatusCBWithStatus(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_TRUE(pipeline_->HasAudio());
- EXPECT_TRUE(pipeline_->HasVideo());
-}
-
class FlexibleCallbackRunner : public base::DelegateSimpleThread::Delegate {
public:
FlexibleCallbackRunner(base::TimeDelta delay, PipelineStatus status,
@@ -1042,6 +934,11 @@ TEST(PipelineStatusNotificationTest, DelayedCallback) {
class PipelineTeardownTest : public PipelineTest {
public:
enum TeardownState {
+ kInitDemuxer,
+ kInitAudioDecoder,
+ kInitAudioRenderer,
+ kInitVideoDecoder,
+ kInitVideoRenderer,
kPausing,
kFlushing,
kSeeking,
@@ -1055,25 +952,27 @@ class PipelineTeardownTest : public PipelineTest {
kError,
};
- PipelineTeardownTest() {
- CreateAudioStream();
- MockDemuxerStreamVector streams;
- streams.push_back(audio_stream());
-
- InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000));
- InitializeAudioDecoder(audio_stream());
- InitializeAudioRenderer();
- InitializePipeline(PIPELINE_OK);
- }
+ PipelineTeardownTest() {}
+ virtual ~PipelineTeardownTest() {}
void RunTest(TeardownState state, StopOrError stop_or_error) {
- InSequence s;
switch (state) {
+ case kInitDemuxer:
+ case kInitAudioDecoder:
+ case kInitAudioRenderer:
+ case kInitVideoDecoder:
+ case kInitVideoRenderer:
+ ExpectInitializeTeardown(state, stop_or_error);
+ break;
+
case kPausing:
case kFlushing:
case kSeeking:
case kPrerolling:
- case kStarting:
+ case kStarting: {
+ DoInitialize();
+
+ InSequence s;
acolwell GONE FROM CHROMIUM 2012/08/10 17:13:08 Why did this need to move to here ane below?
scherkus (not reviewing) 2012/08/10 17:35:55 DoInitialize() / ExpectInitializeTeardown() aren't
if (stop_or_error == kStop) {
ExpectSeekStop(state);
} else {
@@ -1081,8 +980,12 @@ class PipelineTeardownTest : public PipelineTest {
}
DoSeek();
break;
+ }
+
+ case kPlaying: {
+ DoInitialize();
- case kPlaying:
+ InSequence s;
if (stop_or_error == kStop) {
ExpectStop();
DoStop();
@@ -1091,13 +994,158 @@ class PipelineTeardownTest : public PipelineTest {
DoPlaybackError();
}
break;
+ }
}
}
private:
+ void DoInitialize() {
+ CreateAudioStream();
+ MockDemuxerStreamVector streams;
+ streams.push_back(audio_stream());
+
+ InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000));
+ InitializeAudioDecoder(audio_stream());
+ InitializeAudioRenderer();
+ InitializePipeline(PIPELINE_OK);
+ }
+
// TODO(scherkus): We do radically different things whether teardown is
// invoked via stop vs error. The teardown path should be the same,
// see http://crbug.com/110228
+ void ExpectInitializeTeardown(TeardownState state,
+ StopOrError stop_or_error) {
+ PipelineStatus expected_status =
+ SetInitializeExpectations(state, stop_or_error);
+
+ EXPECT_CALL(callbacks_, OnStart(expected_status));
+ pipeline_->Start(
+ mocks_->Create().Pass(),
+ base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
+ base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
+ base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)));
+ message_loop_.RunAllPending();
+ }
+
+ PipelineStatus SetInitializeExpectations(TeardownState state,
+ StopOrError stop_or_error) {
+ PipelineStatus status = PIPELINE_OK;
+ base::Closure stop_cb = base::Bind(
+ &CallbackHelper::OnStop, base::Unretained(&callbacks_));
+
+ if (state == kInitDemuxer) {
+ if (stop_or_error == kStop) {
+ EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
+ .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB()));
+ EXPECT_CALL(callbacks_, OnStop());
+ } else {
+ status = DEMUXER_ERROR_COULD_NOT_OPEN;
+ EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
+ .WillOnce(RunPipelineStatusCBWithStatus(status));
+ }
+
+ EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure());
+ return status;
+ }
+
+ CreateAudioStream();
+ CreateVideoStream();
+ MockDemuxerStreamVector streams;
+ streams.push_back(audio_stream());
+ streams.push_back(video_stream());
+ InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000));
+
+ if (state == kInitAudioDecoder) {
+ if (stop_or_error == kStop) {
+ EXPECT_CALL(*mocks_->audio_decoder(), Initialize(_, _, _))
+ .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB()));
+ EXPECT_CALL(callbacks_, OnStop());
+ } else {
+ status = PIPELINE_ERROR_DECODE;
+ EXPECT_CALL(*mocks_->audio_decoder(), Initialize(_, _, _))
+ .WillOnce(RunPipelineStatusCBWithStatus(status));
+ }
+
+ EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure());
+ return status;
+ }
+
+ EXPECT_CALL(*mocks_->audio_decoder(), Initialize(_, _, _))
+ .WillOnce(RunPipelineStatusCB());
+
+ if (state == kInitAudioRenderer) {
+ if (stop_or_error == kStop) {
+ EXPECT_CALL(*mocks_->audio_renderer(), Initialize(_, _, _, _, _, _, _))
+ .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB()));
+ EXPECT_CALL(callbacks_, OnStop());
+ } else {
+ status = PIPELINE_ERROR_INITIALIZATION_FAILED;
+ EXPECT_CALL(*mocks_->audio_renderer(), Initialize(_, _, _, _, _, _, _))
+ .WillOnce(RunPipelineStatusCBWithStatus(status));
+ }
+
+ EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure());
+ EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure());
+ return status;
+ }
+
+ EXPECT_CALL(*mocks_->audio_renderer(), Initialize(_, _, _, _, _, _, _))
+ .WillOnce(RunPipelineStatusCB());
+
+ if (state == kInitVideoDecoder) {
+ if (stop_or_error == kStop) {
+ EXPECT_CALL(*mocks_->video_decoder(), Initialize(_, _, _))
+ .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB()));
+ EXPECT_CALL(callbacks_, OnStop());
+ } else {
+ status = PIPELINE_ERROR_DECODE;
+ EXPECT_CALL(*mocks_->video_decoder(), Initialize(_, _, _))
+ .WillOnce(RunPipelineStatusCBWithStatus(status));
+ }
+
+ EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure());
+ EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure());
+ return status;
+ }
+
+ EXPECT_CALL(*mocks_->video_decoder(), Initialize(_, _, _))
+ .WillOnce(RunPipelineStatusCB());
+
+ if (state == kInitVideoRenderer) {
acolwell GONE FROM CHROMIUM 2012/08/10 17:13:08 nit: remove if and DCHECK_EQ(state, kInitVideoRend
scherkus (not reviewing) 2012/08/10 17:35:55 True! My initial plan for this function was to use
+ if (stop_or_error == kStop) {
+ EXPECT_CALL(*mocks_->video_renderer(),
+ Initialize(_, _, _, _, _, _, _, _, _))
+ .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB()));
+ EXPECT_CALL(callbacks_, OnStop());
+ } else {
+ status = PIPELINE_ERROR_INITIALIZATION_FAILED;
+ EXPECT_CALL(*mocks_->video_renderer(),
+ Initialize(_, _, _, _, _, _, _, _, _))
+ .WillOnce(RunPipelineStatusCBWithStatus(status));
+ }
+
+ EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure());
+ EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure());
+ EXPECT_CALL(*mocks_->video_renderer(), Stop(_)).WillOnce(RunClosure());
+ return status;
+ }
+
+ EXPECT_CALL(*mocks_->video_renderer(),
+ Initialize(_, _, _, _, _, _, _, _, _))
+ .WillOnce(RunPipelineStatusCB());
+
+ // If we get here it's a successful initialization.
+ EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
+ EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f));
+ EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f));
+ EXPECT_CALL(*mocks_->audio_renderer(), Preroll(base::TimeDelta(), _))
+ .WillOnce(RunPipelineStatusCB());
+ EXPECT_CALL(*mocks_->audio_renderer(), Play(_))
+ .WillOnce(RunClosure());
+
+ return status;
+ }
+
void ExpectSeekStop(TeardownState state) {
base::Closure stop_cb = base::Bind(
&CallbackHelper::OnStop, base::Unretained(&callbacks_));
@@ -1244,6 +1292,11 @@ class PipelineTeardownTest : public PipelineTest {
RunTest(k##state, k##stop_or_error); \
}
+INSTANTIATE_TEARDOWN_TEST(Stop, InitDemuxer);
+INSTANTIATE_TEARDOWN_TEST(Stop, InitAudioDecoder);
+INSTANTIATE_TEARDOWN_TEST(Stop, InitAudioRenderer);
+INSTANTIATE_TEARDOWN_TEST(Stop, InitVideoDecoder);
+INSTANTIATE_TEARDOWN_TEST(Stop, InitVideoRenderer);
INSTANTIATE_TEARDOWN_TEST(Stop, Pausing);
INSTANTIATE_TEARDOWN_TEST(Stop, Flushing);
INSTANTIATE_TEARDOWN_TEST(Stop, Seeking);
@@ -1251,6 +1304,11 @@ INSTANTIATE_TEARDOWN_TEST(Stop, Prerolling);
INSTANTIATE_TEARDOWN_TEST(Stop, Starting);
INSTANTIATE_TEARDOWN_TEST(Stop, Playing);
+INSTANTIATE_TEARDOWN_TEST(Error, InitDemuxer);
+INSTANTIATE_TEARDOWN_TEST(Error, InitAudioDecoder);
+INSTANTIATE_TEARDOWN_TEST(Error, InitAudioRenderer);
+INSTANTIATE_TEARDOWN_TEST(Error, InitVideoDecoder);
+INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer);
INSTANTIATE_TEARDOWN_TEST(Error, Pausing);
INSTANTIATE_TEARDOWN_TEST(Error, Flushing);
INSTANTIATE_TEARDOWN_TEST(Error, Seeking);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698