| Index: media/base/pipeline_unittest.cc
|
| diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc
|
| index 14d39d9f9e9f5028fc9f5ca45c46336825fdf7a5..5827ff66ed58c6ee201ab2b0c69880541a3948da 100644
|
| --- a/media/base/pipeline_unittest.cc
|
| +++ b/media/base/pipeline_unittest.cc
|
| @@ -20,9 +20,9 @@
|
|
|
| using ::testing::_;
|
| using ::testing::DeleteArg;
|
| +using ::testing::DoAll;
|
| using ::testing::InSequence;
|
| using ::testing::Invoke;
|
| -using ::testing::InvokeArgument;
|
| using ::testing::Mock;
|
| using ::testing::NotNull;
|
| using ::testing::Return;
|
| @@ -32,11 +32,22 @@ using ::testing::WithArg;
|
|
|
| namespace media {
|
|
|
| -// Total bytes of the data source.
|
| +// Demuxer properties.
|
| static const int kTotalBytes = 1024;
|
| -
|
| -// Buffered bytes of the data source.
|
| static const int kBufferedBytes = 1024;
|
| +static const int kBitrate = 1234;
|
| +static const bool kLocalSource = false;
|
| +static const bool kSeekable = true;
|
| +
|
| +ACTION_P(InitializeDemuxerWithError, error) {
|
| + arg1.Run(error);
|
| +}
|
| +
|
| +ACTION_P(SetDemuxerProperties, duration) {
|
| + arg0->SetTotalBytes(kTotalBytes);
|
| + arg0->SetBufferedBytes(kBufferedBytes);
|
| + arg0->SetDuration(duration);
|
| +}
|
|
|
| // Used for setting expectations on pipeline callbacks. Using a StrictMock
|
| // also lets us test for missing callbacks.
|
| @@ -67,7 +78,7 @@ class PipelineTest : public ::testing::Test {
|
| : pipeline_(new Pipeline(&message_loop_, new MediaLog())) {
|
| mocks_.reset(new MockFilterCollection());
|
|
|
| - // InitializeDemuxer adds overriding expectations for expected non-NULL
|
| + // InitializeDemuxer() adds overriding expectations for expected non-NULL
|
| // streams.
|
| DemuxerStream* null_pointer = NULL;
|
| EXPECT_CALL(*mocks_->demuxer(), GetStream(_))
|
| @@ -97,16 +108,23 @@ 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(), Initialize(_, _))
|
| + .WillOnce(DoAll(SetDemuxerProperties(duration),
|
| + Invoke(&RunPipelineStatusCB2)));
|
| EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
|
| EXPECT_CALL(*mocks_->demuxer(), Seek(mocks_->demuxer()->GetStartTime(), _))
|
| .WillOnce(Invoke(&RunPipelineStatusCB2));
|
| EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| .WillOnce(Invoke(&RunStopFilterCallback));
|
|
|
| + // Demuxer properties.
|
| + EXPECT_CALL(*mocks_->demuxer(), GetBitrate())
|
| + .WillRepeatedly(Return(kBitrate));
|
| + EXPECT_CALL(*mocks_->demuxer(), IsLocalSource())
|
| + .WillRepeatedly(Return(kLocalSource));
|
| + EXPECT_CALL(*mocks_->demuxer(), IsSeekable())
|
| + .WillRepeatedly(Return(kSeekable));
|
| +
|
| // Configure the demuxer to return the streams.
|
| for (size_t i = 0; i < streams->size(); ++i) {
|
| scoped_refptr<DemuxerStream> stream((*streams)[i]);
|
| @@ -115,6 +133,11 @@ class PipelineTest : public ::testing::Test {
|
| }
|
| }
|
|
|
| + void InitializeDemuxer(MockDemuxerStreamVector* streams) {
|
| + // Initialize with a default non-zero duration.
|
| + InitializeDemuxer(streams, base::TimeDelta::FromSeconds(10));
|
| + }
|
| +
|
| StrictMock<MockDemuxerStream>* CreateStream(DemuxerStream::Type type) {
|
| StrictMock<MockDemuxerStream>* stream =
|
| new StrictMock<MockDemuxerStream>();
|
| @@ -281,7 +304,7 @@ 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(), Initialize(_, _));
|
| EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| .WillOnce(Invoke(&RunStopFilterCallback));
|
|
|
| @@ -322,9 +345,8 @@ TEST_F(PipelineTest, RequiredFilterMissing) {
|
| }
|
|
|
| TEST_F(PipelineTest, URLNotFound) {
|
| - EXPECT_CALL(*mocks_->demuxer(), Initialize(_))
|
| - .WillOnce(RunPipelineStatusCBWithError(
|
| - PIPELINE_ERROR_URL_NOT_FOUND));
|
| + EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
|
| + .WillOnce(InitializeDemuxerWithError(PIPELINE_ERROR_URL_NOT_FOUND));
|
| EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| .WillOnce(Invoke(&RunStopFilterCallback));
|
|
|
| @@ -333,8 +355,8 @@ TEST_F(PipelineTest, URLNotFound) {
|
| }
|
|
|
| TEST_F(PipelineTest, NoStreams) {
|
| - EXPECT_CALL(*mocks_->demuxer(), Initialize(_))
|
| - .WillOnce(Invoke(&RunPipelineStatusCB));
|
| + EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
|
| + .WillOnce(Invoke(&RunPipelineStatusCB2));
|
| EXPECT_CALL(*mocks_->demuxer(), Stop(_))
|
| .WillOnce(Invoke(&RunStopFilterCallback));
|
|
|
| @@ -347,7 +369,7 @@ TEST_F(PipelineTest, AudioStream) {
|
| MockDemuxerStreamVector streams;
|
| streams.push_back(audio_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta());
|
| + InitializeDemuxer(&streams);
|
| InitializeAudioDecoder(audio_stream());
|
| InitializeAudioRenderer();
|
|
|
| @@ -362,7 +384,7 @@ TEST_F(PipelineTest, VideoStream) {
|
| MockDemuxerStreamVector streams;
|
| streams.push_back(video_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta());
|
| + InitializeDemuxer(&streams);
|
| InitializeVideoDecoder(video_stream());
|
| InitializeVideoRenderer();
|
|
|
| @@ -379,7 +401,7 @@ TEST_F(PipelineTest, AudioVideoStream) {
|
| streams.push_back(audio_stream());
|
| streams.push_back(video_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta());
|
| + InitializeDemuxer(&streams);
|
| InitializeAudioDecoder(audio_stream());
|
| InitializeAudioRenderer();
|
| InitializeVideoDecoder(video_stream());
|
| @@ -418,7 +440,7 @@ TEST_F(PipelineTest, SetVolume) {
|
| MockDemuxerStreamVector streams;
|
| streams.push_back(audio_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta());
|
| + InitializeDemuxer(&streams);
|
| InitializeAudioDecoder(audio_stream());
|
| InitializeAudioRenderer();
|
|
|
| @@ -522,7 +544,7 @@ TEST_F(PipelineTest, DisableAudioRenderer) {
|
| streams.push_back(audio_stream());
|
| streams.push_back(video_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta());
|
| + InitializeDemuxer(&streams);
|
| InitializeAudioDecoder(audio_stream());
|
| InitializeAudioRenderer();
|
| InitializeVideoDecoder(video_stream());
|
| @@ -559,7 +581,7 @@ TEST_F(PipelineTest, DisableAudioRendererDuringInit) {
|
| streams.push_back(audio_stream());
|
| streams.push_back(video_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta());
|
| + InitializeDemuxer(&streams);
|
| InitializeAudioDecoder(audio_stream());
|
| InitializeAudioRenderer(true);
|
| InitializeVideoDecoder(video_stream());
|
| @@ -592,7 +614,7 @@ TEST_F(PipelineTest, EndedCallback) {
|
| streams.push_back(audio_stream());
|
| streams.push_back(video_stream());
|
|
|
| - InitializeDemuxer(&streams, base::TimeDelta());
|
| + InitializeDemuxer(&streams);
|
| InitializeAudioDecoder(audio_stream());
|
| InitializeAudioRenderer();
|
| InitializeVideoDecoder(video_stream());
|
| @@ -814,6 +836,24 @@ TEST_F(PipelineTest, StartTimeIsNonZero) {
|
| EXPECT_EQ(kStartTime, pipeline_->GetCurrentTime());
|
| }
|
|
|
| +TEST_F(PipelineTest, DemuxerProperties) {
|
| + CreateAudioStream();
|
| + CreateVideoStream();
|
| + MockDemuxerStreamVector streams;
|
| + streams.push_back(audio_stream());
|
| + streams.push_back(video_stream());
|
| +
|
| + InitializeDemuxer(&streams);
|
| + InitializeAudioDecoder(audio_stream());
|
| + InitializeAudioRenderer();
|
| + InitializeVideoDecoder(video_stream());
|
| + InitializeVideoRenderer();
|
| + InitializePipeline(PIPELINE_OK);
|
| +
|
| + EXPECT_EQ(kLocalSource, pipeline_->IsLocalSource());
|
| + EXPECT_EQ(!kSeekable, pipeline_->IsStreaming());
|
| +}
|
| +
|
| class FlexibleCallbackRunner : public base::DelegateSimpleThread::Delegate {
|
| public:
|
| FlexibleCallbackRunner(base::TimeDelta delay, PipelineStatus status,
|
|
|