Index: content/renderer/media/webaudiosourceprovider_impl_unittest.cc |
diff --git a/content/renderer/media/webaudiosourceprovider_impl_unittest.cc b/content/renderer/media/webaudiosourceprovider_impl_unittest.cc |
deleted file mode 100644 |
index 8a59822debc05e5b7c1b5132fd13a1c5efd037a6..0000000000000000000000000000000000000000 |
--- a/content/renderer/media/webaudiosourceprovider_impl_unittest.cc |
+++ /dev/null |
@@ -1,240 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/message_loop/message_loop.h" |
-#include "base/run_loop.h" |
-#include "content/renderer/media/webaudiosourceprovider_impl.h" |
-#include "media/audio/audio_parameters.h" |
-#include "media/base/fake_audio_render_callback.h" |
-#include "media/base/mock_audio_renderer_sink.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/WebKit/public/platform/WebAudioSourceProviderClient.h" |
- |
-namespace content { |
- |
-namespace { |
-const float kTestVolume = 0.25; |
-} // namespace |
- |
-class WebAudioSourceProviderImplTest |
- : public testing::Test, |
- public blink::WebAudioSourceProviderClient { |
- public: |
- WebAudioSourceProviderImplTest() |
- : params_(media::AudioParameters::AUDIO_PCM_LINEAR, |
- media::CHANNEL_LAYOUT_STEREO, 48000, 16, 64), |
- fake_callback_(0.1), |
- mock_sink_(new media::MockAudioRendererSink()), |
- wasp_impl_(new WebAudioSourceProviderImpl(mock_sink_)) { |
- } |
- |
- virtual ~WebAudioSourceProviderImplTest() {} |
- |
- void CallAllSinkMethodsAndVerify(bool verify) { |
- testing::InSequence s; |
- |
- EXPECT_CALL(*mock_sink_.get(), Start()).Times(verify); |
- wasp_impl_->Start(); |
- |
- EXPECT_CALL(*mock_sink_.get(), Play()).Times(verify); |
- wasp_impl_->Play(); |
- |
- EXPECT_CALL(*mock_sink_.get(), Pause()).Times(verify); |
- wasp_impl_->Pause(); |
- |
- EXPECT_CALL(*mock_sink_.get(), SetVolume(kTestVolume)).Times(verify); |
- wasp_impl_->SetVolume(kTestVolume); |
- |
- EXPECT_CALL(*mock_sink_.get(), Stop()).Times(verify); |
- wasp_impl_->Stop(); |
- |
- testing::Mock::VerifyAndClear(mock_sink_.get()); |
- } |
- |
- void SetClient(blink::WebAudioSourceProviderClient* client) { |
- testing::InSequence s; |
- |
- if (client) { |
- EXPECT_CALL(*mock_sink_.get(), Stop()); |
- EXPECT_CALL(*this, setFormat(params_.channels(), params_.sample_rate())); |
- } |
- wasp_impl_->setClient(client); |
- base::RunLoop().RunUntilIdle(); |
- |
- testing::Mock::VerifyAndClear(mock_sink_.get()); |
- testing::Mock::VerifyAndClear(this); |
- } |
- |
- bool CompareBusses(const media::AudioBus* bus1, const media::AudioBus* bus2) { |
- EXPECT_EQ(bus1->channels(), bus2->channels()); |
- EXPECT_EQ(bus1->frames(), bus2->frames()); |
- for (int ch = 0; ch < bus1->channels(); ++ch) { |
- if (memcmp(bus1->channel(ch), bus2->channel(ch), |
- sizeof(*bus1->channel(ch)) * bus1->frames()) != 0) { |
- return false; |
- } |
- } |
- return true; |
- } |
- |
- // blink::WebAudioSourceProviderClient implementation. |
- MOCK_METHOD2(setFormat, void(size_t numberOfChannels, float sampleRate)); |
- |
- protected: |
- media::AudioParameters params_; |
- media::FakeAudioRenderCallback fake_callback_; |
- scoped_refptr<media::MockAudioRendererSink> mock_sink_; |
- scoped_refptr<WebAudioSourceProviderImpl> wasp_impl_; |
- base::MessageLoop message_loop_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebAudioSourceProviderImplTest); |
-}; |
- |
-TEST_F(WebAudioSourceProviderImplTest, SetClientBeforeInitialize) { |
- // setClient() with a NULL client should do nothing if no client is set. |
- wasp_impl_->setClient(NULL); |
- |
- EXPECT_CALL(*mock_sink_.get(), Stop()); |
- wasp_impl_->setClient(this); |
- base::RunLoop().RunUntilIdle(); |
- |
- // When Initialize() is called after setClient(), the params should propagate |
- // to the client via setFormat() during the call. |
- EXPECT_CALL(*this, setFormat(params_.channels(), params_.sample_rate())); |
- wasp_impl_->Initialize(params_, &fake_callback_); |
- base::RunLoop().RunUntilIdle(); |
- |
- // setClient() with the same client should do nothing. |
- wasp_impl_->setClient(this); |
- base::RunLoop().RunUntilIdle(); |
-} |
- |
-// Verify AudioRendererSink functionality w/ and w/o a client. |
-TEST_F(WebAudioSourceProviderImplTest, SinkMethods) { |
- wasp_impl_->Initialize(params_, &fake_callback_); |
- ASSERT_EQ(mock_sink_->callback(), &fake_callback_); |
- |
- // Without a client all WASP calls should fall through to the underlying sink. |
- CallAllSinkMethodsAndVerify(true); |
- |
- // With a client no calls should reach the Stop()'d sink. Also, setClient() |
- // should propagate the params provided during Initialize() at call time. |
- SetClient(this); |
- CallAllSinkMethodsAndVerify(false); |
- |
- // Removing the client should cause WASP to revert to the underlying sink. |
- EXPECT_CALL(*mock_sink_.get(), SetVolume(kTestVolume)); |
- SetClient(NULL); |
- CallAllSinkMethodsAndVerify(true); |
-} |
- |
-// Verify underlying sink state is restored after client removal. |
-TEST_F(WebAudioSourceProviderImplTest, SinkStateRestored) { |
- wasp_impl_->Initialize(params_, &fake_callback_); |
- |
- // Verify state set before the client is set propagates back afterward. |
- EXPECT_CALL(*mock_sink_.get(), Start()); |
- wasp_impl_->Start(); |
- SetClient(this); |
- |
- EXPECT_CALL(*mock_sink_.get(), SetVolume(1.0)); |
- EXPECT_CALL(*mock_sink_.get(), Start()); |
- SetClient(NULL); |
- |
- // Verify state set while the client was attached propagates back afterward. |
- SetClient(this); |
- wasp_impl_->Play(); |
- wasp_impl_->SetVolume(kTestVolume); |
- |
- EXPECT_CALL(*mock_sink_.get(), SetVolume(kTestVolume)); |
- EXPECT_CALL(*mock_sink_.get(), Start()); |
- EXPECT_CALL(*mock_sink_.get(), Play()); |
- SetClient(NULL); |
-} |
- |
-// Test the AudioRendererSink state machine and its effects on provideInput(). |
-TEST_F(WebAudioSourceProviderImplTest, ProvideInput) { |
- scoped_ptr<media::AudioBus> bus1 = media::AudioBus::Create(params_); |
- scoped_ptr<media::AudioBus> bus2 = media::AudioBus::Create(params_); |
- |
- // Point the WebVector into memory owned by |bus1|. |
- blink::WebVector<float*> audio_data(static_cast<size_t>(bus1->channels())); |
- for (size_t i = 0; i < audio_data.size(); ++i) |
- audio_data[i] = bus1->channel(i); |
- |
- // Verify provideInput() works before Initialize() and returns silence. |
- bus1->channel(0)[0] = 1; |
- bus2->Zero(); |
- wasp_impl_->provideInput(audio_data, params_.frames_per_buffer()); |
- ASSERT_TRUE(CompareBusses(bus1.get(), bus2.get())); |
- |
- wasp_impl_->Initialize(params_, &fake_callback_); |
- SetClient(this); |
- |
- // Verify provideInput() is muted prior to Start() and no calls to the render |
- // callback have occurred. |
- bus1->channel(0)[0] = 1; |
- bus2->Zero(); |
- wasp_impl_->provideInput(audio_data, params_.frames_per_buffer()); |
- ASSERT_TRUE(CompareBusses(bus1.get(), bus2.get())); |
- ASSERT_EQ(fake_callback_.last_audio_delay_milliseconds(), -1); |
- |
- wasp_impl_->Start(); |
- |
- // Ditto for Play(). |
- bus1->channel(0)[0] = 1; |
- wasp_impl_->provideInput(audio_data, params_.frames_per_buffer()); |
- ASSERT_TRUE(CompareBusses(bus1.get(), bus2.get())); |
- ASSERT_EQ(fake_callback_.last_audio_delay_milliseconds(), -1); |
- |
- wasp_impl_->Play(); |
- |
- // Now we should get real audio data. |
- wasp_impl_->provideInput(audio_data, params_.frames_per_buffer()); |
- ASSERT_FALSE(CompareBusses(bus1.get(), bus2.get())); |
- |
- // Ensure volume adjustment is working. |
- fake_callback_.reset(); |
- fake_callback_.Render(bus2.get(), 0); |
- bus2->Scale(kTestVolume); |
- |
- fake_callback_.reset(); |
- wasp_impl_->SetVolume(kTestVolume); |
- wasp_impl_->provideInput(audio_data, params_.frames_per_buffer()); |
- ASSERT_TRUE(CompareBusses(bus1.get(), bus2.get())); |
- |
- // Pause should return to silence. |
- wasp_impl_->Pause(); |
- bus1->channel(0)[0] = 1; |
- bus2->Zero(); |
- wasp_impl_->provideInput(audio_data, params_.frames_per_buffer()); |
- ASSERT_TRUE(CompareBusses(bus1.get(), bus2.get())); |
- |
- // Ensure if a renderer properly fill silence for partial Render() calls by |
- // configuring the fake callback to return half the data. After these calls |
- // bus1 is full of junk data, and bus2 is partially filled. |
- wasp_impl_->SetVolume(1); |
- fake_callback_.Render(bus1.get(), 0); |
- fake_callback_.reset(); |
- fake_callback_.Render(bus2.get(), 0); |
- bus2->ZeroFramesPartial(bus2->frames() / 2, |
- bus2->frames() - bus2->frames() / 2); |
- fake_callback_.reset(); |
- fake_callback_.set_half_fill(true); |
- wasp_impl_->Play(); |
- |
- // Play should return real audio data again, but the last half should be zero. |
- wasp_impl_->provideInput(audio_data, params_.frames_per_buffer()); |
- ASSERT_TRUE(CompareBusses(bus1.get(), bus2.get())); |
- |
- // Stop() should return silence. |
- wasp_impl_->Stop(); |
- bus1->channel(0)[0] = 1; |
- bus2->Zero(); |
- wasp_impl_->provideInput(audio_data, params_.frames_per_buffer()); |
- ASSERT_TRUE(CompareBusses(bus1.get(), bus2.get())); |
-} |
- |
-} // namespace content |