OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "base/test/simple_test_tick_clock.h" | 10 #include "base/test/simple_test_tick_clock.h" |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
173 | 173 |
174 void AddTextStream() { | 174 void AddTextStream() { |
175 EXPECT_CALL(*this, OnAddTextTrack(_,_)) | 175 EXPECT_CALL(*this, OnAddTextTrack(_,_)) |
176 .WillOnce(Invoke(this, &PipelineTest::DoOnAddTextTrack)); | 176 .WillOnce(Invoke(this, &PipelineTest::DoOnAddTextTrack)); |
177 static_cast<DemuxerHost*>(pipeline_.get())->AddTextStream(text_stream(), | 177 static_cast<DemuxerHost*>(pipeline_.get())->AddTextStream(text_stream(), |
178 TextTrackConfig(kTextSubtitles, "", "", "")); | 178 TextTrackConfig(kTextSubtitles, "", "", "")); |
179 message_loop_.RunUntilIdle(); | 179 message_loop_.RunUntilIdle(); |
180 } | 180 } |
181 | 181 |
182 void StartPipeline() { | 182 void StartPipeline() { |
183 EXPECT_CALL(*demuxer_, GetStartTime()).WillRepeatedly(Return(start_time_)); | |
scherkus (not reviewing)
2014/09/16 18:55:41
could we move these to Pipeline() along with the o
DaleCurtis
2014/09/16 20:03:03
Nice, I didn't know you could override like this.
| |
183 pipeline_->Start( | 184 pipeline_->Start( |
184 demuxer_.get(), | 185 demuxer_.get(), |
185 scoped_renderer_.PassAs<Renderer>(), | 186 scoped_renderer_.PassAs<Renderer>(), |
186 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), | 187 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
187 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), | 188 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
188 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), | 189 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
189 base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), | 190 base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), |
190 base::Bind(&CallbackHelper::OnBufferingStateChange, | 191 base::Bind(&CallbackHelper::OnBufferingStateChange, |
191 base::Unretained(&callbacks_)), | 192 base::Unretained(&callbacks_)), |
192 base::Bind(&CallbackHelper::OnDurationChange, | 193 base::Bind(&CallbackHelper::OnDurationChange, |
193 base::Unretained(&callbacks_)), | 194 base::Unretained(&callbacks_)), |
194 base::Bind(&PipelineTest::OnAddTextTrack, base::Unretained(this))); | 195 base::Bind(&PipelineTest::OnAddTextTrack, base::Unretained(this))); |
195 } | 196 } |
196 | 197 |
197 // Sets up expectations on the callback and initializes the pipeline. Called | 198 // Sets up expectations on the callback and initializes the pipeline. Called |
198 // after tests have set expectations any filters they wish to use. | 199 // after tests have set expectations any filters they wish to use. |
199 void StartPipelineAndExpect(PipelineStatus start_status) { | 200 void StartPipelineAndExpect(PipelineStatus start_status) { |
201 EXPECT_CALL(*demuxer_, GetStartTime()).WillRepeatedly(Return(start_time_)); | |
200 EXPECT_CALL(callbacks_, OnStart(start_status)); | 202 EXPECT_CALL(callbacks_, OnStart(start_status)); |
201 | 203 |
202 if (start_status == PIPELINE_OK) { | 204 if (start_status == PIPELINE_OK) { |
203 EXPECT_CALL(callbacks_, OnMetadata(_)).WillOnce(SaveArg<0>(&metadata_)); | 205 EXPECT_CALL(callbacks_, OnMetadata(_)).WillOnce(SaveArg<0>(&metadata_)); |
204 EXPECT_CALL(*renderer_, SetPlaybackRate(0.0f)); | 206 EXPECT_CALL(*renderer_, SetPlaybackRate(0.0f)); |
205 EXPECT_CALL(*renderer_, SetVolume(1.0f)); | 207 EXPECT_CALL(*renderer_, SetVolume(1.0f)); |
206 EXPECT_CALL(*renderer_, StartPlayingFrom(base::TimeDelta())) | 208 EXPECT_CALL(*renderer_, StartPlayingFrom(start_time_)) |
207 .WillOnce(SetBufferingState(&buffering_state_cb_, | 209 .WillOnce(SetBufferingState(&buffering_state_cb_, |
208 BUFFERING_HAVE_ENOUGH)); | 210 BUFFERING_HAVE_ENOUGH)); |
209 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); | 211 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); |
210 } | 212 } |
211 | 213 |
212 StartPipeline(); | 214 StartPipeline(); |
213 message_loop_.RunUntilIdle(); | 215 message_loop_.RunUntilIdle(); |
214 } | 216 } |
215 | 217 |
216 void CreateAudioStream() { | 218 void CreateAudioStream() { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
306 StrictMock<MockRenderer>* renderer_; | 308 StrictMock<MockRenderer>* renderer_; |
307 StrictMock<CallbackHelper> text_renderer_callbacks_; | 309 StrictMock<CallbackHelper> text_renderer_callbacks_; |
308 TextRenderer* text_renderer_; | 310 TextRenderer* text_renderer_; |
309 scoped_ptr<StrictMock<MockDemuxerStream> > audio_stream_; | 311 scoped_ptr<StrictMock<MockDemuxerStream> > audio_stream_; |
310 scoped_ptr<StrictMock<MockDemuxerStream> > video_stream_; | 312 scoped_ptr<StrictMock<MockDemuxerStream> > video_stream_; |
311 scoped_ptr<FakeTextTrackStream> text_stream_; | 313 scoped_ptr<FakeTextTrackStream> text_stream_; |
312 BufferingStateCB buffering_state_cb_; | 314 BufferingStateCB buffering_state_cb_; |
313 base::Closure ended_cb_; | 315 base::Closure ended_cb_; |
314 VideoDecoderConfig video_decoder_config_; | 316 VideoDecoderConfig video_decoder_config_; |
315 PipelineMetadata metadata_; | 317 PipelineMetadata metadata_; |
318 base::TimeDelta start_time_; | |
316 | 319 |
317 private: | 320 private: |
318 DISALLOW_COPY_AND_ASSIGN(PipelineTest); | 321 DISALLOW_COPY_AND_ASSIGN(PipelineTest); |
319 }; | 322 }; |
320 | 323 |
321 // Test that playback controls methods no-op when the pipeline hasn't been | 324 // Test that playback controls methods no-op when the pipeline hasn't been |
322 // started. | 325 // started. |
323 TEST_F(PipelineTest, NotStarted) { | 326 TEST_F(PipelineTest, NotStarted) { |
324 const base::TimeDelta kZero; | 327 const base::TimeDelta kZero; |
325 | 328 |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
735 // Simulate underflow. | 738 // Simulate underflow. |
736 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)); | 739 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)); |
737 buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING); | 740 buffering_state_cb_.Run(BUFFERING_HAVE_NOTHING); |
738 | 741 |
739 // Seek while underflowed. | 742 // Seek while underflowed. |
740 base::TimeDelta expected = base::TimeDelta::FromSeconds(5); | 743 base::TimeDelta expected = base::TimeDelta::FromSeconds(5); |
741 ExpectSeek(expected, true); | 744 ExpectSeek(expected, true); |
742 DoSeek(expected); | 745 DoSeek(expected); |
743 } | 746 } |
744 | 747 |
748 TEST_F(PipelineTest, PositiveStartTime) { | |
749 start_time_ = base::TimeDelta::FromSeconds(1); | |
750 CreateAudioStream(); | |
751 MockDemuxerStreamVector streams; | |
752 streams.push_back(audio_stream()); | |
753 SetDemuxerExpectations(&streams); | |
754 SetRendererExpectations(); | |
755 StartPipelineAndExpect(PIPELINE_OK); | |
756 ExpectDemuxerStop(); | |
757 ExpectPipelineStopAndDestroyPipeline(); | |
758 pipeline_->Stop( | |
759 base::Bind(&CallbackHelper::OnStop, base::Unretained(&callbacks_))); | |
760 message_loop_.RunUntilIdle(); | |
761 } | |
762 | |
745 class PipelineTeardownTest : public PipelineTest { | 763 class PipelineTeardownTest : public PipelineTest { |
746 public: | 764 public: |
747 enum TeardownState { | 765 enum TeardownState { |
748 kInitDemuxer, | 766 kInitDemuxer, |
749 kInitRenderer, | 767 kInitRenderer, |
750 kFlushing, | 768 kFlushing, |
751 kSeeking, | 769 kSeeking, |
752 kPlaying, | 770 kPlaying, |
753 }; | 771 }; |
754 | 772 |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
974 | 992 |
975 INSTANTIATE_TEARDOWN_TEST(Error, InitDemuxer); | 993 INSTANTIATE_TEARDOWN_TEST(Error, InitDemuxer); |
976 INSTANTIATE_TEARDOWN_TEST(Error, InitRenderer); | 994 INSTANTIATE_TEARDOWN_TEST(Error, InitRenderer); |
977 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); | 995 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); |
978 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); | 996 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); |
979 INSTANTIATE_TEARDOWN_TEST(Error, Playing); | 997 INSTANTIATE_TEARDOWN_TEST(Error, Playing); |
980 | 998 |
981 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); | 999 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); |
982 | 1000 |
983 } // namespace media | 1001 } // namespace media |
OLD | NEW |