OLD | NEW |
---|---|
1 // Copyright (c) 2011 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "content/browser/browser_thread_impl.h" | 10 #include "content/browser/browser_thread_impl.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
46 | 46 |
47 StreamDeviceInfoArray devices_; | 47 StreamDeviceInfoArray devices_; |
48 | 48 |
49 private: | 49 private: |
50 DISALLOW_COPY_AND_ASSIGN(MockAudioInputDeviceManagerListener); | 50 DISALLOW_COPY_AND_ASSIGN(MockAudioInputDeviceManagerListener); |
51 }; | 51 }; |
52 | 52 |
53 class MockAudioInputDeviceManagerEventHandler | 53 class MockAudioInputDeviceManagerEventHandler |
54 : public AudioInputDeviceManagerEventHandler { | 54 : public AudioInputDeviceManagerEventHandler { |
55 public: | 55 public: |
56 MockAudioInputDeviceManagerEventHandler() {} | 56 MockAudioInputDeviceManagerEventHandler(MessageLoop* message_loop) |
57 : message_loop_(message_loop) {} | |
57 virtual ~MockAudioInputDeviceManagerEventHandler() {} | 58 virtual ~MockAudioInputDeviceManagerEventHandler() {} |
58 | 59 |
59 MOCK_METHOD2(OnDeviceStarted, void(int, const std::string&)); | 60 MOCK_METHOD2(DeviceStarted, void(int, const std::string&)); |
60 MOCK_METHOD1(OnDeviceStopped, void(int)); | 61 MOCK_METHOD1(DeviceStopped, void(int)); |
62 | |
63 virtual void OnDeviceStarted(int session_id, | |
64 const std::string& device_id) { | |
65 message_loop_->PostTask( | |
66 FROM_HERE, base::Bind( | |
67 &MockAudioInputDeviceManagerEventHandler::DeviceStarted, | |
68 base::Unretained(this), session_id, device_id)); | |
69 } | |
70 | |
71 virtual void OnDeviceStopped(int session_id) { | |
72 message_loop_->PostTask( | |
73 FROM_HERE, base::Bind( | |
74 &MockAudioInputDeviceManagerEventHandler::DeviceStopped, | |
75 base::Unretained(this), session_id)); | |
76 } | |
61 | 77 |
62 private: | 78 private: |
79 MessageLoop* message_loop_; | |
63 DISALLOW_COPY_AND_ASSIGN(MockAudioInputDeviceManagerEventHandler); | 80 DISALLOW_COPY_AND_ASSIGN(MockAudioInputDeviceManagerEventHandler); |
64 }; | 81 }; |
65 | 82 |
66 // Returns true if machine has audio input device, else returns false. | 83 // Returns true if machine has audio input device, else returns false. |
67 static bool CanRunAudioInputDeviceTests() { | 84 static bool CanRunAudioInputDeviceTests() { |
68 AudioManager* audio_manager = AudioManager::GetAudioManager(); | 85 AudioManager* audio_manager = AudioManager::GetAudioManager(); |
69 if (!audio_manager) | 86 if (!audio_manager) |
70 return false; | 87 return false; |
71 | 88 |
72 return audio_manager->HasAudioInputDevices(); | 89 return audio_manager->HasAudioInputDevices(); |
(...skipping 18 matching lines...) Expand all Loading... | |
91 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, | 108 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, |
92 message_loop_.get())); | 109 message_loop_.get())); |
93 manager_.reset(new media_stream::AudioInputDeviceManager()); | 110 manager_.reset(new media_stream::AudioInputDeviceManager()); |
94 audio_input_listener_.reset(new MockAudioInputDeviceManagerListener()); | 111 audio_input_listener_.reset(new MockAudioInputDeviceManagerListener()); |
95 manager_->Register(audio_input_listener_.get()); | 112 manager_->Register(audio_input_listener_.get()); |
96 | 113 |
97 // Get the enumerated device list from the AudioInputDeviceManager. | 114 // Get the enumerated device list from the AudioInputDeviceManager. |
98 manager_->EnumerateDevices(); | 115 manager_->EnumerateDevices(); |
99 EXPECT_CALL(*audio_input_listener_, DevicesEnumerated(_)) | 116 EXPECT_CALL(*audio_input_listener_, DevicesEnumerated(_)) |
100 .Times(1); | 117 .Times(1); |
101 // Sync up the threads to make sure we get the list. | 118 // Wait for the callback. |
henrika (OOO until Aug 14)
2011/11/24 15:22:26
As I've understand it all comments but the first i
no longer working on chromium
2011/11/24 16:00:42
Done.
| |
102 SyncWithAudioInputDeviceManagerThread(); | 119 message_loop_->RunAllPending(); |
103 } | 120 } |
104 | 121 |
105 virtual void TearDown() { | 122 virtual void TearDown() { |
106 manager_->Unregister(); | 123 manager_->Unregister(); |
107 io_thread_.reset(); | 124 io_thread_.reset(); |
108 } | 125 } |
109 | 126 |
110 // Called on the AudioInputDeviceManager thread. | |
111 static void PostQuitMessageLoop(MessageLoop* message_loop) { | |
112 message_loop->PostTask(FROM_HERE, new MessageLoop::QuitTask()); | |
113 } | |
114 | |
115 // Called on the main thread. | |
116 static void PostQuitOnAudioInputDeviceManagerThread( | |
117 MessageLoop* message_loop, AudioInputDeviceManager* manager) { | |
118 manager->message_loop()->PostTask( | |
119 FROM_HERE, base::Bind(&PostQuitMessageLoop, message_loop)); | |
120 } | |
121 | |
122 // SyncWithAudioInputDeviceManagerThread() waits until all pending tasks on | |
123 // the audio_input_device_manager thread are executed while also processing | |
124 // pending task in message_loop_ on the current thread. | |
125 void SyncWithAudioInputDeviceManagerThread() { | |
126 message_loop_->PostTask( | |
127 FROM_HERE, | |
128 base::Bind(&PostQuitOnAudioInputDeviceManagerThread, | |
129 message_loop_.get(), | |
130 manager_.get())); | |
131 message_loop_->Run(); | |
132 } | |
133 scoped_ptr<MessageLoop> message_loop_; | 127 scoped_ptr<MessageLoop> message_loop_; |
134 scoped_ptr<BrowserThreadImpl> io_thread_; | 128 scoped_ptr<BrowserThreadImpl> io_thread_; |
135 scoped_ptr<AudioInputDeviceManager> manager_; | 129 scoped_ptr<AudioInputDeviceManager> manager_; |
136 scoped_ptr<MockAudioInputDeviceManagerListener> audio_input_listener_; | 130 scoped_ptr<MockAudioInputDeviceManagerListener> audio_input_listener_; |
137 | 131 |
138 private: | 132 private: |
139 DISALLOW_COPY_AND_ASSIGN(AudioInputDeviceManagerTest); | 133 DISALLOW_COPY_AND_ASSIGN(AudioInputDeviceManagerTest); |
140 }; | 134 }; |
141 | 135 |
142 // Test the devices can be opened and closed. | 136 // Test the devices can be opened and closed. |
henrika (OOO until Aug 14)
2011/11/24 15:22:26
Tests that...
no longer working on chromium
2011/11/24 16:00:42
Done.
| |
143 TEST_F(AudioInputDeviceManagerTest, OpenAndCloseDevice) { | 137 TEST_F(AudioInputDeviceManagerTest, OpenAndCloseDevice) { |
144 if (!CanRunAudioInputDeviceTests()) | 138 if (!CanRunAudioInputDeviceTests()) |
145 return; | 139 return; |
146 InSequence s; | 140 InSequence s; |
147 | 141 |
148 for (StreamDeviceInfoArray::const_iterator iter = | 142 for (StreamDeviceInfoArray::const_iterator iter = |
149 audio_input_listener_->devices_.begin(); | 143 audio_input_listener_->devices_.begin(); |
150 iter != audio_input_listener_->devices_.end(); ++iter) { | 144 iter != audio_input_listener_->devices_.end(); ++iter) { |
151 // Open/close the devices. | 145 // Open/close the devices. |
152 int session_id = manager_->Open(*iter); | 146 int session_id = manager_->Open(*iter); |
153 manager_->Close(session_id); | 147 manager_->Close(session_id); |
154 | 148 |
155 // Expected mock call with expected return value. | 149 // Expected mock call with expected return value. |
156 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, session_id)) | 150 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, session_id)) |
157 .Times(1); | 151 .Times(1); |
158 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, session_id)) | 152 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, session_id)) |
159 .Times(1); | 153 .Times(1); |
160 SyncWithAudioInputDeviceManagerThread(); | 154 // Wait for the callback. |
155 message_loop_->RunAllPending(); | |
161 } | 156 } |
162 } | 157 } |
163 | 158 |
164 // Open multiple devices at one time and close them later. | 159 // Open multiple devices at one time and close them later. |
165 TEST_F(AudioInputDeviceManagerTest, OpenMultipleDevices) { | 160 TEST_F(AudioInputDeviceManagerTest, OpenMultipleDevices) { |
166 if (!CanRunAudioInputDeviceTests()) | 161 if (!CanRunAudioInputDeviceTests()) |
167 return; | 162 return; |
168 InSequence s; | 163 InSequence s; |
169 | 164 |
170 int index = 0; | 165 int index = 0; |
171 const int kDeviceSize = audio_input_listener_->devices_.size(); | 166 const int kDeviceSize = audio_input_listener_->devices_.size(); |
172 scoped_array<int> session_id(new int[kDeviceSize]); | 167 scoped_array<int> session_id(new int[kDeviceSize]); |
173 | 168 |
174 // Open the devices in a loop. | 169 // Open the devices in a loop. |
175 for (StreamDeviceInfoArray::const_iterator iter = | 170 for (StreamDeviceInfoArray::const_iterator iter = |
176 audio_input_listener_->devices_.begin(); | 171 audio_input_listener_->devices_.begin(); |
177 iter != audio_input_listener_->devices_.end(); ++iter, ++index) { | 172 iter != audio_input_listener_->devices_.end(); ++iter, ++index) { |
178 // Open the devices. | 173 // Open the devices. |
179 session_id[index] = manager_->Open(*iter); | 174 session_id[index] = manager_->Open(*iter); |
180 | 175 |
181 // Expected mock call with expected return value. | 176 // Expected mock call with expected return value. |
182 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, | 177 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, |
183 session_id[index])) | 178 session_id[index])) |
184 .Times(1); | 179 .Times(1); |
185 SyncWithAudioInputDeviceManagerThread(); | 180 // Wait for the callback. |
181 message_loop_->RunAllPending(); | |
186 } | 182 } |
187 | 183 |
188 // Check if the session_ids are unique | 184 // Check if the session_ids are unique |
189 for (int i = 0; i < kDeviceSize - 1; ++i) { | 185 for (int i = 0; i < kDeviceSize - 1; ++i) { |
190 for (int k = i+1; k < kDeviceSize; ++k) { | 186 for (int k = i+1; k < kDeviceSize; ++k) { |
191 EXPECT_TRUE(session_id[i] != session_id[k]); | 187 EXPECT_TRUE(session_id[i] != session_id[k]); |
192 } | 188 } |
193 } | 189 } |
194 | 190 |
195 for (int i = 0; i < kDeviceSize; ++i) { | 191 for (int i = 0; i < kDeviceSize; ++i) { |
196 // Close the devices. | 192 // Close the devices. |
197 manager_->Close(session_id[i]); | 193 manager_->Close(session_id[i]); |
198 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, session_id[i])) | 194 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, session_id[i])) |
199 .Times(1); | 195 .Times(1); |
200 SyncWithAudioInputDeviceManagerThread(); | 196 // Wait for the callback. |
197 message_loop_->RunAllPending(); | |
201 } | 198 } |
202 } | 199 } |
203 | 200 |
204 // Try to open a non-existing device. | 201 // Try to open a non-existing device. |
205 TEST_F(AudioInputDeviceManagerTest, OpenNotExistingDevice) { | 202 TEST_F(AudioInputDeviceManagerTest, OpenNotExistingDevice) { |
206 if (!CanRunAudioInputDeviceTests()) | 203 if (!CanRunAudioInputDeviceTests()) |
207 return; | 204 return; |
208 InSequence s; | 205 InSequence s; |
209 | 206 |
210 MediaStreamType stream_type = kAudioCapture; | 207 MediaStreamType stream_type = kAudioCapture; |
211 std::string device_name("device_doesnt_exist"); | 208 std::string device_name("device_doesnt_exist"); |
212 std::string device_id("id_doesnt_exist"); | 209 std::string device_id("id_doesnt_exist"); |
213 StreamDeviceInfo dummy_device(stream_type, device_name, device_id, false); | 210 StreamDeviceInfo dummy_device(stream_type, device_name, device_id, false); |
214 | 211 |
215 // This should fail and trigger error code 'kDeviceNotAvailable'. | 212 // This should still pass. |
henrika (OOO until Aug 14)
2011/11/24 15:22:26
Comment does not add much value to the test descri
no longer working on chromium
2011/11/24 16:00:42
Done.
| |
216 int session_id = manager_->Open(dummy_device); | 213 int session_id = manager_->Open(dummy_device); |
217 | 214 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, session_id)) |
218 EXPECT_CALL(*audio_input_listener_, Error(_, session_id, kDeviceNotAvailable)) | |
219 .Times(1); | 215 .Times(1); |
220 SyncWithAudioInputDeviceManagerThread(); | 216 // Wait for the callback. |
221 } | 217 message_loop_->RunAllPending(); |
222 | |
223 // Try open an invalid device. | |
224 TEST_F(AudioInputDeviceManagerTest, OpenInvalidDevice) { | |
225 if (!CanRunAudioInputDeviceTests()) | |
226 return; | |
227 InSequence s; | |
228 | |
229 MediaStreamType stream_type = kAudioCapture; | |
230 std::string device_name; | |
231 std::string device_id; | |
232 device_name = audio_input_listener_->devices_.front().name; | |
233 device_id = "wrong_id"; | |
234 StreamDeviceInfo invalid_device(stream_type, device_name, device_id, false); | |
235 | |
236 // This should fail and trigger error code 'kDeviceNotAvailable'. | |
237 int session_id = manager_->Open(invalid_device); | |
238 | |
239 EXPECT_CALL(*audio_input_listener_, Error(_, session_id, kDeviceNotAvailable)) | |
240 .Times(1); | |
241 SyncWithAudioInputDeviceManagerThread(); | |
242 } | 218 } |
243 | 219 |
244 // Opening default device twice should work. | 220 // Opening default device twice should work. |
245 TEST_F(AudioInputDeviceManagerTest, OpenDeviceTwice) { | 221 TEST_F(AudioInputDeviceManagerTest, OpenDeviceTwice) { |
246 if (!CanRunAudioInputDeviceTests()) | 222 if (!CanRunAudioInputDeviceTests()) |
247 return; | 223 return; |
248 InSequence s; | 224 InSequence s; |
249 | 225 |
250 // Open/close the default device twice. | 226 // Open/close the default device twice. |
251 int first_session_id = manager_->Open( | 227 int first_session_id = manager_->Open( |
252 audio_input_listener_->devices_.front()); | 228 audio_input_listener_->devices_.front()); |
253 int second_session_id = manager_->Open( | 229 int second_session_id = manager_->Open( |
254 audio_input_listener_->devices_.front()); | 230 audio_input_listener_->devices_.front()); |
255 manager_->Close(first_session_id); | 231 manager_->Close(first_session_id); |
256 manager_->Close(second_session_id); | 232 manager_->Close(second_session_id); |
257 | 233 |
258 // Expected mock calls with expected return values. | 234 // Expected mock calls with expected return values. |
259 EXPECT_NE(first_session_id, second_session_id); | 235 EXPECT_NE(first_session_id, second_session_id); |
260 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, first_session_id)) | 236 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, first_session_id)) |
261 .Times(1); | 237 .Times(1); |
262 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, second_session_id)) | 238 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, second_session_id)) |
263 .Times(1); | 239 .Times(1); |
264 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, first_session_id)) | 240 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, first_session_id)) |
265 .Times(1); | 241 .Times(1); |
266 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, second_session_id)) | 242 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, second_session_id)) |
267 .Times(1); | 243 .Times(1); |
268 SyncWithAudioInputDeviceManagerThread(); | 244 // Wait for the callback. |
245 message_loop_->RunAllPending(); | |
269 } | 246 } |
270 | 247 |
271 // Test the Start and Close function after opening the devices. | 248 // Test the Start and Close function after opening the devices. |
272 TEST_F(AudioInputDeviceManagerTest, StartAndStopDevice) { | 249 TEST_F(AudioInputDeviceManagerTest, StartAndStopSession) { |
273 if (!CanRunAudioInputDeviceTests()) | 250 if (!CanRunAudioInputDeviceTests()) |
274 return; | 251 return; |
275 InSequence s; | 252 InSequence s; |
276 | 253 |
277 int index = 0; | 254 int index = 0; |
278 const int kDeviceSize = audio_input_listener_->devices_.size(); | 255 const int kDeviceSize = audio_input_listener_->devices_.size(); |
279 scoped_array<int> session_id(new int[kDeviceSize]); | 256 scoped_array<int> session_id(new int[kDeviceSize]); |
280 | 257 |
281 // Create the EventHandler for the sessions. | 258 // Create the EventHandler for the sessions. |
282 scoped_ptr<MockAudioInputDeviceManagerEventHandler> | 259 scoped_ptr<MockAudioInputDeviceManagerEventHandler> |
283 audio_input_event_handler(new MockAudioInputDeviceManagerEventHandler()); | 260 audio_input_event_handler( |
261 new MockAudioInputDeviceManagerEventHandler(message_loop_.get())); | |
284 | 262 |
285 // Loop through the devices, and Open/start/stop/close each device. | 263 // Loop through the devices, and Open/start/stop/close each device. |
286 for (StreamDeviceInfoArray::const_iterator iter = | 264 for (StreamDeviceInfoArray::const_iterator iter = |
287 audio_input_listener_->devices_.begin(); | 265 audio_input_listener_->devices_.begin(); |
288 iter != audio_input_listener_->devices_.end(); ++iter, ++index) { | 266 iter != audio_input_listener_->devices_.end(); ++iter, ++index) { |
289 // Note that no stop device notification for Event Handler as we have | 267 // Note that no stop device notification for Event Handler as we have |
290 // stopped the device before calling close. | 268 // stopped the device before calling close. |
291 // Open/start/stop/close the device. | 269 // Open/start/stop/close the device. |
292 session_id[index] = manager_->Open(*iter); | 270 session_id[index] = manager_->Open(*iter); |
293 manager_->Start(session_id[index], audio_input_event_handler.get()); | |
294 manager_->Stop(session_id[index]); | |
295 manager_->Close(session_id[index]); | |
296 | |
297 // Expected mock calls with expected return values. | |
298 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, | 271 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, |
299 session_id[index])) | 272 session_id[index])) |
300 .Times(1); | 273 .Times(1); |
274 message_loop_->RunAllPending(); | |
275 | |
276 manager_->Start(session_id[index], audio_input_event_handler.get()); | |
301 EXPECT_CALL(*audio_input_event_handler, | 277 EXPECT_CALL(*audio_input_event_handler, |
302 OnDeviceStarted(session_id[index], iter->device_id)) | 278 DeviceStarted(session_id[index], iter->device_id)) |
303 .Times(1); | 279 .Times(1); |
280 message_loop_->RunAllPending(); | |
281 | |
282 manager_->Stop(session_id[index]); | |
283 manager_->Close(session_id[index]); | |
304 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, | 284 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, |
305 session_id[index])) | 285 session_id[index])) |
306 .Times(1); | 286 .Times(1); |
307 SyncWithAudioInputDeviceManagerThread(); | 287 message_loop_->RunAllPending(); |
308 } | 288 } |
309 } | 289 } |
310 | 290 |
311 // Test the behavior of calling Close without calling Stop. | 291 // Test the behavior of calling Close without calling Stop. |
312 TEST_F(AudioInputDeviceManagerTest, CloseWithoutStopDevice) { | 292 TEST_F(AudioInputDeviceManagerTest, CloseWithoutStopSession) { |
313 if (!CanRunAudioInputDeviceTests()) | 293 if (!CanRunAudioInputDeviceTests()) |
314 return; | 294 return; |
315 InSequence s; | 295 InSequence s; |
316 | 296 |
317 int index = 0; | 297 int index = 0; |
318 const int kDeviceSize = audio_input_listener_->devices_.size(); | 298 const int kDeviceSize = audio_input_listener_->devices_.size(); |
319 scoped_array<int> session_id(new int[kDeviceSize]); | 299 scoped_array<int> session_id(new int[kDeviceSize]); |
320 | 300 |
321 // Create the EventHandlers for the sessions. | 301 // Create the EventHandlers for the sessions. |
322 scoped_ptr<MockAudioInputDeviceManagerEventHandler> | 302 scoped_ptr<MockAudioInputDeviceManagerEventHandler> |
323 audio_input_event_handler(new MockAudioInputDeviceManagerEventHandler()); | 303 audio_input_event_handler( |
304 new MockAudioInputDeviceManagerEventHandler(message_loop_.get())); | |
324 | 305 |
325 // Loop through the devices, and open/start/close the devices. | 306 // Loop through the devices, and open/start/close the devices. |
326 // Note that we do not call stop. | 307 // Note that we do not call stop. |
327 for (StreamDeviceInfoArray::const_iterator iter = | 308 for (StreamDeviceInfoArray::const_iterator iter = |
328 audio_input_listener_->devices_.begin(); | 309 audio_input_listener_->devices_.begin(); |
329 iter != audio_input_listener_->devices_.end(); ++iter, ++index) { | 310 iter != audio_input_listener_->devices_.end(); ++iter, ++index) { |
330 // Open/start/close the device. | 311 // Open/start/close the device. |
331 session_id[index] = manager_->Open(*iter); | 312 session_id[index] = manager_->Open(*iter); |
332 manager_->Start(session_id[index], audio_input_event_handler.get()); | |
333 manager_->Close(session_id[index]); | |
334 | |
335 // Expected mock calls with expected return values. | |
336 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, | 313 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, |
337 session_id[index])) | 314 session_id[index])) |
338 .Times(1); | 315 .Times(1); |
316 message_loop_->RunAllPending(); | |
317 | |
318 manager_->Start(session_id[index], audio_input_event_handler.get()); | |
339 EXPECT_CALL(*audio_input_event_handler, | 319 EXPECT_CALL(*audio_input_event_handler, |
340 OnDeviceStarted(session_id[index], iter->device_id)) | 320 DeviceStarted(session_id[index], iter->device_id)) |
341 .Times(1); | 321 .Times(1); |
322 message_loop_->RunAllPending(); | |
323 | |
342 // Event Handler should get a stop device notification as no stop is called | 324 // Event Handler should get a stop device notification as no stop is called |
343 // before closing the device. | 325 // before closing the device. |
326 manager_->Close(session_id[index]); | |
344 EXPECT_CALL(*audio_input_event_handler, | 327 EXPECT_CALL(*audio_input_event_handler, |
345 OnDeviceStopped(session_id[index])) | 328 DeviceStopped(session_id[index])) |
346 .Times(1); | 329 .Times(1); |
347 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, | 330 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, |
348 session_id[index])) | 331 session_id[index])) |
349 .Times(1); | 332 .Times(1); |
350 SyncWithAudioInputDeviceManagerThread(); | 333 message_loop_->RunAllPending(); |
351 } | 334 } |
352 } | 335 } |
353 | 336 |
354 // Should be able to start the default device twice. | 337 // Should be able to start the same device twice. |
355 TEST_F(AudioInputDeviceManagerTest, StartDeviceTwice) { | 338 TEST_F(AudioInputDeviceManagerTest, StartDeviceTwice) { |
356 if (!CanRunAudioInputDeviceTests()) | 339 if (!CanRunAudioInputDeviceTests()) |
357 return; | 340 return; |
358 InSequence s; | 341 InSequence s; |
359 | 342 |
360 // Create one EventHandler for each session. | 343 // Create one EventHandler for each session. |
361 scoped_ptr<MockAudioInputDeviceManagerEventHandler> | 344 scoped_ptr<MockAudioInputDeviceManagerEventHandler> |
362 first_audio_input_event_handler( | 345 first_event_handler( |
363 new MockAudioInputDeviceManagerEventHandler()); | 346 new MockAudioInputDeviceManagerEventHandler(message_loop_.get())); |
364 scoped_ptr<MockAudioInputDeviceManagerEventHandler> | 347 scoped_ptr<MockAudioInputDeviceManagerEventHandler> |
365 second_audio_input_event_handler( | 348 second_event_handler( |
366 new MockAudioInputDeviceManagerEventHandler()); | 349 new MockAudioInputDeviceManagerEventHandler(message_loop_.get())); |
367 | 350 |
368 // Open the default device twice. | 351 // Open the default device twice. |
369 StreamDeviceInfoArray::const_iterator iter = | 352 StreamDeviceInfoArray::const_iterator iter = |
370 audio_input_listener_->devices_.begin(); | 353 audio_input_listener_->devices_.begin(); |
371 int first_session_id = manager_->Open(*iter); | 354 int first_session_id = manager_->Open(*iter); |
372 int second_session_id = manager_->Open(*iter); | 355 int second_session_id = manager_->Open(*iter); |
373 | |
374 // Start/stop/close the default device twice. | |
375 manager_->Start(first_session_id, first_audio_input_event_handler.get()); | |
376 manager_->Start(second_session_id, second_audio_input_event_handler.get()); | |
377 manager_->Stop(first_session_id); | |
378 manager_->Stop(second_session_id); | |
379 manager_->Close(first_session_id); | |
380 manager_->Close(second_session_id); | |
381 | |
382 // Expected mock calls with expected return values. | |
383 EXPECT_NE(first_session_id, second_session_id); | 356 EXPECT_NE(first_session_id, second_session_id); |
384 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, first_session_id)) | 357 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, first_session_id)) |
385 .Times(1); | 358 .Times(1); |
386 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, second_session_id)) | 359 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, second_session_id)) |
387 .Times(1); | 360 .Times(1); |
388 EXPECT_CALL(*first_audio_input_event_handler, | 361 message_loop_->RunAllPending(); |
389 OnDeviceStarted(first_session_id, | 362 |
390 AudioManagerBase::kDefaultDeviceId)) | 363 // Start/stop/close the default device twice. |
364 manager_->Start(first_session_id, first_event_handler.get()); | |
365 manager_->Start(second_session_id, second_event_handler.get()); | |
366 EXPECT_CALL(*first_event_handler, | |
367 DeviceStarted(first_session_id, | |
368 AudioManagerBase::kDefaultDeviceId)) | |
391 .Times(1); | 369 .Times(1); |
392 EXPECT_CALL(*second_audio_input_event_handler, | 370 EXPECT_CALL(*second_event_handler, |
393 OnDeviceStarted(second_session_id, | 371 DeviceStarted(second_session_id, |
394 AudioManagerBase::kDefaultDeviceId)) | 372 AudioManagerBase::kDefaultDeviceId)) |
395 .Times(1); | 373 .Times(1); |
374 message_loop_->RunAllPending(); | |
375 | |
376 manager_->Stop(first_session_id); | |
377 manager_->Stop(second_session_id); | |
378 manager_->Close(first_session_id); | |
379 manager_->Close(second_session_id); | |
396 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, first_session_id)) | 380 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, first_session_id)) |
397 .Times(1); | 381 .Times(1); |
398 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, second_session_id)) | 382 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, second_session_id)) |
399 .Times(1); | 383 .Times(1); |
400 SyncWithAudioInputDeviceManagerThread(); | 384 message_loop_->RunAllPending(); |
385 } | |
386 | |
387 // Try start a invalid session device. | |
henrika (OOO until Aug 14)
2011/11/24 15:22:26
an
no longer working on chromium
2011/11/24 16:00:42
Done.
| |
388 TEST_F(AudioInputDeviceManagerTest, StartInvalidSession) { | |
389 if (!CanRunAudioInputDeviceTests()) | |
390 return; | |
391 InSequence s; | |
392 | |
393 // Create the EventHandlers for the sessions. | |
394 scoped_ptr<MockAudioInputDeviceManagerEventHandler> | |
395 audio_input_event_handler( | |
396 new MockAudioInputDeviceManagerEventHandler(message_loop_.get())); | |
397 | |
398 // Open the first device. | |
399 StreamDeviceInfoArray::const_iterator iter = | |
400 audio_input_listener_->devices_.begin(); | |
401 int session_id = manager_->Open(*iter); | |
402 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, session_id)) | |
403 .Times(1); | |
404 message_loop_->RunAllPending(); | |
405 | |
406 // Start a non-opened device. | |
407 // This should fail and trigger error code 'kDeviceNotAvailable'. | |
408 int invalid_session_id = session_id + 1; | |
409 manager_->Start(invalid_session_id, audio_input_event_handler.get()); | |
410 EXPECT_CALL(*audio_input_event_handler, | |
411 DeviceStarted(invalid_session_id, | |
412 AudioInputDeviceManager::kInvalidDeviceId)) | |
413 .Times(1); | |
414 message_loop_->RunAllPending(); | |
415 | |
416 manager_->Close(session_id); | |
417 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, session_id)) | |
418 .Times(1); | |
419 message_loop_->RunAllPending(); | |
420 } | |
421 | |
422 // Try start a session twice. | |
henrika (OOO until Aug 14)
2011/11/24 15:22:26
Try to start..
And please add some more about the
no longer working on chromium
2011/11/24 16:00:42
Done.
| |
423 TEST_F(AudioInputDeviceManagerTest, StartSessionTwice) { | |
424 if (!CanRunAudioInputDeviceTests()) | |
425 return; | |
426 InSequence s; | |
427 | |
428 // Create the EventHandlers for the sessions. | |
429 scoped_ptr<MockAudioInputDeviceManagerEventHandler> | |
430 audio_input_event_handler( | |
431 new MockAudioInputDeviceManagerEventHandler(message_loop_.get())); | |
432 | |
433 // Open the first device. | |
434 StreamDeviceInfoArray::const_iterator iter = | |
435 audio_input_listener_->devices_.begin(); | |
436 int session_id = manager_->Open(*iter); | |
437 EXPECT_CALL(*audio_input_listener_, Opened(kAudioCapture, session_id)) | |
438 .Times(1); | |
439 message_loop_->RunAllPending(); | |
440 | |
441 // Start the session, it should succeed. | |
442 manager_->Start(session_id, audio_input_event_handler.get()); | |
443 EXPECT_CALL(*audio_input_event_handler, | |
444 DeviceStarted(session_id, | |
445 AudioManagerBase::kDefaultDeviceId)) | |
446 .Times(1); | |
447 message_loop_->RunAllPending(); | |
448 | |
449 // Start the session for the second time, it should fail. | |
450 manager_->Start(session_id, audio_input_event_handler.get()); | |
451 EXPECT_CALL(*audio_input_event_handler, | |
452 DeviceStarted(session_id, | |
453 AudioInputDeviceManager::kInvalidDeviceId)) | |
454 .Times(1); | |
455 | |
456 manager_->Stop(session_id); | |
457 manager_->Close(session_id); | |
458 EXPECT_CALL(*audio_input_listener_, Closed(kAudioCapture, session_id)) | |
459 .Times(1); | |
460 message_loop_->RunAllPending(); | |
401 } | 461 } |
402 | 462 |
403 } // namespace media_stream | 463 } // namespace media_stream |
OLD | NEW |