| Index: media/base/pipeline_unittest.cc
|
| diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc
|
| index 1d839963e97ae92180adfd54d9c725048075d6f2..14d39d9f9e9f5028fc9f5ca45c46336825fdf7a5 100644
|
| --- a/media/base/pipeline_unittest.cc
|
| +++ b/media/base/pipeline_unittest.cc
|
| @@ -55,11 +55,6 @@ class CallbackHelper {
|
| DISALLOW_COPY_AND_ASSIGN(CallbackHelper);
|
| };
|
|
|
| -// Run |cb| w/ OK status.
|
| -static void RunPipelineStatusOKCB(const PipelineStatusCB& cb) {
|
| - cb.Run(PIPELINE_OK);
|
| -}
|
| -
|
| // TODO(scherkus): even though some filters are initialized on separate
|
| // threads these test aren't flaky... why? It's because filters' Initialize()
|
| // is executed on |message_loop_| and the mock filters instantly call
|
| @@ -93,6 +88,7 @@ class PipelineTest : public ::testing::Test {
|
| base::Unretained(&callbacks_)));
|
| message_loop_.RunAllPending();
|
|
|
| + pipeline_ = NULL;
|
| mocks_.reset();
|
| }
|
|
|
| @@ -101,12 +97,13 @@ class PipelineTest : public ::testing::Test {
|
| typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector;
|
| void InitializeDemuxer(MockDemuxerStreamVector* streams,
|
| const base::TimeDelta& duration) {
|
| + EXPECT_CALL(*mocks_->demuxer(), Initialize(_))
|
| + .WillOnce(Invoke(&RunPipelineStatusCB));
|
| mocks_->demuxer()->SetTotalAndBufferedBytesAndDuration(
|
| kTotalBytes, kBufferedBytes, duration);
|
| EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
|
| - EXPECT_CALL(*mocks_->demuxer(), SetPreload(AUTO));
|
| EXPECT_CALL(*mocks_->demuxer(), Seek(mocks_->demuxer()->GetStartTime(), _))
|
| - .WillOnce(Invoke(&RunPipelineStatusCB));
|
| + .WillOnce(Invoke(&RunPipelineStatusCB2));
|
| EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| .WillOnce(Invoke(&RunStopFilterCallback));
|
|
|
| @@ -130,7 +127,7 @@ class PipelineTest : public ::testing::Test {
|
| void InitializeVideoDecoder(MockDemuxerStream* stream) {
|
| EXPECT_CALL(*mocks_->video_decoder(),
|
| Initialize(stream, _, _))
|
| - .WillOnce(WithArg<1>(Invoke(&RunPipelineStatusOKCB)));
|
| + .WillOnce(Invoke(&RunPipelineStatusCB3));
|
| }
|
|
|
| // Sets up expectations to allow the audio decoder to initialize.
|
| @@ -147,7 +144,7 @@ class PipelineTest : public ::testing::Test {
|
| EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f));
|
| EXPECT_CALL(*mocks_->video_renderer(),
|
| Seek(mocks_->demuxer()->GetStartTime(), _))
|
| - .WillOnce(Invoke(&RunPipelineStatusCB));
|
| + .WillOnce(Invoke(&RunPipelineStatusCB2));
|
| EXPECT_CALL(*mocks_->video_renderer(), Stop(_))
|
| .WillOnce(Invoke(&RunStopFilterCallback));
|
| }
|
| @@ -167,35 +164,22 @@ class PipelineTest : public ::testing::Test {
|
| EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f));
|
| EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f));
|
| EXPECT_CALL(*mocks_->audio_renderer(), Seek(base::TimeDelta(), _))
|
| - .WillOnce(Invoke(&RunPipelineStatusCB));
|
| + .WillOnce(Invoke(&RunPipelineStatusCB2));
|
| EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
|
| .WillOnce(Invoke(&RunStopFilterCallback));
|
| }
|
|
|
| // Sets up expectations on the callback and initializes the pipeline. Called
|
| // after tests have set expectations any filters they wish to use.
|
| - void InitializePipeline() {
|
| - InitializePipeline(PIPELINE_OK);
|
| - }
|
| - // Most tests can expect the |filter_collection|'s |build_status| to get
|
| - // reflected in |Start()|'s argument.
|
| void InitializePipeline(PipelineStatus start_status) {
|
| - InitializePipeline(start_status, start_status);
|
| - }
|
| - // But some tests require different statuses in build & Start.
|
| - void InitializePipeline(PipelineStatus build_status,
|
| - PipelineStatus start_status) {
|
| - // Expect an initialization callback.
|
| EXPECT_CALL(callbacks_, OnStart(start_status));
|
|
|
| pipeline_->Start(
|
| - mocks_->filter_collection(true, true, true, build_status).Pass(),
|
| - "",
|
| + mocks_->Create().Pass(),
|
| base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
|
| base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
|
| NetworkEventCB(),
|
| base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)));
|
| -
|
| message_loop_.RunAllPending();
|
| }
|
|
|
| @@ -218,16 +202,16 @@ class PipelineTest : public ::testing::Test {
|
| void ExpectSeek(const base::TimeDelta& seek_time) {
|
| // Every filter should receive a call to Seek().
|
| EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _))
|
| - .WillOnce(Invoke(&RunPipelineStatusCB));
|
| + .WillOnce(Invoke(&RunPipelineStatusCB2));
|
|
|
| if (audio_stream_) {
|
| EXPECT_CALL(*mocks_->audio_renderer(), Seek(seek_time, _))
|
| - .WillOnce(Invoke(&RunPipelineStatusCB));
|
| + .WillOnce(Invoke(&RunPipelineStatusCB2));
|
| }
|
|
|
| if (video_stream_) {
|
| EXPECT_CALL(*mocks_->video_renderer(), Seek(seek_time, _))
|
| - .WillOnce(Invoke(&RunPipelineStatusCB));
|
| + .WillOnce(Invoke(&RunPipelineStatusCB2));
|
| }
|
|
|
| // We expect a successful seek callback.
|
| @@ -296,12 +280,16 @@ TEST_F(PipelineTest, NotStarted) {
|
| }
|
|
|
| TEST_F(PipelineTest, NeverInitializes) {
|
| + // Don't execute the callback passed into Initialize().
|
| + EXPECT_CALL(*mocks_->demuxer(), Initialize(_));
|
| + EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| + .WillOnce(Invoke(&RunStopFilterCallback));
|
| +
|
| // This test hangs during initialization by never calling
|
| // InitializationComplete(). StrictMock<> will ensure that the callback is
|
| // never executed.
|
| pipeline_->Start(
|
| - mocks_->filter_collection(false, false, true, PIPELINE_OK).Pass(),
|
| - "",
|
| + mocks_->Create().Pass(),
|
| base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
|
| base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
|
| NetworkEventCB(),
|
| @@ -318,37 +306,39 @@ TEST_F(PipelineTest, NeverInitializes) {
|
| }
|
|
|
| TEST_F(PipelineTest, RequiredFilterMissing) {
|
| - // Sets up expectations on the callback and initializes the pipeline. Called
|
| - // after tests have set expectations any filters they wish to use.
|
| - // Expect an initialization callback.
|
| - EXPECT_CALL(callbacks_, OnStart(PIPELINE_ERROR_REQUIRED_FILTER_MISSING));
|
| -
|
| // Create a filter collection with missing filter.
|
| - scoped_ptr<FilterCollection> collection(mocks_->filter_collection(
|
| - false, true, true, PIPELINE_ERROR_REQUIRED_FILTER_MISSING));
|
| + scoped_ptr<FilterCollection> collection(mocks_->Create());
|
| + collection->SetDemuxer(NULL);
|
| +
|
| + EXPECT_CALL(callbacks_, OnStart(PIPELINE_ERROR_REQUIRED_FILTER_MISSING));
|
| pipeline_->Start(
|
| - collection.Pass(),
|
| - "",
|
| - base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
|
| - base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
|
| - NetworkEventCB(),
|
| - base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)));
|
| + collection.Pass(),
|
| + base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
|
| + base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
|
| + NetworkEventCB(),
|
| + base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)));
|
| message_loop_.RunAllPending();
|
| -
|
| EXPECT_FALSE(pipeline_->IsInitialized());
|
| }
|
|
|
| TEST_F(PipelineTest, URLNotFound) {
|
| + EXPECT_CALL(*mocks_->demuxer(), Initialize(_))
|
| + .WillOnce(RunPipelineStatusCBWithError(
|
| + PIPELINE_ERROR_URL_NOT_FOUND));
|
| + EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| + .WillOnce(Invoke(&RunStopFilterCallback));
|
| +
|
| InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND);
|
| EXPECT_FALSE(pipeline_->IsInitialized());
|
| }
|
|
|
| TEST_F(PipelineTest, NoStreams) {
|
| - // Manually set these expectations because SetPlaybackRate() is not called if
|
| - // we cannot fully initialize the pipeline.
|
| + EXPECT_CALL(*mocks_->demuxer(), Initialize(_))
|
| + .WillOnce(Invoke(&RunPipelineStatusCB));
|
| EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| .WillOnce(Invoke(&RunStopFilterCallback));
|
| - InitializePipeline(PIPELINE_OK, PIPELINE_ERROR_COULD_NOT_RENDER);
|
| +
|
| + InitializePipeline(PIPELINE_ERROR_COULD_NOT_RENDER);
|
| EXPECT_FALSE(pipeline_->IsInitialized());
|
| }
|
|
|
| @@ -749,7 +739,6 @@ static void TestNoCallsAfterError(
|
| // Make calls on pipeline after error has occurred.
|
| pipeline->SetPlaybackRate(0.5f);
|
| pipeline->SetVolume(0.5f);
|
| - pipeline->SetPreload(AUTO);
|
|
|
| // No additional tasks should be queued as a result of these calls.
|
| message_loop->AssertIdle();
|
|
|