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, |