Index: content/renderer/media/audio_renderer_impl_unittest.cc |
diff --git a/content/renderer/media/audio_renderer_impl_unittest.cc b/content/renderer/media/audio_renderer_impl_unittest.cc |
deleted file mode 100644 |
index a0bb00c374f57547fc73778f46c980b6e41d6159..0000000000000000000000000000000000000000 |
--- a/content/renderer/media/audio_renderer_impl_unittest.cc |
+++ /dev/null |
@@ -1,199 +0,0 @@ |
-// Copyright (c) 2012 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/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/message_loop.h" |
-#include "base/process_util.h" |
-#include "base/synchronization/waitable_event.h" |
-#include "base/test/test_timeouts.h" |
-#include "base/time.h" |
-#include "content/common/child_process.h" |
-#include "content/common/child_thread.h" |
-#include "content/renderer/media/audio_renderer_impl.h" |
-#include "content/renderer/mock_content_renderer_client.h" |
-#include "content/renderer/render_process.h" |
-#include "content/renderer/render_thread_impl.h" |
-#include "ipc/ipc_channel.h" |
-#include "media/base/data_buffer.h" |
-#include "media/base/mock_callback.h" |
-#include "media/base/mock_filter_host.h" |
-#include "media/base/mock_filters.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using ::testing::Return; |
- |
-namespace { |
-// This class is a mock of the child process singleton which is needed |
-// to be able to create a RenderThread object. |
-class MockRenderProcess : public RenderProcess { |
- public: |
- MockRenderProcess() {} |
- virtual ~MockRenderProcess() {} |
- |
- // RenderProcess implementation. |
- virtual skia::PlatformCanvas* GetDrawingCanvas(TransportDIB** memory, |
- const gfx::Rect& rect) { return NULL; } |
- virtual void ReleaseTransportDIB(TransportDIB* memory) {} |
- virtual bool UseInProcessPlugins() const { return false; } |
- virtual void AddBindings(int bindings) {} |
- virtual int GetEnabledBindings() const { return 0; } |
- virtual bool HasInitializedMediaLibrary() const { return false; } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(MockRenderProcess); |
-}; |
-} |
- |
-// This callback can be posted on the IO thread and will signal an event when |
-// done. The caller can then wait for this signal to ensure that no |
-// additional tasks remain in the task queue. |
-void WaitCallback(base::WaitableEvent* event) { |
- event->Signal(); |
-} |
- |
-// Class we would be testing. |
-class TestAudioRendererImpl : public AudioRendererImpl { |
- public: |
- explicit TestAudioRendererImpl(media::AudioRendererSink* sink) |
- : AudioRendererImpl(sink) { |
- } |
-}; |
- |
-class AudioRendererImplTest |
- : public ::testing::Test, |
- public IPC::Channel::Listener { |
- public: |
- // IPC::Channel::Listener implementation. |
- virtual bool OnMessageReceived(const IPC::Message& message) { |
- NOTIMPLEMENTED(); |
- return true; |
- } |
- |
- static const int kSize; |
- |
- AudioRendererImplTest() {} |
- virtual ~AudioRendererImplTest() {} |
- |
- virtual void SetUp() { |
- // This part sets up a RenderThread environment to ensure that |
- // RenderThread::current() (<=> TLS pointer) is valid. |
- // Main parts are inspired by the RenderViewFakeResourcesTest. |
- // Note that, the IPC part is not utilized in this test. |
- content::GetContentClient()->set_renderer(&mock_content_renderer_client_); |
- |
- static const char kThreadName[] = "RenderThread"; |
- channel_.reset(new IPC::Channel(kThreadName, |
- IPC::Channel::MODE_SERVER, this)); |
- ASSERT_TRUE(channel_->Connect()); |
- |
- mock_process_.reset(new MockRenderProcess); |
- render_thread_ = new RenderThreadImpl(kThreadName); |
- |
- // Setup expectations for initialization. |
- decoder_ = new media::MockAudioDecoder(); |
- |
- EXPECT_CALL(*decoder_, bits_per_channel()) |
- .WillRepeatedly(Return(16)); |
- EXPECT_CALL(*decoder_, channel_layout()) |
- .WillRepeatedly(Return(CHANNEL_LAYOUT_MONO)); |
- EXPECT_CALL(*decoder_, samples_per_second()) |
- .WillRepeatedly(Return(44100)); |
- |
- // Create a sink for the audio renderer. |
- scoped_refptr<media::AudioRendererSink> default_sink = |
- new AudioDevice(); |
- |
- // Create and initialize the audio renderer. |
- renderer_ = new TestAudioRendererImpl(default_sink.get()); |
- renderer_->Initialize(decoder_, |
- media::NewExpectedStatusCB(media::PIPELINE_OK), |
- NewUnderflowClosure(), NewTimeClosure()); |
- |
- // We need an event to verify that all tasks are done before leaving |
- // our tests. |
- event_.reset(new base::WaitableEvent(false, false)); |
- } |
- |
- virtual void TearDown() { |
- mock_process_.reset(); |
- } |
- |
- MOCK_METHOD0(OnUnderflow, void()); |
- |
- base::Closure NewUnderflowClosure() { |
- return base::Bind(&AudioRendererImplTest::OnUnderflow, |
- base::Unretained(this)); |
- } |
- |
- void OnTimeCallback( |
- base::TimeDelta current_time, base::TimeDelta max_time) { |
- CHECK(current_time <= max_time); |
- } |
- |
- media::AudioRenderer::TimeCB NewTimeClosure() { |
- return base::Bind(&AudioRendererImplTest::OnTimeCallback, |
- base::Unretained(this)); |
- } |
- |
- protected: |
- // Posts a final task to the IO message loop and waits for completion. |
- void WaitForIOThreadCompletion() { |
- ChildProcess::current()->io_message_loop()->PostTask( |
- FROM_HERE, base::Bind(&WaitCallback, base::Unretained(event_.get()))); |
- EXPECT_TRUE(event_->TimedWait( |
- base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms()))); |
- } |
- |
- MessageLoopForIO message_loop_; |
- content::MockContentRendererClient mock_content_renderer_client_; |
- scoped_ptr<IPC::Channel> channel_; |
- RenderThreadImpl* render_thread_; // owned by mock_process_ |
- scoped_ptr<MockRenderProcess> mock_process_; |
- scoped_refptr<media::MockAudioDecoder> decoder_; |
- scoped_refptr<AudioRendererImpl> renderer_; |
- scoped_ptr<base::WaitableEvent> event_; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest); |
-}; |
- |
-const int AudioRendererImplTest::kSize = 1024; |
- |
-TEST_F(AudioRendererImplTest, SetPlaybackRate) { |
- // Execute SetPlaybackRate() codepath by toggling play/pause. |
- // These methods will be called on the pipeline thread but calling from |
- // here is fine for this test. Tasks will be posted internally on |
- // the IO thread. |
- renderer_->SetPlaybackRate(0.0f); |
- renderer_->SetPlaybackRate(1.0f); |
- renderer_->SetPlaybackRate(0.0f); |
- |
- renderer_->Stop(media::NewExpectedClosure()); |
- WaitForIOThreadCompletion(); |
-} |
- |
-TEST_F(AudioRendererImplTest, SetVolume) { |
- // Execute SetVolume() codepath. |
- // This method will be called on the pipeline thread IRL. |
- // Tasks will be posted internally on the IO thread. |
- renderer_->SetVolume(0.5f); |
- |
- renderer_->Stop(media::NewExpectedClosure()); |
- WaitForIOThreadCompletion(); |
-} |
- |
-TEST_F(AudioRendererImplTest, UpdateEarliestEndTime) { |
- renderer_->SetPlaybackRate(1.0f); |
- WaitForIOThreadCompletion(); |
- base::Time time_now = base::Time(); // Null time by default. |
- renderer_->set_earliest_end_time(time_now); |
- renderer_->UpdateEarliestEndTime(renderer_->bytes_per_second(), |
- base::TimeDelta::FromMilliseconds(100), |
- time_now); |
- int time_delta = (renderer_->earliest_end_time() - time_now).InMilliseconds(); |
- EXPECT_EQ(1100, time_delta); |
- renderer_->Stop(media::NewExpectedClosure()); |
- WaitForIOThreadCompletion(); |
-} |