Index: content/browser/renderer_host/media/audio_output_device_enumerator_unittest.cc |
diff --git a/content/browser/renderer_host/media/audio_output_device_enumerator_unittest.cc b/content/browser/renderer_host/media/audio_output_device_enumerator_unittest.cc |
index de1aa34bc644d47b0926b3effa9c100f4339a862..ac6140cbb0153b7201cebf06f2443c5798c68a30 100644 |
--- a/content/browser/renderer_host/media/audio_output_device_enumerator_unittest.cc |
+++ b/content/browser/renderer_host/media/audio_output_device_enumerator_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/run_loop.h" |
#include "base/single_thread_task_runner.h" |
+#include "base/strings/string_number_conversions.h" |
#include "base/thread_task_runner_handle.h" |
#include "content/browser/renderer_host/media/audio_output_device_enumerator.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
@@ -25,24 +26,62 @@ using testing::_; |
namespace content { |
namespace { |
+ |
class MockAudioManager : public media::FakeAudioManager { |
public: |
- MockAudioManager() : FakeAudioManager(&fake_audio_log_factory_) {} |
+ MockAudioManager(size_t num_devices) |
+ : FakeAudioManager(&fake_audio_log_factory_), num_devices_(num_devices) {} |
+ MockAudioManager() : MockAudioManager(0) {} |
~MockAudioManager() override {} |
- MOCK_METHOD1(GetAudioOutputDeviceNames, void(media::AudioDeviceNames*)); |
+ |
+ MOCK_METHOD1(MockGetAudioOutputDeviceNames, void(media::AudioDeviceNames*)); |
+ |
+ void GetAudioOutputDeviceNames( |
+ media::AudioDeviceNames* device_names) override { |
+ DCHECK(device_names->empty()); |
+ MockGetAudioOutputDeviceNames(device_names); |
+ if (num_devices_ > 0) { |
+ device_names->push_back( |
+ media::AudioDeviceName(AudioManager::GetDefaultDeviceName(), |
+ AudioManagerBase::kDefaultDeviceId)); |
+ for (size_t i = 0; i < num_devices_; i++) { |
+ device_names->push_back( |
+ media::AudioDeviceName("FakeDeviceName_" + base::IntToString(i), |
+ "FakeDeviceId_" + base::IntToString(i))); |
+ } |
+ } |
+ } |
private: |
media::FakeAudioLogFactory fake_audio_log_factory_; |
+ size_t num_devices_; |
DISALLOW_COPY_AND_ASSIGN(MockAudioManager); |
}; |
+ |
+// Fake audio manager that exposes only the default device |
+class OnlyDefaultDeviceAudioManager : public MockAudioManager { |
+ public: |
+ OnlyDefaultDeviceAudioManager() {} |
+ ~OnlyDefaultDeviceAudioManager() override {} |
+ void GetAudioOutputDeviceNames( |
+ media::AudioDeviceNames* device_names) override { |
+ DCHECK(device_names->empty()); |
+ MockGetAudioOutputDeviceNames(device_names); |
+ device_names->push_front( |
+ media::AudioDeviceName(AudioManager::GetDefaultDeviceName(), |
+ AudioManagerBase::kDefaultDeviceId)); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(OnlyDefaultDeviceAudioManager); |
+}; |
+ |
} // namespace |
class AudioOutputDeviceEnumeratorTest : public ::testing::Test { |
public: |
AudioOutputDeviceEnumeratorTest() |
- : thread_bundle_(), task_runner_(base::ThreadTaskRunnerHandle::Get()) { |
- audio_manager_.reset(new MockAudioManager()); |
- } |
+ : thread_bundle_(), task_runner_(base::ThreadTaskRunnerHandle::Get()) {} |
~AudioOutputDeviceEnumeratorTest() override {} |
@@ -65,6 +104,14 @@ class AudioOutputDeviceEnumeratorTest : public ::testing::Test { |
} |
} |
+ void EnumerateCountCallback(size_t num_entries_expected, |
+ bool actual_devices_expected, |
+ const AudioOutputDeviceEnumeration& result) { |
+ EXPECT_EQ(actual_devices_expected, result.has_actual_devices); |
+ EXPECT_EQ(num_entries_expected, result.devices.size()); |
+ task_runner_->PostTask(FROM_HERE, run_loop_.QuitClosure()); |
+ } |
+ |
void QuitCallback(const AudioOutputDeviceEnumeration& result) { |
MockCallback(result); |
task_runner_->PostTask(FROM_HERE, run_loop_.QuitClosure()); |
@@ -82,7 +129,8 @@ class AudioOutputDeviceEnumeratorTest : public ::testing::Test { |
TEST_F(AudioOutputDeviceEnumeratorTest, EnumerateWithCache) { |
const int num_calls = 10; |
- EXPECT_CALL(*audio_manager_, GetAudioOutputDeviceNames(_)).Times(1); |
+ audio_manager_.reset(new MockAudioManager()); |
+ EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)).Times(1); |
EXPECT_CALL(*this, MockCallback(_)).Times(num_calls); |
AudioOutputDeviceEnumerator enumerator( |
audio_manager_.get(), |
@@ -95,7 +143,9 @@ TEST_F(AudioOutputDeviceEnumeratorTest, EnumerateWithCache) { |
TEST_F(AudioOutputDeviceEnumeratorTest, EnumerateWithNoCache) { |
const int num_calls = 10; |
- EXPECT_CALL(*audio_manager_, GetAudioOutputDeviceNames(_)).Times(num_calls); |
+ audio_manager_.reset(new MockAudioManager()); |
+ EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)) |
+ .Times(num_calls); |
EXPECT_CALL(*this, MockCallback(_)).Times(num_calls); |
AudioOutputDeviceEnumerator enumerator( |
audio_manager_.get(), |
@@ -106,4 +156,54 @@ TEST_F(AudioOutputDeviceEnumeratorTest, EnumerateWithNoCache) { |
run_loop_.Run(); |
} |
+TEST_F(AudioOutputDeviceEnumeratorTest, EnumerateNoDevices) { |
+ audio_manager_.reset(new MockAudioManager()); |
+ EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)); |
+ AudioOutputDeviceEnumerator enumerator( |
+ audio_manager_.get(), |
+ AudioOutputDeviceEnumerator::CACHE_POLICY_NO_CACHING); |
+ enumerator.Enumerate( |
+ base::Bind(&AudioOutputDeviceEnumeratorTest::EnumerateCountCallback, |
+ base::Unretained(this), 1, false)); |
+ run_loop_.Run(); |
+} |
+ |
+TEST_F(AudioOutputDeviceEnumeratorTest, EnumerateOnlyDefaultDevice) { |
+ audio_manager_.reset(new OnlyDefaultDeviceAudioManager()); |
+ EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)); |
+ AudioOutputDeviceEnumerator enumerator( |
+ audio_manager_.get(), |
+ AudioOutputDeviceEnumerator::CACHE_POLICY_NO_CACHING); |
+ enumerator.Enumerate( |
+ base::Bind(&AudioOutputDeviceEnumeratorTest::EnumerateCountCallback, |
+ base::Unretained(this), 1, true)); |
+ run_loop_.Run(); |
+} |
+ |
+TEST_F(AudioOutputDeviceEnumeratorTest, EnumerateOneDevice) { |
+ size_t num_devices = 1; |
+ audio_manager_.reset(new MockAudioManager(num_devices)); |
+ EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)); |
+ AudioOutputDeviceEnumerator enumerator( |
+ audio_manager_.get(), |
+ AudioOutputDeviceEnumerator::CACHE_POLICY_NO_CACHING); |
+ enumerator.Enumerate( |
+ base::Bind(&AudioOutputDeviceEnumeratorTest::EnumerateCountCallback, |
+ base::Unretained(this), num_devices + 1, true)); |
+ run_loop_.Run(); |
+} |
+ |
+TEST_F(AudioOutputDeviceEnumeratorTest, EnumerateMultipleDevices) { |
+ size_t num_devices = 5; |
+ audio_manager_.reset(new MockAudioManager(num_devices)); |
+ EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)); |
+ AudioOutputDeviceEnumerator enumerator( |
+ audio_manager_.get(), |
+ AudioOutputDeviceEnumerator::CACHE_POLICY_NO_CACHING); |
+ enumerator.Enumerate( |
+ base::Bind(&AudioOutputDeviceEnumeratorTest::EnumerateCountCallback, |
+ base::Unretained(this), num_devices + 1, true)); |
+ run_loop_.Run(); |
+} |
+ |
} // namespace content |