Index: media/base/audio_renderer_mixer_input_unittest.cc |
diff --git a/media/base/audio_renderer_mixer_input_unittest.cc b/media/base/audio_renderer_mixer_input_unittest.cc |
index 814b8ede316c5c1e13a5c26722f3406477b35539..6a094f4cc2e4dbce566c63da512a051760d16af5 100644 |
--- a/media/base/audio_renderer_mixer_input_unittest.cc |
+++ b/media/base/audio_renderer_mixer_input_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "base/run_loop.h" |
#include "media/base/audio_renderer_mixer.h" |
#include "media/base/audio_renderer_mixer_input.h" |
+#include "media/base/audio_renderer_mixer_pool.h" |
#include "media/base/fake_audio_render_callback.h" |
#include "media/base/mock_audio_renderer_sink.h" |
#include "testing/gmock/include/gmock/gmock.h" |
@@ -21,12 +22,14 @@ namespace media { |
static const int kBitsPerChannel = 16; |
static const int kSampleRate = 48000; |
static const int kBufferSize = 8192; |
+static const int kRenderFrameId = 42; |
static const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_STEREO; |
-static const char kDefaultDeviceId[] = ""; |
+static const char kDefaultDeviceId[] = "default"; |
static const char kUnauthorizedDeviceId[] = "unauthorized"; |
static const char kNonexistentDeviceId[] = "nonexistent"; |
-class AudioRendererMixerInputTest : public testing::Test { |
+class AudioRendererMixerInputTest : public testing::Test, |
+ AudioRendererMixerPool { |
public: |
AudioRendererMixerInputTest() { |
audio_parameters_ = AudioParameters( |
@@ -40,15 +43,12 @@ class AudioRendererMixerInputTest : public testing::Test { |
} |
void CreateMixerInput(const std::string& device_id) { |
- mixer_input_ = new AudioRendererMixerInput( |
- base::Bind(&AudioRendererMixerInputTest::GetMixer, |
- base::Unretained(this)), |
- base::Bind(&AudioRendererMixerInputTest::RemoveMixer, |
- base::Unretained(this)), |
- device_id, url::Origin()); |
+ mixer_input_ = new AudioRendererMixerInput(this, kRenderFrameId, device_id, |
+ url::Origin()); |
} |
- AudioRendererMixer* GetMixer(const AudioParameters& params, |
+ AudioRendererMixer* GetMixer(int owner_id, |
+ const AudioParameters& params, |
const std::string& device_id, |
const url::Origin& security_origin, |
OutputDeviceStatus* device_status) { |
@@ -64,15 +64,18 @@ class AudioRendererMixerInputTest : public testing::Test { |
return nullptr; |
} |
- size_t idx = device_id.empty() ? 0 : 1; |
+ size_t idx = (device_id == kDefaultDeviceId) ? 0 : 1; |
if (!mixers_[idx]) { |
- scoped_refptr<MockAudioRendererSink> sink = new MockAudioRendererSink(); |
- EXPECT_CALL(*sink.get(), Start()); |
- EXPECT_CALL(*sink.get(), Stop()); |
+ sinks_[idx] = |
+ new MockAudioRendererSink(device_id, OUTPUT_DEVICE_STATUS_OK); |
+ EXPECT_CALL(*(sinks_[idx].get()), Start()); |
+ EXPECT_CALL(*(sinks_[idx].get()), Stop()); |
- mixers_[idx].reset(new AudioRendererMixer(audio_parameters_, sink)); |
+ mixers_[idx].reset( |
+ new AudioRendererMixer(audio_parameters_, sinks_[idx].get())); |
} |
- EXPECT_CALL(*this, RemoveMixer(testing::_, device_id, testing::_)); |
+ EXPECT_CALL(*this, |
+ ReturnMixer(kRenderFrameId, testing::_, device_id, testing::_)); |
if (device_status) |
*device_status = OUTPUT_DEVICE_STATUS_OK; |
@@ -83,12 +86,18 @@ class AudioRendererMixerInputTest : public testing::Test { |
return mixer_input_->ProvideInput(audio_bus_.get(), base::TimeDelta()); |
} |
- MOCK_METHOD3(RemoveMixer, |
- void(const AudioParameters&, |
+ MOCK_METHOD4(ReturnMixer, |
+ void(int, |
+ const AudioParameters&, |
const std::string&, |
const url::Origin&)); |
+ MOCK_METHOD4( |
+ GetOutputDeviceInfo, |
+ OutputDeviceInfo(int, int, const std::string&, const url::Origin&)); |
+ |
MOCK_METHOD1(SwitchCallbackCalled, void(OutputDeviceStatus)); |
+ |
void SwitchCallback(base::RunLoop* loop, OutputDeviceStatus result) { |
SwitchCallbackCalled(result); |
loop->Quit(); |
@@ -100,6 +109,7 @@ class AudioRendererMixerInputTest : public testing::Test { |
virtual ~AudioRendererMixerInputTest() {} |
AudioParameters audio_parameters_; |
+ scoped_refptr<MockAudioRendererSink> sinks_[2]; |
std::unique_ptr<AudioRendererMixer> mixers_[2]; |
scoped_refptr<AudioRendererMixerInput> mixer_input_; |
std::unique_ptr<FakeAudioRenderCallback> fake_callback_; |
@@ -109,6 +119,27 @@ class AudioRendererMixerInputTest : public testing::Test { |
DISALLOW_COPY_AND_ASSIGN(AudioRendererMixerInputTest); |
}; |
+TEST_F(AudioRendererMixerInputTest, GetDeviceInfo) { |
+ ON_CALL(*this, |
+ GetOutputDeviceInfo(testing::_, testing::_, testing::_, testing::_)) |
+ .WillByDefault(testing::Return(OutputDeviceInfo())); |
+ EXPECT_CALL(*this, GetOutputDeviceInfo(kRenderFrameId, 0 /* session id */, |
+ kDefaultDeviceId, testing::_)) |
+ .Times(testing::Exactly(1)); |
+ |
+ // Calling GetOutputDeviceInfo() should result in the mock call, since there |
+ // is no mixer created yet for mixer input. |
+ mixer_input_->GetOutputDeviceInfo(); |
+ mixer_input_->Start(); |
+ |
+ // This call should be directed to the mixer and should not result in the mock |
+ // call. |
+ EXPECT_STREQ(kDefaultDeviceId, |
+ mixer_input_->GetOutputDeviceInfo().device_id().c_str()); |
+ |
+ mixer_input_->Stop(); |
+} |
+ |
// Test that getting and setting the volume work as expected. The volume is |
// returned from ProvideInput() only when playing. |
TEST_F(AudioRendererMixerInputTest, GetSetVolume) { |