Chromium Code Reviews| Index: media/audio/audio_output_proxy_unittest.cc |
| diff --git a/media/audio/audio_output_proxy_unittest.cc b/media/audio/audio_output_proxy_unittest.cc |
| index 82bb3737f1b791eda504c39a356dafcd746eaaf1..c877fe166b2332815674bacac1848bc5e4f35fc7 100644 |
| --- a/media/audio/audio_output_proxy_unittest.cc |
| +++ b/media/audio/audio_output_proxy_unittest.cc |
| @@ -484,12 +484,18 @@ class AudioOutputResamplerTest : public AudioOutputProxyTest { |
| } |
| virtual void InitDispatcher(base::TimeDelta close_delay) { |
| + InitDispatcher(close_delay, false); |
| + } |
| + |
| + virtual void InitDispatcher(base::TimeDelta close_delay, bool low_latency) { |
|
scherkus (not reviewing)
2012/09/12 13:45:15
can you replace the bool with the enum itself?
in
DaleCurtis
2012/09/12 14:16:51
Done.
|
| AudioOutputProxyTest::InitDispatcher(close_delay); |
| // Attempt shutdown of audio thread in case InitDispatcher() was called |
| // previously. |
| ShutdownAudioThread(); |
| - resampler_params_ = AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, |
| - CHANNEL_LAYOUT_STEREO, 48000, 16, 128); |
| + resampler_params_ = AudioParameters( |
| + (low_latency ? AudioParameters::AUDIO_PCM_LOW_LATENCY : |
| + AudioParameters::AUDIO_PCM_LINEAR), |
| + CHANNEL_LAYOUT_STEREO, 48000, 16, 128); |
| resampler_ = new AudioOutputResampler( |
| &manager(), params_, resampler_params_, close_delay); |
| StartAudioThread(); |
| @@ -786,4 +792,66 @@ TEST_F(AudioOutputResamplerTest, StartFailed) { |
| StartFailed(resampler_); |
| } |
| +// Simulate AudioOutputStream::Create() failure with a low latency stream and |
| +// ensure AudioOutputResampler falls back to the high latency path. |
| +TEST_F(AudioOutputResamplerTest, LowLatencyCreateFailedFallback) { |
| + InitDispatcher(base::TimeDelta::FromSeconds(kTestCloseDelayMs), true); |
| + |
| + MockAudioOutputStream stream; |
| + EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| + .Times(2) |
| + .WillOnce(Return(static_cast<AudioOutputStream*>(NULL))) |
| + .WillRepeatedly(Return(&stream)); |
| + EXPECT_CALL(stream, Open()) |
| + .WillOnce(Return(true)); |
| + EXPECT_CALL(stream, Close()) |
| + .Times(1); |
| + |
| + AudioOutputProxy* proxy = new AudioOutputProxy(resampler_); |
| + EXPECT_TRUE(proxy->Open()); |
| + proxy->Close(); |
| + WaitForCloseTimer(kTestCloseDelayMs); |
| +} |
| + |
| +// Simulate AudioOutputStream::Open() failure with a low latency stream and |
| +// ensure AudioOutputResampler falls back to the high latency path. |
| +TEST_F(AudioOutputResamplerTest, LowLatencyOpenFailedFallback) { |
| + InitDispatcher(base::TimeDelta::FromSeconds(kTestCloseDelayMs), true); |
| + |
| + MockAudioOutputStream failed_stream; |
| + MockAudioOutputStream okay_stream; |
| + EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| + .Times(2) |
| + .WillOnce(Return(&failed_stream)) |
| + .WillRepeatedly(Return(&okay_stream)); |
| + EXPECT_CALL(failed_stream, Open()) |
| + .WillOnce(Return(false)); |
| + EXPECT_CALL(failed_stream, Close()) |
| + .Times(1); |
| + EXPECT_CALL(okay_stream, Open()) |
| + .WillOnce(Return(true)); |
| + EXPECT_CALL(okay_stream, Close()) |
| + .Times(1); |
| + |
| + AudioOutputProxy* proxy = new AudioOutputProxy(resampler_); |
| + EXPECT_TRUE(proxy->Open()); |
| + proxy->Close(); |
| + WaitForCloseTimer(kTestCloseDelayMs); |
| +} |
| + |
| +// Simulate failures to open both the low latency and the fallback high latency |
| +// stream and ensure AudioOutputResampler terminates normally. |
| +TEST_F(AudioOutputResamplerTest, LowLatencyFallbackFailed) { |
| + InitDispatcher(base::TimeDelta::FromSeconds(kTestCloseDelayMs), true); |
| + |
| + EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
| + .Times(2) |
| + .WillRepeatedly(Return(static_cast<AudioOutputStream*>(NULL))); |
| + |
| + AudioOutputProxy* proxy = new AudioOutputProxy(resampler_); |
| + EXPECT_FALSE(proxy->Open()); |
| + proxy->Close(); |
| + WaitForCloseTimer(kTestCloseDelayMs); |
| +} |
| + |
| } // namespace media |