| 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.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/threading/simple_thread.h" | 10 #include "base/threading/simple_thread.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 class CallbackHelper { | 71 class CallbackHelper { |
| 72 public: | 72 public: |
| 73 CallbackHelper() {} | 73 CallbackHelper() {} |
| 74 virtual ~CallbackHelper() {} | 74 virtual ~CallbackHelper() {} |
| 75 | 75 |
| 76 MOCK_METHOD1(OnStart, void(PipelineStatus)); | 76 MOCK_METHOD1(OnStart, void(PipelineStatus)); |
| 77 MOCK_METHOD1(OnSeek, void(PipelineStatus)); | 77 MOCK_METHOD1(OnSeek, void(PipelineStatus)); |
| 78 MOCK_METHOD0(OnStop, void()); | 78 MOCK_METHOD0(OnStop, void()); |
| 79 MOCK_METHOD1(OnEnded, void(PipelineStatus)); | 79 MOCK_METHOD1(OnEnded, void(PipelineStatus)); |
| 80 MOCK_METHOD1(OnError, void(PipelineStatus)); | 80 MOCK_METHOD1(OnError, void(PipelineStatus)); |
| 81 MOCK_METHOD1(OnReadyState, void(Pipeline::ReadyState)); |
| 81 | 82 |
| 82 private: | 83 private: |
| 83 DISALLOW_COPY_AND_ASSIGN(CallbackHelper); | 84 DISALLOW_COPY_AND_ASSIGN(CallbackHelper); |
| 84 }; | 85 }; |
| 85 | 86 |
| 86 // TODO(scherkus): even though some filters are initialized on separate | 87 // TODO(scherkus): even though some filters are initialized on separate |
| 87 // threads these test aren't flaky... why? It's because filters' Initialize() | 88 // threads these test aren't flaky... why? It's because filters' Initialize() |
| 88 // is executed on |message_loop_| and the mock filters instantly call | 89 // is executed on |message_loop_| and the mock filters instantly call |
| 89 // InitializationComplete(), which keeps the pipeline humming along. If | 90 // InitializationComplete(), which keeps the pipeline humming along. If |
| 90 // either filters don't call InitializationComplete() immediately or filter | 91 // either filters don't call InitializationComplete() immediately or filter |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 .WillOnce(RunPipelineStatusCB()); | 228 .WillOnce(RunPipelineStatusCB()); |
| 228 EXPECT_CALL(*mocks_->audio_renderer(), Play(_)) | 229 EXPECT_CALL(*mocks_->audio_renderer(), Play(_)) |
| 229 .WillOnce(RunClosure()); | 230 .WillOnce(RunClosure()); |
| 230 } | 231 } |
| 231 } | 232 } |
| 232 | 233 |
| 233 pipeline_->Start( | 234 pipeline_->Start( |
| 234 mocks_->Create().Pass(), | 235 mocks_->Create().Pass(), |
| 235 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), | 236 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| 236 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), | 237 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| 237 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_))); | 238 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| 239 base::Bind(&CallbackHelper::OnReadyState, |
| 240 base::Unretained(&callbacks_))); |
| 238 message_loop_.RunAllPending(); | 241 message_loop_.RunAllPending(); |
| 239 } | 242 } |
| 240 | 243 |
| 241 void CreateAudioStream() { | 244 void CreateAudioStream() { |
| 242 audio_stream_ = CreateStream(DemuxerStream::AUDIO); | 245 audio_stream_ = CreateStream(DemuxerStream::AUDIO); |
| 243 } | 246 } |
| 244 | 247 |
| 245 void CreateVideoStream() { | 248 void CreateVideoStream() { |
| 246 video_stream_ = CreateStream(DemuxerStream::VIDEO); | 249 video_stream_ = CreateStream(DemuxerStream::VIDEO); |
| 247 } | 250 } |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 // Don't execute the callback passed into Initialize(). | 352 // Don't execute the callback passed into Initialize(). |
| 350 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)); | 353 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)); |
| 351 | 354 |
| 352 // This test hangs during initialization by never calling | 355 // This test hangs during initialization by never calling |
| 353 // InitializationComplete(). StrictMock<> will ensure that the callback is | 356 // InitializationComplete(). StrictMock<> will ensure that the callback is |
| 354 // never executed. | 357 // never executed. |
| 355 pipeline_->Start( | 358 pipeline_->Start( |
| 356 mocks_->Create().Pass(), | 359 mocks_->Create().Pass(), |
| 357 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), | 360 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| 358 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), | 361 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| 359 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_))); | 362 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| 363 base::Bind(&CallbackHelper::OnReadyState, |
| 364 base::Unretained(&callbacks_))); |
| 360 message_loop_.RunAllPending(); | 365 message_loop_.RunAllPending(); |
| 361 | 366 |
| 362 | 367 |
| 363 // Because our callback will get executed when the test tears down, we'll | 368 // Because our callback will get executed when the test tears down, we'll |
| 364 // verify that nothing has been called, then set our expectation for the call | 369 // verify that nothing has been called, then set our expectation for the call |
| 365 // made during tear down. | 370 // made during tear down. |
| 366 Mock::VerifyAndClear(&callbacks_); | 371 Mock::VerifyAndClear(&callbacks_); |
| 367 EXPECT_CALL(callbacks_, OnStart(PIPELINE_OK)); | 372 EXPECT_CALL(callbacks_, OnStart(PIPELINE_OK)); |
| 368 } | 373 } |
| 369 | 374 |
| 370 TEST_F(PipelineTest, RequiredFilterMissing) { | 375 TEST_F(PipelineTest, RequiredFilterMissing) { |
| 371 // Create a filter collection with missing filter. | 376 // Create a filter collection with missing filter. |
| 372 scoped_ptr<FilterCollection> collection(mocks_->Create()); | 377 scoped_ptr<FilterCollection> collection(mocks_->Create()); |
| 373 collection->SetDemuxer(NULL); | 378 collection->SetDemuxer(NULL); |
| 374 | 379 |
| 375 EXPECT_CALL(callbacks_, OnStart(PIPELINE_ERROR_REQUIRED_FILTER_MISSING)); | 380 EXPECT_CALL(callbacks_, OnStart(PIPELINE_ERROR_REQUIRED_FILTER_MISSING)); |
| 376 pipeline_->Start( | 381 pipeline_->Start( |
| 377 collection.Pass(), | 382 collection.Pass(), |
| 378 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), | 383 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| 379 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), | 384 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| 380 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_))); | 385 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| 386 base::Bind(&CallbackHelper::OnReadyState, |
| 387 base::Unretained(&callbacks_))); |
| 381 message_loop_.RunAllPending(); | 388 message_loop_.RunAllPending(); |
| 382 } | 389 } |
| 383 | 390 |
| 384 TEST_F(PipelineTest, URLNotFound) { | 391 TEST_F(PipelineTest, URLNotFound) { |
| 385 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) | 392 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) |
| 386 .WillOnce(RunPipelineStatusCBWithStatus(PIPELINE_ERROR_URL_NOT_FOUND)); | 393 .WillOnce(RunPipelineStatusCBWithStatus(PIPELINE_ERROR_URL_NOT_FOUND)); |
| 387 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) | 394 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) |
| 388 .WillOnce(RunClosure()); | 395 .WillOnce(RunClosure()); |
| 389 | 396 |
| 390 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND); | 397 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND); |
| (...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 991 // see http://crbug.com/110228 | 998 // see http://crbug.com/110228 |
| 992 void DoInitialize(TeardownState state, StopOrError stop_or_error) { | 999 void DoInitialize(TeardownState state, StopOrError stop_or_error) { |
| 993 PipelineStatus expected_status = | 1000 PipelineStatus expected_status = |
| 994 SetInitializeExpectations(state, stop_or_error); | 1001 SetInitializeExpectations(state, stop_or_error); |
| 995 | 1002 |
| 996 EXPECT_CALL(callbacks_, OnStart(expected_status)); | 1003 EXPECT_CALL(callbacks_, OnStart(expected_status)); |
| 997 pipeline_->Start( | 1004 pipeline_->Start( |
| 998 mocks_->Create().Pass(), | 1005 mocks_->Create().Pass(), |
| 999 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), | 1006 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| 1000 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), | 1007 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| 1001 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_))); | 1008 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), |
| 1009 base::Bind(&CallbackHelper::OnReadyState, |
| 1010 base::Unretained(&callbacks_))); |
| 1002 message_loop_.RunAllPending(); | 1011 message_loop_.RunAllPending(); |
| 1003 } | 1012 } |
| 1004 | 1013 |
| 1005 PipelineStatus SetInitializeExpectations(TeardownState state, | 1014 PipelineStatus SetInitializeExpectations(TeardownState state, |
| 1006 StopOrError stop_or_error) { | 1015 StopOrError stop_or_error) { |
| 1007 PipelineStatus status = PIPELINE_OK; | 1016 PipelineStatus status = PIPELINE_OK; |
| 1008 base::Closure stop_cb = base::Bind( | 1017 base::Closure stop_cb = base::Bind( |
| 1009 &CallbackHelper::OnStop, base::Unretained(&callbacks_)); | 1018 &CallbackHelper::OnStop, base::Unretained(&callbacks_)); |
| 1010 | 1019 |
| 1011 if (state == kInitDemuxer) { | 1020 if (state == kInitDemuxer) { |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1295 INSTANTIATE_TEARDOWN_TEST(Error, InitAudioRenderer); | 1304 INSTANTIATE_TEARDOWN_TEST(Error, InitAudioRenderer); |
| 1296 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer); | 1305 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer); |
| 1297 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); | 1306 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); |
| 1298 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); | 1307 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); |
| 1299 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); | 1308 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); |
| 1300 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); | 1309 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); |
| 1301 INSTANTIATE_TEARDOWN_TEST(Error, Starting); | 1310 INSTANTIATE_TEARDOWN_TEST(Error, Starting); |
| 1302 INSTANTIATE_TEARDOWN_TEST(Error, Playing); | 1311 INSTANTIATE_TEARDOWN_TEST(Error, Playing); |
| 1303 | 1312 |
| 1304 } // namespace media | 1313 } // namespace media |
| OLD | NEW |