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" |
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::Field; | 20 using ::testing::Field; |
20 using ::testing::Mock; | 21 using ::testing::Mock; |
| 22 using ::testing::NotNull; |
21 using ::testing::Return; | 23 using ::testing::Return; |
| 24 using ::testing::SetArrayArgument; |
22 using media::AudioBuffersState; | 25 using media::AudioBuffersState; |
23 using media::AudioInputStream; | 26 using media::AudioInputStream; |
24 using media::AudioManager; | 27 using media::AudioManager; |
25 using media::AudioOutputDispatcher; | 28 using media::AudioOutputDispatcher; |
26 using media::AudioOutputProxy; | 29 using media::AudioOutputProxy; |
27 using media::AudioOutputStream; | 30 using media::AudioOutputStream; |
28 using media::AudioParameters; | 31 using media::AudioParameters; |
29 | 32 |
30 namespace { | 33 namespace { |
31 | 34 |
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 .Times(1); | 458 .Times(1); |
456 EXPECT_CALL(stream, Close()) | 459 EXPECT_CALL(stream, Close()) |
457 .Times(1); | 460 .Times(1); |
458 | 461 |
459 AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); | 462 AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); |
460 AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); | 463 AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); |
461 EXPECT_TRUE(proxy1->Open()); | 464 EXPECT_TRUE(proxy1->Open()); |
462 EXPECT_TRUE(proxy2->Open()); | 465 EXPECT_TRUE(proxy2->Open()); |
463 | 466 |
464 proxy1->Start(&callback_); | 467 proxy1->Start(&callback_); |
| 468 uint8 zeroes[4] = {0, 0, 0, 0}; |
465 uint8 buf1[4] = {0}; | 469 uint8 buf1[4] = {0}; |
466 EXPECT_CALL(callback_, | 470 EXPECT_CALL(callback_, |
467 OnMoreData(_, 4, | 471 OnMoreData(NotNull(), 4, |
468 AllOf(Field(&AudioBuffersState::pending_bytes, 0), | 472 AllOf(Field(&AudioBuffersState::pending_bytes, 0), |
469 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) | 473 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
470 .WillOnce(Return(4)); | 474 .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), |
| 475 Return(4))); |
471 mixer_->OnMoreData(buf1, sizeof(buf1), AudioBuffersState(0, 0)); | 476 mixer_->OnMoreData(buf1, sizeof(buf1), AudioBuffersState(0, 0)); |
472 proxy2->Start(&callback_); | 477 proxy2->Start(&callback_); |
473 uint8 buf2[4] = {0}; | 478 uint8 buf2[4] = {0}; |
474 EXPECT_CALL(callback_, | 479 EXPECT_CALL(callback_, |
475 OnMoreData(_, 4, | 480 OnMoreData(NotNull(), 4, |
476 AllOf(Field(&AudioBuffersState::pending_bytes, 4), | 481 AllOf(Field(&AudioBuffersState::pending_bytes, 4), |
477 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) | 482 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
478 .WillOnce(Return(4)); | 483 .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), |
| 484 Return(4))); |
479 EXPECT_CALL(callback_, | 485 EXPECT_CALL(callback_, |
480 OnMoreData(_, 4, | 486 OnMoreData(NotNull(), 4, |
481 AllOf(Field(&AudioBuffersState::pending_bytes, 0), | 487 AllOf(Field(&AudioBuffersState::pending_bytes, 0), |
482 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) | 488 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
483 .WillOnce(Return(4)); | 489 .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), |
| 490 Return(4))); |
484 mixer_->OnMoreData(buf2, sizeof(buf2), AudioBuffersState(4, 0)); | 491 mixer_->OnMoreData(buf2, sizeof(buf2), AudioBuffersState(4, 0)); |
485 proxy1->Stop(); | 492 proxy1->Stop(); |
486 proxy2->Stop(); | 493 proxy2->Stop(); |
487 | 494 |
488 proxy1->Close(); | 495 proxy1->Close(); |
489 proxy2->Close(); | 496 proxy2->Close(); |
490 WaitForCloseTimer(kTestCloseDelayMs); | 497 WaitForCloseTimer(kTestCloseDelayMs); |
491 } | 498 } |
492 | 499 |
493 TEST_F(AudioOutputProxyTest, OpenFailed) { | 500 TEST_F(AudioOutputProxyTest, OpenFailed) { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
572 | 579 |
573 proxy2->Start(&callback_); | 580 proxy2->Start(&callback_); |
574 | 581 |
575 Mock::VerifyAndClear(&callback_); | 582 Mock::VerifyAndClear(&callback_); |
576 | 583 |
577 proxy2->Close(); | 584 proxy2->Close(); |
578 WaitForCloseTimer(kTestCloseDelayMs); | 585 WaitForCloseTimer(kTestCloseDelayMs); |
579 } | 586 } |
580 | 587 |
581 } // namespace media | 588 } // namespace media |
OLD | NEW |