Chromium Code Reviews| Index: media/base/pipeline_unittest.cc |
| diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc |
| index c064df4c3c130635380f33bd05fccbfa86ef25e0..772a5c5f58c4cdd49d6b2290057ffc65dbfe8b59 100644 |
| --- a/media/base/pipeline_unittest.cc |
| +++ b/media/base/pipeline_unittest.cc |
| @@ -5,6 +5,7 @@ |
| #include <vector> |
| #include "base/bind.h" |
| +#include "base/command_line.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/stl_util.h" |
| #include "base/test/simple_test_tick_clock.h" |
| @@ -13,6 +14,7 @@ |
| #include "media/base/fake_text_track_stream.h" |
| #include "media/base/gmock_callback_support.h" |
| #include "media/base/media_log.h" |
| +#include "media/base/media_switches.h" |
| #include "media/base/mock_filters.h" |
| #include "media/base/pipeline.h" |
| #include "media/base/test_helpers.h" |
| @@ -86,21 +88,9 @@ class PipelineTest : public ::testing::Test { |
| PipelineTest() |
| : pipeline_(new Pipeline(message_loop_.message_loop_proxy(), |
| new MediaLog())), |
| - filter_collection_(new FilterCollection()), |
| - demuxer_(new StrictMock<MockDemuxer>()) { |
| - filter_collection_->SetDemuxer(demuxer_.get()); |
| - |
| - renderer_ = new StrictMock<MockRenderer>(); |
| - scoped_ptr<Renderer> renderer(renderer_); |
| - filter_collection_->SetRenderer(renderer.Pass()); |
| - |
| - text_renderer_ = new TextRenderer( |
| - message_loop_.message_loop_proxy(), |
| - base::Bind(&PipelineTest::OnAddTextTrack, |
| - base::Unretained(this))); |
| - scoped_ptr<TextRenderer> text_renderer(text_renderer_); |
| - filter_collection_->SetTextRenderer(text_renderer.Pass()); |
| - |
| + demuxer_(new StrictMock<MockDemuxer>()), |
| + scoped_renderer_(new StrictMock<MockRenderer>()), |
| + renderer_(scoped_renderer_.get()) { |
| // SetDemuxerExpectations() adds overriding expectations for expected |
| // non-NULL streams. |
| DemuxerStream* null_pointer = NULL; |
| @@ -137,6 +127,12 @@ class PipelineTest : public ::testing::Test { |
| message_loop_.RunUntilIdle(); |
| } |
| + // Test implementation. |
| + virtual void SetUp() OVERRIDE { |
| + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
|
scherkus (not reviewing)
2014/08/28 18:48:22
IIRC this executes once per test
typically we've
xhwang
2014/08/28 19:52:05
Done.
But I actually searched run_all_unittests.c
scherkus (not reviewing)
2014/08/28 19:57:18
That's because we've launched features / enabled t
|
| + command_line->AppendSwitch(switches::kEnableInbandTextTracks); |
| + } |
| + |
| void OnDemuxerError() { |
| // Cast because OnDemuxerError is private in Pipeline. |
| static_cast<DemuxerHost*>(pipeline_.get()) |
| @@ -191,9 +187,24 @@ class PipelineTest : public ::testing::Test { |
| message_loop_.RunUntilIdle(); |
| } |
| + void StartPipeline() { |
| + pipeline_->Start( |
| + demuxer_.get(), |
| + scoped_renderer_.PassAs<Renderer>(), |
| + base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| + base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| + base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| + base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), |
| + base::Bind(&CallbackHelper::OnBufferingStateChange, |
| + base::Unretained(&callbacks_)), |
| + base::Bind(&CallbackHelper::OnDurationChange, |
| + base::Unretained(&callbacks_)), |
| + base::Bind(&PipelineTest::OnAddTextTrack, base::Unretained(this))); |
| + } |
| + |
| // Sets up expectations on the callback and initializes the pipeline. Called |
| // after tests have set expectations any filters they wish to use. |
| - void StartPipeline(PipelineStatus start_status) { |
| + void StartPipelineAndExpect(PipelineStatus start_status) { |
| EXPECT_CALL(callbacks_, OnStart(start_status)); |
| if (start_status == PIPELINE_OK) { |
| @@ -206,16 +217,7 @@ class PipelineTest : public ::testing::Test { |
| EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); |
| } |
| - pipeline_->Start( |
| - filter_collection_.Pass(), |
| - base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnBufferingStateChange, |
| - base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnDurationChange, |
| - base::Unretained(&callbacks_))); |
| + StartPipeline(); |
| message_loop_.RunUntilIdle(); |
| } |
| @@ -307,8 +309,8 @@ class PipelineTest : public ::testing::Test { |
| base::MessageLoop message_loop_; |
| scoped_ptr<Pipeline> pipeline_; |
| - scoped_ptr<FilterCollection> filter_collection_; |
| scoped_ptr<StrictMock<MockDemuxer> > demuxer_; |
| + scoped_ptr<StrictMock<MockRenderer> > scoped_renderer_; |
| StrictMock<MockRenderer>* renderer_; |
| StrictMock<CallbackHelper> text_renderer_callbacks_; |
| TextRenderer* text_renderer_; |
| @@ -357,16 +359,7 @@ TEST_F(PipelineTest, NeverInitializes) { |
| // This test hangs during initialization by never calling |
| // InitializationComplete(). StrictMock<> will ensure that the callback is |
| // never executed. |
| - pipeline_->Start( |
| - filter_collection_.Pass(), |
| - base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnBufferingStateChange, |
| - base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnDurationChange, |
| - base::Unretained(&callbacks_))); |
| + StartPipeline(); |
| message_loop_.RunUntilIdle(); |
| // Because our callback will get executed when the test tears down, we'll |
| @@ -390,17 +383,7 @@ TEST_F(PipelineTest, StartThenStopImmediately) { |
| .WillOnce(RunClosure<0>()); |
| EXPECT_CALL(callbacks_, OnStart(_)); |
| - |
| - pipeline_->Start( |
| - filter_collection_.Pass(), |
| - base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnBufferingStateChange, |
| - base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnDurationChange, |
| - base::Unretained(&callbacks_))); |
| + StartPipeline(); |
| // Expect a stop callback if we were started. |
| ExpectPipelineStopAndDestroyPipeline(); |
| @@ -417,7 +400,7 @@ TEST_F(PipelineTest, DemuxerErrorDuringStop) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| EXPECT_CALL(*demuxer_, Stop(_)) |
| .WillOnce(DoAll(InvokeWithoutArgs(this, &PipelineTest::OnDemuxerError), |
| @@ -435,7 +418,7 @@ TEST_F(PipelineTest, URLNotFound) { |
| EXPECT_CALL(*demuxer_, Stop(_)) |
| .WillOnce(RunClosure<0>()); |
| - StartPipeline(PIPELINE_ERROR_URL_NOT_FOUND); |
| + StartPipelineAndExpect(PIPELINE_ERROR_URL_NOT_FOUND); |
| } |
| TEST_F(PipelineTest, NoStreams) { |
| @@ -444,7 +427,7 @@ TEST_F(PipelineTest, NoStreams) { |
| EXPECT_CALL(*demuxer_, Stop(_)) |
| .WillOnce(RunClosure<0>()); |
| - StartPipeline(PIPELINE_ERROR_COULD_NOT_RENDER); |
| + StartPipelineAndExpect(PIPELINE_ERROR_COULD_NOT_RENDER); |
| } |
| TEST_F(PipelineTest, AudioStream) { |
| @@ -455,7 +438,7 @@ TEST_F(PipelineTest, AudioStream) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| EXPECT_TRUE(metadata_.has_audio); |
| EXPECT_FALSE(metadata_.has_video); |
| } |
| @@ -468,7 +451,7 @@ TEST_F(PipelineTest, VideoStream) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| EXPECT_FALSE(metadata_.has_audio); |
| EXPECT_TRUE(metadata_.has_video); |
| } |
| @@ -483,7 +466,7 @@ TEST_F(PipelineTest, AudioVideoStream) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| EXPECT_TRUE(metadata_.has_audio); |
| EXPECT_TRUE(metadata_.has_video); |
| } |
| @@ -497,7 +480,7 @@ TEST_F(PipelineTest, VideoTextStream) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| EXPECT_FALSE(metadata_.has_audio); |
| EXPECT_TRUE(metadata_.has_video); |
| @@ -515,7 +498,7 @@ TEST_F(PipelineTest, VideoAudioTextStream) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| EXPECT_TRUE(metadata_.has_audio); |
| EXPECT_TRUE(metadata_.has_video); |
| @@ -534,7 +517,7 @@ TEST_F(PipelineTest, Seek) { |
| SetRendererExpectations(); |
| // Initialize then seek! |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| // Every filter should receive a call to Seek(). |
| base::TimeDelta expected = base::TimeDelta::FromSeconds(2000); |
| @@ -551,7 +534,7 @@ TEST_F(PipelineTest, SeekAfterError) { |
| SetRendererExpectations(); |
| // Initialize then seek! |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| EXPECT_CALL(*demuxer_, Stop(_)) |
| .WillOnce(RunClosure<0>()); |
| @@ -580,7 +563,7 @@ TEST_F(PipelineTest, SetVolume) { |
| EXPECT_CALL(*renderer_, SetVolume(expected)); |
| // Initialize then set volume! |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| pipeline_->SetVolume(expected); |
| } |
| @@ -593,7 +576,7 @@ TEST_F(PipelineTest, Properties) { |
| SetDemuxerExpectations(&streams, kDuration); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| EXPECT_EQ(kDuration.ToInternalValue(), |
| pipeline_->GetMediaDuration().ToInternalValue()); |
| EXPECT_FALSE(pipeline_->DidLoadingProgress()); |
| @@ -608,7 +591,7 @@ TEST_F(PipelineTest, GetBufferedTimeRanges) { |
| SetDemuxerExpectations(&streams, kDuration); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| EXPECT_EQ(0u, pipeline_->GetBufferedTimeRanges().size()); |
| @@ -637,7 +620,7 @@ TEST_F(PipelineTest, EndedCallback) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| AddTextStream(); |
| @@ -657,7 +640,7 @@ TEST_F(PipelineTest, ErrorDuringSeek) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| float playback_rate = 1.0f; |
| EXPECT_CALL(*renderer_, SetPlaybackRate(playback_rate)); |
| @@ -709,7 +692,7 @@ TEST_F(PipelineTest, NoMessageDuringTearDownFromError) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| // Trigger additional requests on the pipeline during tear down from error. |
| base::Callback<void(PipelineStatus)> cb = base::Bind( |
| @@ -743,7 +726,7 @@ TEST_F(PipelineTest, DestroyAfterStop) { |
| streams.push_back(audio_stream()); |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| ExpectDemuxerStop(); |
| @@ -762,7 +745,7 @@ TEST_F(PipelineTest, Underflow) { |
| SetDemuxerExpectations(&streams); |
| SetRendererExpectations(); |
| - StartPipeline(PIPELINE_OK); |
| + StartPipelineAndExpect(PIPELINE_OK); |
| // Simulate underflow. |
| EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)); |
| @@ -822,16 +805,7 @@ class PipelineTeardownTest : public PipelineTest { |
| SetInitializeExpectations(state, stop_or_error); |
| EXPECT_CALL(callbacks_, OnStart(expected_status)); |
| - pipeline_->Start( |
| - filter_collection_.Pass(), |
| - base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnBufferingStateChange, |
| - base::Unretained(&callbacks_)), |
| - base::Bind(&CallbackHelper::OnDurationChange, |
| - base::Unretained(&callbacks_))); |
| + StartPipeline(); |
| message_loop_.RunUntilIdle(); |
| } |