Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: chrome/renderer/media/audio_renderer_impl_unittest.cc

Issue 6350001: Replace MockFilterCallback with MockCallback and simplify unit tests. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: forgot some files Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | media/base/composite_filter_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/callback.h"
6 #include "base/process_util.h" 5 #include "base/process_util.h"
7 #include "chrome/common/render_messages.h" 6 #include "chrome/common/render_messages.h"
8 #include "chrome/common/render_messages_params.h" 7 #include "chrome/common/render_messages_params.h"
9 #include "chrome/renderer/media/audio_renderer_impl.h" 8 #include "chrome/renderer/media/audio_renderer_impl.h"
10 #include "media/base/data_buffer.h" 9 #include "media/base/data_buffer.h"
11 #include "media/base/media_format.h" 10 #include "media/base/media_format.h"
11 #include "media/base/mock_callback.h"
12 #include "media/base/mock_filter_host.h" 12 #include "media/base/mock_filter_host.h"
13 #include "media/base/mock_filters.h" 13 #include "media/base/mock_filters.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 using ::testing::ReturnRef; 16 using ::testing::ReturnRef;
17 17
18 class AudioRendererImplTest : public ::testing::Test { 18 class AudioRendererImplTest : public ::testing::Test {
19 public: 19 public:
20 static const int kRouteId = 0; 20 static const int kRouteId = 0;
21 static const int kSize = 1024; 21 static const int kSize = 1024;
22 22
23 AudioRendererImplTest() { 23 AudioRendererImplTest() {
24 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); 24 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO));
25 25
26 // TODO(scherkus): use gmock with AudioMessageFilter to verify 26 // TODO(scherkus): use gmock with AudioMessageFilter to verify
27 // AudioRendererImpl calls or doesn't call Send(). 27 // AudioRendererImpl calls or doesn't call Send().
28 filter_ = new AudioMessageFilter(kRouteId); 28 filter_ = new AudioMessageFilter(kRouteId);
29 filter_->message_loop_ = message_loop_.get(); 29 filter_->message_loop_ = message_loop_.get();
30 30
31 // Create temporary shared memory. 31 // Create temporary shared memory.
32 CHECK(shared_mem_.CreateAnonymous(kSize)); 32 CHECK(shared_mem_.CreateAnonymous(kSize));
33 33
34 // Setup expectations for initialization. 34 // Setup expectations for initialization.
35 EXPECT_CALL(callback_, OnFilterCallback());
36 EXPECT_CALL(callback_, OnCallbackDestroyed());
37 decoder_ = new media::MockAudioDecoder(); 35 decoder_ = new media::MockAudioDecoder();
38 36
39 // Associate media format with decoder 37 // Associate media format with decoder
40 decoder_media_format_.SetAsString(media::MediaFormat::kMimeType, 38 decoder_media_format_.SetAsString(media::MediaFormat::kMimeType,
41 media::mime_type::kUncompressedAudio); 39 media::mime_type::kUncompressedAudio);
42 decoder_media_format_.SetAsInteger(media::MediaFormat::kChannels, 2); 40 decoder_media_format_.SetAsInteger(media::MediaFormat::kChannels, 2);
43 decoder_media_format_.SetAsInteger(media::MediaFormat::kSampleRate, 48000); 41 decoder_media_format_.SetAsInteger(media::MediaFormat::kSampleRate, 48000);
44 decoder_media_format_.SetAsInteger(media::MediaFormat::kSampleBits, 16); 42 decoder_media_format_.SetAsInteger(media::MediaFormat::kSampleBits, 16);
45 EXPECT_CALL(*decoder_, media_format()) 43 EXPECT_CALL(*decoder_, media_format())
46 .WillRepeatedly(ReturnRef(decoder_media_format_)); 44 .WillRepeatedly(ReturnRef(decoder_media_format_));
47 45
48 // Create and initialize audio renderer. 46 // Create and initialize audio renderer.
49 renderer_ = new AudioRendererImpl(filter_); 47 renderer_ = new AudioRendererImpl(filter_);
50 renderer_->set_host(&host_); 48 renderer_->set_host(&host_);
51 renderer_->set_message_loop(message_loop_.get()); 49 renderer_->set_message_loop(message_loop_.get());
52 renderer_->Initialize(decoder_, callback_.NewCallback()); 50 renderer_->Initialize(decoder_, media::NewExpectedCallback());
53 51
54 // Run pending tasks and simulate responding with a created audio stream. 52 // Run pending tasks and simulate responding with a created audio stream.
55 message_loop_->RunAllPending(); 53 message_loop_->RunAllPending();
56 54
57 // Duplicate the shared memory handle so both the test and the callee can 55 // Duplicate the shared memory handle so both the test and the callee can
58 // close their copy. 56 // close their copy.
59 base::SharedMemoryHandle duplicated_handle; 57 base::SharedMemoryHandle duplicated_handle;
60 EXPECT_TRUE(shared_mem_.ShareToProcess(base::GetCurrentProcessHandle(), 58 EXPECT_TRUE(shared_mem_.ShareToProcess(base::GetCurrentProcessHandle(),
61 &duplicated_handle)); 59 &duplicated_handle));
62 60
63 renderer_->OnCreated(duplicated_handle, kSize); 61 renderer_->OnCreated(duplicated_handle, kSize);
64 } 62 }
65 63
66 virtual ~AudioRendererImplTest() { 64 virtual ~AudioRendererImplTest() {
67 } 65 }
68 66
69 protected: 67 protected:
70 // Fixtures. 68 // Fixtures.
71 scoped_ptr<MessageLoop> message_loop_; 69 scoped_ptr<MessageLoop> message_loop_;
72 scoped_refptr<AudioMessageFilter> filter_; 70 scoped_refptr<AudioMessageFilter> filter_;
73 base::SharedMemory shared_mem_; 71 base::SharedMemory shared_mem_;
74 media::MockFilterHost host_; 72 media::MockFilterHost host_;
75 media::MockFilterCallback callback_;
76 media::MockFilterCallback stop_callback_;
77 scoped_refptr<media::MockAudioDecoder> decoder_; 73 scoped_refptr<media::MockAudioDecoder> decoder_;
78 scoped_refptr<AudioRendererImpl> renderer_; 74 scoped_refptr<AudioRendererImpl> renderer_;
79 media::MediaFormat decoder_media_format_; 75 media::MediaFormat decoder_media_format_;
80 76
81 private: 77 private:
82 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest); 78 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest);
83 }; 79 };
84 80
85 TEST_F(AudioRendererImplTest, SetPlaybackRate) { 81 TEST_F(AudioRendererImplTest, SetPlaybackRate) {
86 // Execute SetPlaybackRate() codepath to create an IPC message. 82 // Execute SetPlaybackRate() codepath to create an IPC message.
87 83
88 // Toggle play/pause to generate some IPC messages. 84 // Toggle play/pause to generate some IPC messages.
89 renderer_->SetPlaybackRate(0.0f); 85 renderer_->SetPlaybackRate(0.0f);
90 renderer_->SetPlaybackRate(1.0f); 86 renderer_->SetPlaybackRate(1.0f);
91 renderer_->SetPlaybackRate(0.0f); 87 renderer_->SetPlaybackRate(0.0f);
92 88
93 EXPECT_CALL(stop_callback_, OnFilterCallback()); 89 renderer_->Stop(media::NewExpectedCallback());
94 renderer_->Stop(stop_callback_.NewCallback());
95 message_loop_->RunAllPending(); 90 message_loop_->RunAllPending();
96 } 91 }
97 92
98 TEST_F(AudioRendererImplTest, SetVolume) { 93 TEST_F(AudioRendererImplTest, SetVolume) {
99 // Execute SetVolume() codepath to create an IPC message. 94 // Execute SetVolume() codepath to create an IPC message.
100 renderer_->SetVolume(0.5f); 95 renderer_->SetVolume(0.5f);
101 EXPECT_CALL(stop_callback_, OnFilterCallback()); 96 renderer_->Stop(media::NewExpectedCallback());
102 renderer_->Stop(stop_callback_.NewCallback());
103 message_loop_->RunAllPending(); 97 message_loop_->RunAllPending();
104 } 98 }
105 99
106 TEST_F(AudioRendererImplTest, Stop) { 100 TEST_F(AudioRendererImplTest, Stop) {
107 // Declare some state messages. 101 // Declare some state messages.
108 const ViewMsg_AudioStreamState_Params kError( 102 const ViewMsg_AudioStreamState_Params kError(
109 ViewMsg_AudioStreamState_Params::kError); 103 ViewMsg_AudioStreamState_Params::kError);
110 const ViewMsg_AudioStreamState_Params kPlaying( 104 const ViewMsg_AudioStreamState_Params kPlaying(
111 ViewMsg_AudioStreamState_Params::kPlaying); 105 ViewMsg_AudioStreamState_Params::kPlaying);
112 const ViewMsg_AudioStreamState_Params kPaused( 106 const ViewMsg_AudioStreamState_Params kPaused(
113 ViewMsg_AudioStreamState_Params::kPaused); 107 ViewMsg_AudioStreamState_Params::kPaused);
114 108
115 // Execute Stop() codepath to create an IPC message. 109 // Execute Stop() codepath to create an IPC message.
116 EXPECT_CALL(stop_callback_, OnFilterCallback()); 110 renderer_->Stop(media::NewExpectedCallback());
117 renderer_->Stop(stop_callback_.NewCallback());
118 message_loop_->RunAllPending(); 111 message_loop_->RunAllPending();
119 112
120 // Run AudioMessageFilter::Delegate methods, which can be executed after being 113 // Run AudioMessageFilter::Delegate methods, which can be executed after being
121 // stopped. AudioRendererImpl shouldn't create any messages. 114 // stopped. AudioRendererImpl shouldn't create any messages.
122 renderer_->OnRequestPacket(AudioBuffersState(kSize, 0)); 115 renderer_->OnRequestPacket(AudioBuffersState(kSize, 0));
123 renderer_->OnStateChanged(kError); 116 renderer_->OnStateChanged(kError);
124 renderer_->OnStateChanged(kPlaying); 117 renderer_->OnStateChanged(kPlaying);
125 renderer_->OnStateChanged(kPaused); 118 renderer_->OnStateChanged(kPaused);
126 renderer_->OnCreated(shared_mem_.handle(), kSize); 119 renderer_->OnCreated(shared_mem_.handle(), kSize);
127 renderer_->OnVolume(0.5); 120 renderer_->OnVolume(0.5);
128 121
129 // It's possible that the upstream decoder replies right after being stopped. 122 // It's possible that the upstream decoder replies right after being stopped.
130 scoped_refptr<media::Buffer> buffer(new media::DataBuffer(kSize)); 123 scoped_refptr<media::Buffer> buffer(new media::DataBuffer(kSize));
131 renderer_->ConsumeAudioSamples(buffer); 124 renderer_->ConsumeAudioSamples(buffer);
132 } 125 }
133 126
134 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_SetPlaybackRate) { 127 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_SetPlaybackRate) {
135 // Kill the message loop and verify SetPlaybackRate() still works. 128 // Kill the message loop and verify SetPlaybackRate() still works.
136 message_loop_.reset(); 129 message_loop_.reset();
137 renderer_->SetPlaybackRate(0.0f); 130 renderer_->SetPlaybackRate(0.0f);
138 renderer_->SetPlaybackRate(1.0f); 131 renderer_->SetPlaybackRate(1.0f);
139 renderer_->SetPlaybackRate(0.0f); 132 renderer_->SetPlaybackRate(0.0f);
140 EXPECT_CALL(stop_callback_, OnFilterCallback()); 133 renderer_->Stop(media::NewExpectedCallback());
141 renderer_->Stop(stop_callback_.NewCallback());
142 } 134 }
143 135
144 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_SetVolume) { 136 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_SetVolume) {
145 // Kill the message loop and verify SetVolume() still works. 137 // Kill the message loop and verify SetVolume() still works.
146 message_loop_.reset(); 138 message_loop_.reset();
147 renderer_->SetVolume(0.5f); 139 renderer_->SetVolume(0.5f);
148 EXPECT_CALL(stop_callback_, OnFilterCallback()); 140 renderer_->Stop(media::NewExpectedCallback());
149 renderer_->Stop(stop_callback_.NewCallback());
150 } 141 }
151 142
152 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_ConsumeAudioSamples) { 143 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_ConsumeAudioSamples) {
153 // Kill the message loop and verify OnReadComplete() still works. 144 // Kill the message loop and verify OnReadComplete() still works.
154 message_loop_.reset(); 145 message_loop_.reset();
155 scoped_refptr<media::Buffer> buffer(new media::DataBuffer(kSize)); 146 scoped_refptr<media::Buffer> buffer(new media::DataBuffer(kSize));
156 renderer_->ConsumeAudioSamples(buffer); 147 renderer_->ConsumeAudioSamples(buffer);
157 EXPECT_CALL(stop_callback_, OnFilterCallback()); 148 renderer_->Stop(media::NewExpectedCallback());
158 renderer_->Stop(stop_callback_.NewCallback());
159 } 149 }
OLDNEW
« no previous file with comments | « no previous file | media/base/composite_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698