Chromium Code Reviews| 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/message_loop_proxy.h" | 8 #include "base/message_loop_proxy.h" |
| 9 #include "base/threading/platform_thread.h" | 9 #include "base/threading/platform_thread.h" |
| 10 #include "media/audio/audio_output_dispatcher_impl.h" | 10 #include "media/audio/audio_output_dispatcher_impl.h" |
| 11 #include "media/audio/audio_output_mixer.h" | 11 //#include "media/audio/audio_output_mixer.h" |
|
scherkus (not reviewing)
2012/08/09 22:12:39
ditto here + below for all the tests
DaleCurtis
2012/08/09 22:46:29
Done.
| |
| 12 #include "media/audio/audio_output_proxy.h" | 12 #include "media/audio/audio_output_proxy.h" |
| 13 #include "media/audio/audio_manager.h" | 13 #include "media/audio/audio_manager.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 16 |
| 17 using ::testing::_; | 17 using ::testing::_; |
| 18 using ::testing::AllOf; | 18 using ::testing::AllOf; |
| 19 using ::testing::DoAll; | 19 using ::testing::DoAll; |
| 20 using ::testing::Field; | 20 using ::testing::Field; |
| 21 using ::testing::Mock; | 21 using ::testing::Mock; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 98 // closed by the test. | 98 // closed by the test. |
| 99 message_loop_.RunAllPending(); | 99 message_loop_.RunAllPending(); |
| 100 } | 100 } |
| 101 | 101 |
| 102 void InitDispatcher(base::TimeDelta close_delay) { | 102 void InitDispatcher(base::TimeDelta close_delay) { |
| 103 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, | 103 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, |
| 104 CHANNEL_LAYOUT_STEREO, 44100, 16, 1024); | 104 CHANNEL_LAYOUT_STEREO, 44100, 16, 1024); |
| 105 dispatcher_impl_ = new AudioOutputDispatcherImpl(&manager(), | 105 dispatcher_impl_ = new AudioOutputDispatcherImpl(&manager(), |
| 106 params, | 106 params, |
| 107 close_delay); | 107 close_delay); |
| 108 mixer_ = new AudioOutputMixer(&manager(), params, close_delay); | 108 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 109 // mixer_ = new AudioOutputMixer(&manager(), params, close_delay); | |
| 109 | 110 |
| 110 // Necessary to know how long the dispatcher will wait before posting | 111 // Necessary to know how long the dispatcher will wait before posting |
| 111 // StopStreamTask. | 112 // StopStreamTask. |
| 112 pause_delay_ = dispatcher_impl_->pause_delay_; | 113 pause_delay_ = dispatcher_impl_->pause_delay_; |
| 113 } | 114 } |
| 114 | 115 |
| 115 MockAudioManager& manager() { | 116 MockAudioManager& manager() { |
| 116 return manager_; | 117 return manager_; |
| 117 } | 118 } |
| 118 | 119 |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 233 .Times(1); | 234 .Times(1); |
| 234 | 235 |
| 235 AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher); | 236 AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher); |
| 236 EXPECT_FALSE(proxy->Open()); | 237 EXPECT_FALSE(proxy->Open()); |
| 237 proxy->Close(); | 238 proxy->Close(); |
| 238 WaitForCloseTimer(kTestCloseDelayMs); | 239 WaitForCloseTimer(kTestCloseDelayMs); |
| 239 } | 240 } |
| 240 | 241 |
| 241 MessageLoop message_loop_; | 242 MessageLoop message_loop_; |
| 242 scoped_refptr<AudioOutputDispatcherImpl> dispatcher_impl_; | 243 scoped_refptr<AudioOutputDispatcherImpl> dispatcher_impl_; |
| 243 scoped_refptr<AudioOutputMixer> mixer_; | 244 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 245 // scoped_refptr<AudioOutputMixer> mixer_; | |
| 244 base::TimeDelta pause_delay_; | 246 base::TimeDelta pause_delay_; |
| 245 MockAudioManager manager_; | 247 MockAudioManager manager_; |
| 246 MockAudioSourceCallback callback_; | 248 MockAudioSourceCallback callback_; |
| 247 }; | 249 }; |
| 248 | 250 |
| 249 TEST_F(AudioOutputProxyTest, CreateAndClose) { | 251 TEST_F(AudioOutputProxyTest, CreateAndClose) { |
| 250 AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher_impl_); | 252 AudioOutputProxy* proxy = new AudioOutputProxy(dispatcher_impl_); |
| 251 proxy->Close(); | 253 proxy->Close(); |
| 252 } | 254 } |
| 253 | 255 |
| 254 TEST_F(AudioOutputProxyTest, CreateAndClose_Mixer) { | 256 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 255 AudioOutputProxy* proxy = new AudioOutputProxy(mixer_); | 257 // TEST_F(AudioOutputProxyTest, CreateAndClose_Mixer) { |
| 256 proxy->Close(); | 258 // AudioOutputProxy* proxy = new AudioOutputProxy(mixer_); |
| 257 } | 259 // proxy->Close(); |
| 260 // } | |
| 258 | 261 |
| 259 TEST_F(AudioOutputProxyTest, OpenAndClose) { | 262 TEST_F(AudioOutputProxyTest, OpenAndClose) { |
| 260 OpenAndClose(dispatcher_impl_); | 263 OpenAndClose(dispatcher_impl_); |
| 261 } | 264 } |
| 262 | 265 |
| 263 TEST_F(AudioOutputProxyTest, OpenAndClose_Mixer) { | 266 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 264 OpenAndClose(mixer_); | 267 // TEST_F(AudioOutputProxyTest, OpenAndClose_Mixer) { |
| 265 } | 268 // OpenAndClose(mixer_); |
| 269 // } | |
| 266 | 270 |
| 267 // Create a stream, and verify that it is closed after kTestCloseDelayMs. | 271 // Create a stream, and verify that it is closed after kTestCloseDelayMs. |
| 268 // if it doesn't start playing. | 272 // if it doesn't start playing. |
| 269 TEST_F(AudioOutputProxyTest, CreateAndWait) { | 273 TEST_F(AudioOutputProxyTest, CreateAndWait) { |
| 270 MockAudioOutputStream stream; | 274 MockAudioOutputStream stream; |
| 271 | 275 |
| 272 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) | 276 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| 273 .WillOnce(Return(&stream)); | 277 .WillOnce(Return(&stream)); |
| 274 EXPECT_CALL(stream, Open()) | 278 EXPECT_CALL(stream, Open()) |
| 275 .WillOnce(Return(true)); | 279 .WillOnce(Return(true)); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 287 // Verify expectation before calling Close(). | 291 // Verify expectation before calling Close(). |
| 288 Mock::VerifyAndClear(&stream); | 292 Mock::VerifyAndClear(&stream); |
| 289 | 293 |
| 290 proxy->Close(); | 294 proxy->Close(); |
| 291 } | 295 } |
| 292 | 296 |
| 293 TEST_F(AudioOutputProxyTest, StartAndStop) { | 297 TEST_F(AudioOutputProxyTest, StartAndStop) { |
| 294 StartAndStop(dispatcher_impl_); | 298 StartAndStop(dispatcher_impl_); |
| 295 } | 299 } |
| 296 | 300 |
| 297 TEST_F(AudioOutputProxyTest, StartAndStop_Mixer) { | 301 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 298 StartAndStop(mixer_); | 302 // TEST_F(AudioOutputProxyTest, StartAndStop_Mixer) { |
| 299 } | 303 // StartAndStop(mixer_); |
| 304 // } | |
| 300 | 305 |
| 301 TEST_F(AudioOutputProxyTest, CloseAfterStop) { | 306 TEST_F(AudioOutputProxyTest, CloseAfterStop) { |
| 302 CloseAfterStop(dispatcher_impl_); | 307 CloseAfterStop(dispatcher_impl_); |
| 303 } | 308 } |
| 304 | 309 |
| 305 TEST_F(AudioOutputProxyTest, CloseAfterStop_Mixer) { | 310 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 306 CloseAfterStop(mixer_); | 311 // TEST_F(AudioOutputProxyTest, CloseAfterStop_Mixer) { |
| 307 } | 312 // CloseAfterStop(mixer_); |
| 313 // } | |
| 308 | 314 |
| 309 TEST_F(AudioOutputProxyTest, TwoStreams) { | 315 TEST_F(AudioOutputProxyTest, TwoStreams) { |
| 310 TwoStreams(dispatcher_impl_); | 316 TwoStreams(dispatcher_impl_); |
| 311 } | 317 } |
| 312 | 318 |
| 313 TEST_F(AudioOutputProxyTest, TwoStreams_Mixer) { | 319 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 314 TwoStreams(mixer_); | 320 // TEST_F(AudioOutputProxyTest, TwoStreams_Mixer) { |
| 315 } | 321 // TwoStreams(mixer_); |
| 322 // } | |
| 316 | 323 |
| 317 // Two streams: verify that second stream is allocated when the first | 324 // Two streams: verify that second stream is allocated when the first |
| 318 // starts playing. | 325 // starts playing. |
| 319 TEST_F(AudioOutputProxyTest, TwoStreams_OnePlaying) { | 326 TEST_F(AudioOutputProxyTest, TwoStreams_OnePlaying) { |
| 320 MockAudioOutputStream stream1; | 327 MockAudioOutputStream stream1; |
| 321 MockAudioOutputStream stream2; | 328 MockAudioOutputStream stream2; |
| 322 | 329 |
| 323 InitDispatcher(base::TimeDelta::FromSeconds(kTestBigCloseDelaySeconds)); | 330 InitDispatcher(base::TimeDelta::FromSeconds(kTestBigCloseDelaySeconds)); |
| 324 | 331 |
| 325 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) | 332 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 348 EXPECT_TRUE(proxy2->Open()); | 355 EXPECT_TRUE(proxy2->Open()); |
| 349 | 356 |
| 350 proxy1->Start(&callback_); | 357 proxy1->Start(&callback_); |
| 351 message_loop_.RunAllPending(); | 358 message_loop_.RunAllPending(); |
| 352 proxy1->Stop(); | 359 proxy1->Stop(); |
| 353 | 360 |
| 354 proxy1->Close(); | 361 proxy1->Close(); |
| 355 proxy2->Close(); | 362 proxy2->Close(); |
| 356 } | 363 } |
| 357 | 364 |
| 358 // Two streams: verify that only one device will be created. | 365 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 359 TEST_F(AudioOutputProxyTest, TwoStreams_OnePlaying_Mixer) { | 366 // // Two streams: verify that only one device will be created. |
| 360 MockAudioOutputStream stream; | 367 // TEST_F(AudioOutputProxyTest, TwoStreams_OnePlaying_Mixer) { |
| 368 // MockAudioOutputStream stream; | |
| 361 | 369 |
| 362 InitDispatcher(base::TimeDelta::FromMilliseconds(kTestCloseDelayMs)); | 370 // InitDispatcher(base::TimeDelta::FromMilliseconds(kTestCloseDelayMs)); |
| 363 | 371 |
| 364 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) | 372 // EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| 365 .WillOnce(Return(&stream)); | 373 // .WillOnce(Return(&stream)); |
| 366 | 374 |
| 367 EXPECT_CALL(stream, Open()) | 375 // EXPECT_CALL(stream, Open()) |
| 368 .WillOnce(Return(true)); | 376 // .WillOnce(Return(true)); |
| 369 EXPECT_CALL(stream, Start(_)) | 377 // EXPECT_CALL(stream, Start(_)) |
| 370 .Times(1); | 378 // .Times(1); |
| 371 EXPECT_CALL(stream, SetVolume(_)) | 379 // EXPECT_CALL(stream, SetVolume(_)) |
| 372 .Times(1); | 380 // .Times(1); |
| 373 EXPECT_CALL(stream, Stop()) | 381 // EXPECT_CALL(stream, Stop()) |
| 374 .Times(1); | 382 // .Times(1); |
| 375 EXPECT_CALL(stream, Close()) | 383 // EXPECT_CALL(stream, Close()) |
| 376 .Times(1); | 384 // .Times(1); |
| 377 | 385 |
| 378 AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); | 386 // AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); |
| 379 AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); | 387 // AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); |
| 380 EXPECT_TRUE(proxy1->Open()); | 388 // EXPECT_TRUE(proxy1->Open()); |
| 381 EXPECT_TRUE(proxy2->Open()); | 389 // EXPECT_TRUE(proxy2->Open()); |
| 382 | 390 |
| 383 proxy1->Start(&callback_); | 391 // proxy1->Start(&callback_); |
| 384 proxy1->Stop(); | 392 // proxy1->Stop(); |
| 385 | 393 |
| 386 proxy1->Close(); | 394 // proxy1->Close(); |
| 387 proxy2->Close(); | 395 // proxy2->Close(); |
| 388 WaitForCloseTimer(kTestCloseDelayMs); | 396 // WaitForCloseTimer(kTestCloseDelayMs); |
| 389 } | 397 // } |
| 390 | 398 |
| 391 // Two streams, both are playing. Dispatcher should not open a third stream. | 399 // Two streams, both are playing. Dispatcher should not open a third stream. |
| 392 TEST_F(AudioOutputProxyTest, TwoStreams_BothPlaying) { | 400 TEST_F(AudioOutputProxyTest, TwoStreams_BothPlaying) { |
| 393 MockAudioOutputStream stream1; | 401 MockAudioOutputStream stream1; |
| 394 MockAudioOutputStream stream2; | 402 MockAudioOutputStream stream2; |
| 395 | 403 |
| 396 InitDispatcher(base::TimeDelta::FromSeconds(kTestBigCloseDelaySeconds)); | 404 InitDispatcher(base::TimeDelta::FromSeconds(kTestBigCloseDelaySeconds)); |
| 397 | 405 |
| 398 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) | 406 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| 399 .WillOnce(Return(&stream1)) | 407 .WillOnce(Return(&stream1)) |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 428 | 436 |
| 429 proxy1->Start(&callback_); | 437 proxy1->Start(&callback_); |
| 430 proxy2->Start(&callback_); | 438 proxy2->Start(&callback_); |
| 431 proxy1->Stop(); | 439 proxy1->Stop(); |
| 432 proxy2->Stop(); | 440 proxy2->Stop(); |
| 433 | 441 |
| 434 proxy1->Close(); | 442 proxy1->Close(); |
| 435 proxy2->Close(); | 443 proxy2->Close(); |
| 436 } | 444 } |
| 437 | 445 |
| 438 // Two streams, both are playing. Still have to use single device. | 446 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 439 // Also verifies that every proxy stream gets its own pending_bytes. | 447 // // Two streams, both are playing. Still have to use single device. |
| 440 TEST_F(AudioOutputProxyTest, TwoStreams_BothPlaying_Mixer) { | 448 // // Also verifies that every proxy stream gets its own pending_bytes. |
| 441 MockAudioOutputStream stream; | 449 // TEST_F(AudioOutputProxyTest, TwoStreams_BothPlaying_Mixer) { |
| 450 // MockAudioOutputStream stream; | |
| 442 | 451 |
| 443 InitDispatcher(base::TimeDelta::FromMilliseconds(kTestCloseDelayMs)); | 452 // InitDispatcher(base::TimeDelta::FromMilliseconds(kTestCloseDelayMs)); |
| 444 | 453 |
| 445 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) | 454 // EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| 446 .WillOnce(Return(&stream)); | 455 // .WillOnce(Return(&stream)); |
| 447 | 456 |
| 448 EXPECT_CALL(stream, Open()) | 457 // EXPECT_CALL(stream, Open()) |
| 449 .WillOnce(Return(true)); | 458 // .WillOnce(Return(true)); |
| 450 EXPECT_CALL(stream, Start(_)) | 459 // EXPECT_CALL(stream, Start(_)) |
| 451 .Times(1); | 460 // .Times(1); |
| 452 EXPECT_CALL(stream, SetVolume(_)) | 461 // EXPECT_CALL(stream, SetVolume(_)) |
| 453 .Times(1); | 462 // .Times(1); |
| 454 EXPECT_CALL(stream, Stop()) | 463 // EXPECT_CALL(stream, Stop()) |
| 455 .Times(1); | 464 // .Times(1); |
| 456 EXPECT_CALL(stream, Close()) | 465 // EXPECT_CALL(stream, Close()) |
| 457 .Times(1); | 466 // .Times(1); |
| 458 | 467 |
| 459 AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); | 468 // AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); |
| 460 AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); | 469 // AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); |
| 461 EXPECT_TRUE(proxy1->Open()); | 470 // EXPECT_TRUE(proxy1->Open()); |
| 462 EXPECT_TRUE(proxy2->Open()); | 471 // EXPECT_TRUE(proxy2->Open()); |
| 463 | 472 |
| 464 proxy1->Start(&callback_); | 473 // proxy1->Start(&callback_); |
| 465 | 474 |
| 466 // Mute the proxy. Resulting stream should still have correct length. | 475 // // Mute the proxy. Resulting stream should still have correct length. |
| 467 proxy1->SetVolume(0.0); | 476 // proxy1->SetVolume(0.0); |
| 468 | 477 |
| 469 uint8 zeroes[4] = {0, 0, 0, 0}; | 478 // uint8 zeroes[4] = {0, 0, 0, 0}; |
| 470 uint8 buf1[4] = {0}; | 479 // uint8 buf1[4] = {0}; |
| 471 EXPECT_CALL(callback_, | 480 // EXPECT_CALL(callback_, |
| 472 OnMoreData(NotNull(), 4, | 481 // OnMoreData(NotNull(), 4, |
| 473 AllOf(Field(&AudioBuffersState::pending_bytes, 0), | 482 // AllOf(Field(&AudioBuffersState::pending_bytes, 0), |
| 474 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) | 483 // Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
| 475 .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), | 484 // .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), |
| 476 Return(4))); | 485 // Return(4))); |
| 477 mixer_->OnMoreData(buf1, sizeof(buf1), AudioBuffersState(0, 0)); | 486 // mixer_->OnMoreData(buf1, sizeof(buf1), AudioBuffersState(0, 0)); |
| 478 proxy2->Start(&callback_); | 487 // proxy2->Start(&callback_); |
| 479 uint8 buf2[4] = {0}; | 488 // uint8 buf2[4] = {0}; |
| 480 EXPECT_CALL(callback_, | 489 // EXPECT_CALL(callback_, |
| 481 OnMoreData(NotNull(), 4, | 490 // OnMoreData(NotNull(), 4, |
| 482 AllOf(Field(&AudioBuffersState::pending_bytes, 4), | 491 // AllOf(Field(&AudioBuffersState::pending_bytes, 4), |
| 483 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) | 492 // Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
| 484 .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), | 493 // .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), |
| 485 Return(4))); | 494 // Return(4))); |
| 486 EXPECT_CALL(callback_, | 495 // EXPECT_CALL(callback_, |
| 487 OnMoreData(NotNull(), 4, | 496 // OnMoreData(NotNull(), 4, |
| 488 AllOf(Field(&AudioBuffersState::pending_bytes, 0), | 497 // AllOf(Field(&AudioBuffersState::pending_bytes, 0), |
| 489 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) | 498 // Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
| 490 .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), | 499 // .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), |
| 491 Return(4))); | 500 // Return(4))); |
| 492 mixer_->OnMoreData(buf2, sizeof(buf2), AudioBuffersState(4, 0)); | 501 // mixer_->OnMoreData(buf2, sizeof(buf2), AudioBuffersState(4, 0)); |
| 493 proxy1->Stop(); | 502 // proxy1->Stop(); |
| 494 proxy2->Stop(); | 503 // proxy2->Stop(); |
| 495 | 504 |
| 496 proxy1->Close(); | 505 // proxy1->Close(); |
| 497 proxy2->Close(); | 506 // proxy2->Close(); |
| 498 WaitForCloseTimer(kTestCloseDelayMs); | 507 // WaitForCloseTimer(kTestCloseDelayMs); |
| 499 } | 508 // } |
| 500 | 509 |
| 501 TEST_F(AudioOutputProxyTest, OpenFailed) { | 510 TEST_F(AudioOutputProxyTest, OpenFailed) { |
| 502 OpenFailed(dispatcher_impl_); | 511 OpenFailed(dispatcher_impl_); |
| 503 } | 512 } |
| 504 | 513 |
| 505 TEST_F(AudioOutputProxyTest, OpenFailed_Mixer) { | 514 // TODO(dalecurtis): Temporarily disabled while switching over to floats. |
| 506 OpenFailed(mixer_); | 515 // TEST_F(AudioOutputProxyTest, OpenFailed_Mixer) { |
| 507 } | 516 // OpenFailed(mixer_); |
| 517 // } | |
| 508 | 518 |
| 509 // Start() method failed. | 519 // Start() method failed. |
| 510 TEST_F(AudioOutputProxyTest, StartFailed) { | 520 TEST_F(AudioOutputProxyTest, StartFailed) { |
| 511 MockAudioOutputStream stream; | 521 MockAudioOutputStream stream; |
| 512 | 522 |
| 513 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) | 523 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| 514 .WillOnce(Return(&stream)); | 524 .WillOnce(Return(&stream)); |
| 515 EXPECT_CALL(stream, Open()) | 525 EXPECT_CALL(stream, Open()) |
| 516 .WillOnce(Return(true)); | 526 .WillOnce(Return(true)); |
| 517 EXPECT_CALL(stream, Close()) | 527 EXPECT_CALL(stream, Close()) |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 535 EXPECT_CALL(callback_, OnError(_, _)) | 545 EXPECT_CALL(callback_, OnError(_, _)) |
| 536 .Times(1); | 546 .Times(1); |
| 537 | 547 |
| 538 proxy->Start(&callback_); | 548 proxy->Start(&callback_); |
| 539 | 549 |
| 540 Mock::VerifyAndClear(&callback_); | 550 Mock::VerifyAndClear(&callback_); |
| 541 | 551 |
| 542 proxy->Close(); | 552 proxy->Close(); |
| 543 } | 553 } |
| 544 | 554 |
| 555 // TODO(dalecurtis): Temporarily disabled while switching over to floats. | |
| 545 // Start() method failed. | 556 // Start() method failed. |
| 546 TEST_F(AudioOutputProxyTest, StartFailed_Mixer) { | 557 // TEST_F(AudioOutputProxyTest, StartFailed_Mixer) { |
| 547 MockAudioOutputStream stream; | 558 // MockAudioOutputStream stream; |
| 548 | 559 |
| 549 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) | 560 // EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| 550 .WillOnce(Return(&stream)); | 561 // .WillOnce(Return(&stream)); |
| 551 EXPECT_CALL(stream, Open()) | 562 // EXPECT_CALL(stream, Open()) |
| 552 .WillOnce(Return(true)); | 563 // .WillOnce(Return(true)); |
| 553 EXPECT_CALL(stream, Close()) | 564 // EXPECT_CALL(stream, Close()) |
| 554 .Times(1); | 565 // .Times(1); |
| 555 EXPECT_CALL(stream, Start(_)) | 566 // EXPECT_CALL(stream, Start(_)) |
| 556 .Times(1); | 567 // .Times(1); |
| 557 EXPECT_CALL(stream, SetVolume(_)) | 568 // EXPECT_CALL(stream, SetVolume(_)) |
| 558 .Times(1); | 569 // .Times(1); |
| 559 EXPECT_CALL(stream, Stop()) | 570 // EXPECT_CALL(stream, Stop()) |
| 560 .Times(1); | 571 // .Times(1); |
| 561 | 572 |
| 562 AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); | 573 // AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); |
| 563 AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); | 574 // AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); |
| 564 EXPECT_TRUE(proxy1->Open()); | 575 // EXPECT_TRUE(proxy1->Open()); |
| 565 EXPECT_TRUE(proxy2->Open()); | 576 // EXPECT_TRUE(proxy2->Open()); |
| 566 proxy1->Start(&callback_); | 577 // proxy1->Start(&callback_); |
| 567 proxy1->Stop(); | 578 // proxy1->Stop(); |
| 568 proxy1->Close(); | 579 // proxy1->Close(); |
| 569 WaitForCloseTimer(kTestCloseDelayMs); | 580 // WaitForCloseTimer(kTestCloseDelayMs); |
| 570 | 581 |
| 571 // Verify expectation before continueing. | 582 // // Verify expectation before continueing. |
| 572 Mock::VerifyAndClear(&stream); | 583 // Mock::VerifyAndClear(&stream); |
| 573 | 584 |
| 574 // |stream| is closed at this point. Start() should reopen it again. | 585 // // |stream| is closed at this point. Start() should reopen it again. |
| 575 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) | 586 // EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| 576 .WillOnce(Return(reinterpret_cast<AudioOutputStream*>(NULL))); | 587 // .WillOnce(Return(reinterpret_cast<AudioOutputStream*>(NULL))); |
| 577 | 588 |
| 578 EXPECT_CALL(callback_, OnError(_, _)) | 589 // EXPECT_CALL(callback_, OnError(_, _)) |
| 579 .Times(1); | 590 // .Times(1); |
| 580 | 591 |
| 581 proxy2->Start(&callback_); | 592 // proxy2->Start(&callback_); |
| 582 | 593 |
| 583 Mock::VerifyAndClear(&callback_); | 594 // Mock::VerifyAndClear(&callback_); |
| 584 | 595 |
| 585 proxy2->Close(); | 596 // proxy2->Close(); |
| 586 WaitForCloseTimer(kTestCloseDelayMs); | 597 // WaitForCloseTimer(kTestCloseDelayMs); |
| 587 } | 598 // } |
| 588 | 599 |
| 589 } // namespace media | 600 } // namespace media |
| OLD | NEW |