| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 MOCK_METHOD2(DevicesEnumerated, void(MediaStreamType, | 34 MOCK_METHOD2(DevicesEnumerated, void(MediaStreamType, |
| 35 const StreamDeviceInfoArray&)); | 35 const StreamDeviceInfoArray&)); |
| 36 MOCK_METHOD3(Error, void(MediaStreamType, int, MediaStreamProviderError)); | 36 MOCK_METHOD3(Error, void(MediaStreamType, int, MediaStreamProviderError)); |
| 37 | 37 |
| 38 StreamDeviceInfoArray devices_; | 38 StreamDeviceInfoArray devices_; |
| 39 | 39 |
| 40 private: | 40 private: |
| 41 DISALLOW_COPY_AND_ASSIGN(MockAudioInputDeviceManagerListener); | 41 DISALLOW_COPY_AND_ASSIGN(MockAudioInputDeviceManagerListener); |
| 42 }; | 42 }; |
| 43 | 43 |
| 44 class AudioInputDeviceManagerTest : public testing::Test { | 44 // TODO(henrika): there are special restrictions for Android since |
| 45 // AudioInputDeviceManager::Open() must be called on the audio thread. |
| 46 // This test suite must be modified to run on Android. |
| 47 #if defined(OS_ANDROID) |
| 48 #define MAYBE_AudioInputDeviceManagerTest DISABLED_AudioInputDeviceManagerTest |
| 49 #else |
| 50 #define MAYBE_AudioInputDeviceManagerTest AudioInputDeviceManagerTest |
| 51 #endif |
| 52 |
| 53 class MAYBE_AudioInputDeviceManagerTest : public testing::Test { |
| 45 public: | 54 public: |
| 46 AudioInputDeviceManagerTest() {} | 55 MAYBE_AudioInputDeviceManagerTest() {} |
| 47 | 56 |
| 48 // Returns true iff machine has an audio input device. | 57 // Returns true iff machine has an audio input device. |
| 49 bool CanRunAudioInputDeviceTests() { | 58 bool CanRunAudioInputDeviceTests() { |
| 50 return audio_manager_->HasAudioInputDevices(); | 59 return audio_manager_->HasAudioInputDevices(); |
| 51 } | 60 } |
| 52 | 61 |
| 53 protected: | 62 protected: |
| 54 virtual void SetUp() OVERRIDE { | 63 virtual void SetUp() OVERRIDE { |
| 55 // The test must run on Browser::IO. | 64 // The test must run on Browser::IO. |
| 56 message_loop_.reset(new base::MessageLoopForIO); | 65 message_loop_.reset(new base::MessageLoopForIO); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 85 } | 94 } |
| 86 | 95 |
| 87 scoped_ptr<base::MessageLoop> message_loop_; | 96 scoped_ptr<base::MessageLoop> message_loop_; |
| 88 scoped_ptr<BrowserThreadImpl> io_thread_; | 97 scoped_ptr<BrowserThreadImpl> io_thread_; |
| 89 scoped_refptr<AudioInputDeviceManager> manager_; | 98 scoped_refptr<AudioInputDeviceManager> manager_; |
| 90 scoped_ptr<MockAudioInputDeviceManagerListener> audio_input_listener_; | 99 scoped_ptr<MockAudioInputDeviceManagerListener> audio_input_listener_; |
| 91 scoped_ptr<media::AudioManager> audio_manager_; | 100 scoped_ptr<media::AudioManager> audio_manager_; |
| 92 StreamDeviceInfoArray devices_; | 101 StreamDeviceInfoArray devices_; |
| 93 | 102 |
| 94 private: | 103 private: |
| 95 DISALLOW_COPY_AND_ASSIGN(AudioInputDeviceManagerTest); | 104 DISALLOW_COPY_AND_ASSIGN(MAYBE_AudioInputDeviceManagerTest); |
| 96 }; | 105 }; |
| 97 | 106 |
| 98 // Opens and closes the devices. | 107 // Opens and closes the devices. |
| 99 TEST_F(AudioInputDeviceManagerTest, OpenAndCloseDevice) { | 108 TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenAndCloseDevice) { |
| 100 if (!CanRunAudioInputDeviceTests()) | 109 if (!CanRunAudioInputDeviceTests()) |
| 101 return; | 110 return; |
| 102 | 111 |
| 103 ASSERT_FALSE(devices_.empty()); | 112 ASSERT_FALSE(devices_.empty()); |
| 104 | 113 |
| 105 InSequence s; | 114 InSequence s; |
| 106 | 115 |
| 107 for (StreamDeviceInfoArray::const_iterator iter = devices_.begin(); | 116 for (StreamDeviceInfoArray::const_iterator iter = devices_.begin(); |
| 108 iter != devices_.end(); ++iter) { | 117 iter != devices_.end(); ++iter) { |
| 109 // Opens/closes the devices. | 118 // Opens/closes the devices. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 120 EXPECT_CALL(*audio_input_listener_, | 129 EXPECT_CALL(*audio_input_listener_, |
| 121 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, session_id)) | 130 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, session_id)) |
| 122 .Times(1); | 131 .Times(1); |
| 123 | 132 |
| 124 // Waits for the callback. | 133 // Waits for the callback. |
| 125 message_loop_->RunUntilIdle(); | 134 message_loop_->RunUntilIdle(); |
| 126 } | 135 } |
| 127 } | 136 } |
| 128 | 137 |
| 129 // Opens multiple devices at one time and closes them later. | 138 // Opens multiple devices at one time and closes them later. |
| 130 TEST_F(AudioInputDeviceManagerTest, OpenMultipleDevices) { | 139 TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenMultipleDevices) { |
| 131 if (!CanRunAudioInputDeviceTests()) | 140 if (!CanRunAudioInputDeviceTests()) |
| 132 return; | 141 return; |
| 133 | 142 |
| 134 ASSERT_FALSE(devices_.empty()); | 143 ASSERT_FALSE(devices_.empty()); |
| 135 | 144 |
| 136 InSequence s; | 145 InSequence s; |
| 137 | 146 |
| 138 int index = 0; | 147 int index = 0; |
| 139 scoped_ptr<int[]> session_id(new int[devices_.size()]); | 148 scoped_ptr<int[]> session_id(new int[devices_.size()]); |
| 140 | 149 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 166 EXPECT_CALL(*audio_input_listener_, | 175 EXPECT_CALL(*audio_input_listener_, |
| 167 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, session_id[i])) | 176 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, session_id[i])) |
| 168 .Times(1); | 177 .Times(1); |
| 169 | 178 |
| 170 // Waits for the callback. | 179 // Waits for the callback. |
| 171 message_loop_->RunUntilIdle(); | 180 message_loop_->RunUntilIdle(); |
| 172 } | 181 } |
| 173 } | 182 } |
| 174 | 183 |
| 175 // Opens a non-existing device. | 184 // Opens a non-existing device. |
| 176 TEST_F(AudioInputDeviceManagerTest, OpenNotExistingDevice) { | 185 TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenNotExistingDevice) { |
| 177 if (!CanRunAudioInputDeviceTests()) | 186 if (!CanRunAudioInputDeviceTests()) |
| 178 return; | 187 return; |
| 179 InSequence s; | 188 InSequence s; |
| 180 | 189 |
| 181 MediaStreamType stream_type = MEDIA_DEVICE_AUDIO_CAPTURE; | 190 MediaStreamType stream_type = MEDIA_DEVICE_AUDIO_CAPTURE; |
| 182 std::string device_name("device_doesnt_exist"); | 191 std::string device_name("device_doesnt_exist"); |
| 183 std::string device_id("id_doesnt_exist"); | 192 std::string device_id("id_doesnt_exist"); |
| 184 int sample_rate(0); | 193 int sample_rate(0); |
| 185 int channel_config(0); | 194 int channel_config(0); |
| 186 StreamDeviceInfo dummy_device( | 195 StreamDeviceInfo dummy_device( |
| 187 stream_type, device_name, device_id, sample_rate, channel_config, 2048); | 196 stream_type, device_name, device_id, sample_rate, channel_config, 2048); |
| 188 | 197 |
| 189 int session_id = manager_->Open(dummy_device); | 198 int session_id = manager_->Open(dummy_device); |
| 190 EXPECT_CALL(*audio_input_listener_, | 199 EXPECT_CALL(*audio_input_listener_, |
| 191 Opened(MEDIA_DEVICE_AUDIO_CAPTURE, session_id)) | 200 Opened(MEDIA_DEVICE_AUDIO_CAPTURE, session_id)) |
| 192 .Times(1); | 201 .Times(1); |
| 193 | 202 |
| 194 // Waits for the callback. | 203 // Waits for the callback. |
| 195 message_loop_->RunUntilIdle(); | 204 message_loop_->RunUntilIdle(); |
| 196 } | 205 } |
| 197 | 206 |
| 198 // Opens default device twice. | 207 // Opens default device twice. |
| 199 TEST_F(AudioInputDeviceManagerTest, OpenDeviceTwice) { | 208 TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenDeviceTwice) { |
| 200 if (!CanRunAudioInputDeviceTests()) | 209 if (!CanRunAudioInputDeviceTests()) |
| 201 return; | 210 return; |
| 202 | 211 |
| 203 ASSERT_FALSE(devices_.empty()); | 212 ASSERT_FALSE(devices_.empty()); |
| 204 | 213 |
| 205 InSequence s; | 214 InSequence s; |
| 206 | 215 |
| 207 // Opens and closes the default device twice. | 216 // Opens and closes the default device twice. |
| 208 int first_session_id = manager_->Open(devices_.front()); | 217 int first_session_id = manager_->Open(devices_.front()); |
| 209 int second_session_id = manager_->Open(devices_.front()); | 218 int second_session_id = manager_->Open(devices_.front()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 225 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, first_session_id)) | 234 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, first_session_id)) |
| 226 .Times(1); | 235 .Times(1); |
| 227 EXPECT_CALL(*audio_input_listener_, | 236 EXPECT_CALL(*audio_input_listener_, |
| 228 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, second_session_id)) | 237 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, second_session_id)) |
| 229 .Times(1); | 238 .Times(1); |
| 230 // Waits for the callback. | 239 // Waits for the callback. |
| 231 message_loop_->RunUntilIdle(); | 240 message_loop_->RunUntilIdle(); |
| 232 } | 241 } |
| 233 | 242 |
| 234 // Accesses then closes the sessions after opening the devices. | 243 // Accesses then closes the sessions after opening the devices. |
| 235 TEST_F(AudioInputDeviceManagerTest, AccessAndCloseSession) { | 244 TEST_F(MAYBE_AudioInputDeviceManagerTest, AccessAndCloseSession) { |
| 236 if (!CanRunAudioInputDeviceTests()) | 245 if (!CanRunAudioInputDeviceTests()) |
| 237 return; | 246 return; |
| 238 | 247 |
| 239 ASSERT_FALSE(devices_.empty()); | 248 ASSERT_FALSE(devices_.empty()); |
| 240 | 249 |
| 241 InSequence s; | 250 InSequence s; |
| 242 | 251 |
| 243 int index = 0; | 252 int index = 0; |
| 244 scoped_ptr<int[]> session_id(new int[devices_.size()]); | 253 scoped_ptr<int[]> session_id(new int[devices_.size()]); |
| 245 | 254 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 261 EXPECT_EQ(iter->device.id, info->device.id); | 270 EXPECT_EQ(iter->device.id, info->device.id); |
| 262 manager_->Close(session_id[index]); | 271 manager_->Close(session_id[index]); |
| 263 EXPECT_CALL(*audio_input_listener_, | 272 EXPECT_CALL(*audio_input_listener_, |
| 264 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, session_id[index])) | 273 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, session_id[index])) |
| 265 .Times(1); | 274 .Times(1); |
| 266 message_loop_->RunUntilIdle(); | 275 message_loop_->RunUntilIdle(); |
| 267 } | 276 } |
| 268 } | 277 } |
| 269 | 278 |
| 270 // Access an invalid session. | 279 // Access an invalid session. |
| 271 TEST_F(AudioInputDeviceManagerTest, AccessInvalidSession) { | 280 TEST_F(MAYBE_AudioInputDeviceManagerTest, AccessInvalidSession) { |
| 272 if (!CanRunAudioInputDeviceTests()) | 281 if (!CanRunAudioInputDeviceTests()) |
| 273 return; | 282 return; |
| 274 InSequence s; | 283 InSequence s; |
| 275 | 284 |
| 276 // Opens the first device. | 285 // Opens the first device. |
| 277 StreamDeviceInfoArray::const_iterator iter = devices_.begin(); | 286 StreamDeviceInfoArray::const_iterator iter = devices_.begin(); |
| 278 int session_id = manager_->Open(*iter); | 287 int session_id = manager_->Open(*iter); |
| 279 EXPECT_CALL(*audio_input_listener_, | 288 EXPECT_CALL(*audio_input_listener_, |
| 280 Opened(MEDIA_DEVICE_AUDIO_CAPTURE, session_id)) | 289 Opened(MEDIA_DEVICE_AUDIO_CAPTURE, session_id)) |
| 281 .Times(1); | 290 .Times(1); |
| 282 message_loop_->RunUntilIdle(); | 291 message_loop_->RunUntilIdle(); |
| 283 | 292 |
| 284 // Access a non-opened device. | 293 // Access a non-opened device. |
| 285 // This should fail and return an empty StreamDeviceInfo. | 294 // This should fail and return an empty StreamDeviceInfo. |
| 286 int invalid_session_id = session_id + 1; | 295 int invalid_session_id = session_id + 1; |
| 287 const StreamDeviceInfo* info = | 296 const StreamDeviceInfo* info = |
| 288 manager_->GetOpenedDeviceInfoById(invalid_session_id); | 297 manager_->GetOpenedDeviceInfoById(invalid_session_id); |
| 289 DCHECK(!info); | 298 DCHECK(!info); |
| 290 | 299 |
| 291 manager_->Close(session_id); | 300 manager_->Close(session_id); |
| 292 EXPECT_CALL(*audio_input_listener_, | 301 EXPECT_CALL(*audio_input_listener_, |
| 293 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, session_id)) | 302 Closed(MEDIA_DEVICE_AUDIO_CAPTURE, session_id)) |
| 294 .Times(1); | 303 .Times(1); |
| 295 message_loop_->RunUntilIdle(); | 304 message_loop_->RunUntilIdle(); |
| 296 } | 305 } |
| 297 | 306 |
| 298 } // namespace content | 307 } // namespace content |
| OLD | NEW |