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

Side by Side Diff: chromeos/audio/cras_audio_handler_unittest.cc

Issue 19861002: Add test coverage for CrasAudioHandler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chromeos/audio/cras_audio_handler.h"
6
7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/values.h"
11 #include "chromeos/audio/audio_devices_pref_handler_stub.h"
12 #include "chromeos/dbus/audio_node.h"
13 #include "chromeos/dbus/cras_audio_client_stub_impl.h"
14 #include "chromeos/dbus/dbus_thread_manager.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 using chromeos::AudioNode;
18
19 namespace {
20 const uint64 kInternalSpeakerId = 10001;
21 const uint64 kHeadphoneId = 10002;
22 const uint64 kInternalMicId = 10003;
23 const uint64 kUSBMicId = 10004;
24
25 const AudioNode kInternalSpeaker(
26 false,
27 kInternalSpeakerId,
28 "Fake Speaker",
29 "INTERNAL_SPEAKER",
30 "Speaker",
31 false,
32 0
33 );
34
35 const AudioNode kHeadphone(
36 false,
37 kHeadphoneId,
38 "Fake Headphone",
39 "HEADPHONE",
40 "Headphone",
41 false,
42 0
43 );
44
45 const AudioNode kInternalMic(
46 true,
47 kInternalMicId,
48 "Fake Mic",
49 "INTERNAL_MIC",
50 "Internal Mic",
51 false,
52 0
53 );
54
55 const AudioNode kUSBMic(
rkc 2013/07/23 20:50:53 We want to add some invalid devices to add negativ
jennyz 2013/07/24 21:12:25 The audio node may give us some bogus audio device
56 true,
57 kUSBMicId,
58 "Fake USB Mic",
59 "USB",
60 "USB Microphone",
61 false,
62 0
63 );
64
65 class TestObserver : public chromeos::CrasAudioHandler::AudioObserver {
66 public:
67 TestObserver() : active_output_node_changed_count_(0),
68 active_input_node_changed_count_(0),
69 audio_nodes_changed_count_(0),
70 output_mute_changed_count_(0),
71 input_mute_changed_count_(0),
72 output_volume_changed_count_(0),
73 input_gain_changed_count_(0) {
74 }
75
76 int active_output_node_changed_count() const {
77 return active_output_node_changed_count_;
78 }
79
80 int active_input_node_changed_count() const {
81 return active_input_node_changed_count_;
82 }
83
84 int audio_nodes_changed_count() const {
85 return audio_nodes_changed_count_;
86 }
87
88 int output_mute_changed_count() const {
89 return output_mute_changed_count_;
90 }
91
92 int input_mute_changed_count() const {
93 return input_mute_changed_count_;
94 }
95
96 int output_volume_changed_count() const {
97 return output_volume_changed_count_;
98 }
99
100 int input_gain_changed_count() const {
101 return input_gain_changed_count_;
102 }
103
104 virtual ~TestObserver() {}
105
106 protected:
107 // chromeos::CrasAudioHandler::AudioObserver overrides.
108 virtual void OnActiveOutputNodeChanged() OVERRIDE {
109 ++active_output_node_changed_count_;
110 }
111
112 virtual void OnActiveInputNodeChanged() OVERRIDE {
113 ++active_input_node_changed_count_;
114 }
115
116 virtual void OnAudioNodesChanged() OVERRIDE {
117 ++audio_nodes_changed_count_;
118 }
119
120 virtual void OnOutputMuteChanged() OVERRIDE {
121 ++output_mute_changed_count_;
122 }
123
124 virtual void OnInputMuteChanged() OVERRIDE {
125 ++input_mute_changed_count_;
126 }
127
128 virtual void OnOutputVolumeChanged() OVERRIDE {
129 ++output_volume_changed_count_;
130 }
131
132 virtual void OnInputGainChanged() OVERRIDE {
133 ++input_gain_changed_count_;
134 }
135
136 private:
137 int active_output_node_changed_count_;
138 int active_input_node_changed_count_;
139 int audio_nodes_changed_count_;
140 int output_mute_changed_count_;
141 int input_mute_changed_count_;
142 int output_volume_changed_count_;
143 int input_gain_changed_count_;
144
145 DISALLOW_COPY_AND_ASSIGN(TestObserver);
146 };
147
148 } // namespace
149
150 namespace chromeos{
151
152 class CrasAudioHandlerTest : public testing::Test {
153 public:
154 CrasAudioHandlerTest() : cras_audio_handler_(NULL),
155 cras_audio_client_stub_(NULL) {
156 }
157 virtual ~CrasAudioHandlerTest() {}
158
159 virtual void SetUp() OVERRIDE {
160 }
161
162 virtual void TearDown() OVERRIDE {
163 cras_audio_handler_->RemoveAudioObserver(test_observer_.get());
164 test_observer_.reset();
165 CrasAudioHandler::Shutdown();
166 audio_pref_handler_ = NULL;
167 DBusThreadManager::Shutdown();
168 }
169
170 void SetUpCrasAudioHandler(const AudioNodeList& audio_nodes) {
171 DBusThreadManager::InitializeWithStub();
172 cras_audio_client_stub_ = static_cast<CrasAudioClientStubImpl*>(
173 DBusThreadManager::Get()->GetCrasAudioClient());
174 cras_audio_client_stub_->SetAudioDevices(audio_nodes);
175 audio_pref_handler_ = new AudioDevicesPrefHandlerStub();
176 CrasAudioHandler::Initialize(audio_pref_handler_);
177 cras_audio_handler_ = CrasAudioHandler::Get();
178 test_observer_.reset(new TestObserver);
179 cras_audio_handler_->AddAudioObserver(test_observer_.get());
180 message_loop_.RunUntilIdle();
181 }
182
183 void ChangeAudioNodes(const AudioNodeList& audio_nodes) {
184 cras_audio_client_stub_->ChangeAudioNodes(audio_nodes);
185 message_loop_.RunUntilIdle();
186 }
187
188 protected:
189 base::MessageLoopForUI message_loop_;
190 CrasAudioHandler* cras_audio_handler_; // Not owned.
191 CrasAudioClientStubImpl* cras_audio_client_stub_; // Not owned.
192 scoped_ptr<TestObserver> test_observer_;
193 scoped_refptr<AudioDevicesPrefHandlerStub> audio_pref_handler_;
194
195 private:
196 DISALLOW_COPY_AND_ASSIGN(CrasAudioHandlerTest);
197 };
198
199 TEST_F(CrasAudioHandlerTest, InitializeWithOnlyDefaultAudioDevices) {
200 const size_t kNumStubAudioDevices = 2;
201 AudioNodeList audio_nodes;
202 audio_nodes.push_back(kInternalSpeaker);
203 audio_nodes.push_back(kInternalMic);
204 SetUpCrasAudioHandler(audio_nodes);
205
206 // Verify the audio devices size.
207 AudioDeviceList audio_devices;
208 cras_audio_handler_->GetAudioDevices(&audio_devices);
209 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
210
211 // Verify the internal speaker has been selected as the active output.
212 AudioDevice active_output;
213 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
214 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
215 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
216 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
217
218 // Ensure the internal microphone has been selected as the active input.
219 AudioDevice active_input;
220 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
221 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
222 }
223
224 TEST_F(CrasAudioHandlerTest, InitializeWithAlternativeAudioDevices) {
225 const size_t kNumStubAudioDevices = 4;
226 AudioNodeList audio_nodes;
227 audio_nodes.push_back(kInternalSpeaker);
228 audio_nodes.push_back(kHeadphone);
229 audio_nodes.push_back(kInternalMic);
230 audio_nodes.push_back(kUSBMic);
231 SetUpCrasAudioHandler(audio_nodes);
232
233 // Verify the audio devices size.
234 AudioDeviceList audio_devices;
235 cras_audio_handler_->GetAudioDevices(&audio_devices);
236 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
237
238 // Verify the headphone has been selected as the active output.
239 AudioDevice active_output;
240 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
241 EXPECT_EQ(kHeadphone.id, active_output.id);
242 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
243 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
244
245 // Ensure the USB microphone has been selected as the active input.
246 AudioDevice active_input;
247 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
248 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
249 }
250
251 TEST_F(CrasAudioHandlerTest, SwitchActiveOutputDevice) {
252 const size_t kNumStubAudioDevices = 2;
253 AudioNodeList audio_nodes;
254 audio_nodes.push_back(kInternalSpeaker);
255 audio_nodes.push_back(kHeadphone);
256 SetUpCrasAudioHandler(audio_nodes);
257 AudioDeviceList audio_devices;
258 cras_audio_handler_->GetAudioDevices(&audio_devices);
259 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
260
261 // Verify the initial active output device is headphone.
262 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
263 AudioDevice active_output;
264 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
265 EXPECT_EQ(kHeadphone.id, active_output.id);
266 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
267
268 // Switch the active output to internal speaker.
269 AudioDevice internal_speaker(kInternalSpeaker);
270 cras_audio_handler_->SwitchToDevice(internal_speaker);
271
272 // Verify the active output is switched to internal speaker, and the
273 // ActiveOutputNodeChanged event is fired.
274 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
275 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
276 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
277 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
278 }
279
280 TEST_F(CrasAudioHandlerTest, SwitchActiveInputDevice) {
281 const size_t kNumStubAudioDevices = 2;
282 AudioNodeList audio_nodes;
283 audio_nodes.push_back(kInternalMic);
284 audio_nodes.push_back(kUSBMic);
285 SetUpCrasAudioHandler(audio_nodes);
286 AudioDeviceList audio_devices;
287 cras_audio_handler_->GetAudioDevices(&audio_devices);
288 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
289
290 // Verify the initial active input device is USB mic.
291 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
292 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
293
294 // Switch the active input to internal mic.
295 AudioDevice internal_mic(kInternalMic);
296 cras_audio_handler_->SwitchToDevice(internal_mic);
297
298 // Verify the active output is switched to internal speaker, and the active
299 // ActiveInputNodeChanged event is fired.
300 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
301 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
302 }
303
304 TEST_F(CrasAudioHandlerTest, PlugHeadphone) {
305 // Set up initial audio devices, only with internal speaker.
306 const size_t kNumStubAudioDevices = 1;
307 AudioNodeList audio_nodes;
308 audio_nodes.push_back(kInternalSpeaker);
309 SetUpCrasAudioHandler(audio_nodes);
310
311 // Verify the audio devices size.
312 AudioDeviceList audio_devices;
313 cras_audio_handler_->GetAudioDevices(&audio_devices);
314 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
315 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
316
317 // Verify the internal speaker has been selected as the active output.
318 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
319 AudioDevice active_output;
320 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
321 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
322 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
323 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
324
325 // Plug the headphone.
326 audio_nodes.push_back(kHeadphone);
327 ChangeAudioNodes(audio_nodes);
328
329 // Verify the AudioNodesChanged event is fired and new audio device is added.
330 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
331 cras_audio_handler_->GetAudioDevices(&audio_devices);
332 EXPECT_EQ(kNumStubAudioDevices + 1, audio_devices.size());
333
334 // Verify the active output device is switched to headphone and
335 // and ActiveOutputChanged event is fired.
336 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
337 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
338 EXPECT_EQ(kHeadphone.id, active_output.id);
339 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
340 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
341 }
342
343 TEST_F(CrasAudioHandlerTest, UnplugHeadphone) {
344 // Set up initial audio devices, with internal speaker and headphone.
345 const size_t kNumStubAudioDevices = 2;
346 AudioNodeList audio_nodes;
347 audio_nodes.push_back(kInternalSpeaker);
348 audio_nodes.push_back(kHeadphone);
349 SetUpCrasAudioHandler(audio_nodes);
350
351 // Verify the audio devices size.
352 AudioDeviceList audio_devices;
353 cras_audio_handler_->GetAudioDevices(&audio_devices);
354 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
355 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
356
357 // Verify the headphone has been selected as the active output.
358 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
359 AudioDevice active_output;
360 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
361 EXPECT_EQ(kHeadphone.id, active_output.id);
362 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
363 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
364
365 // Unplug the headphone.
366 audio_nodes.clear();
367 audio_nodes.push_back(kInternalSpeaker);
368 ChangeAudioNodes(audio_nodes);
369
370 // Verify the AudioNodesChanged event is fired and one audio device is
371 // removed.
372 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
373 cras_audio_handler_->GetAudioDevices(&audio_devices);
374 EXPECT_EQ(kNumStubAudioDevices - 1, audio_devices.size());
375
376 // Verify the active output device is switched to internal speaker and
377 // and ActiveOutputChanged event is fired.
378 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
379 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
380 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
381 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
382 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
383 }
384
385 TEST_F(CrasAudioHandlerTest, PlugUSBMic) {
386 // Set up initial audio devices, only with internal mic.
387 const size_t kNumStubAudioDevices = 1;
388 AudioNodeList audio_nodes;
389 audio_nodes.push_back(kInternalMic);
390 SetUpCrasAudioHandler(audio_nodes);
391
392 // Verify the audio devices size.
393 AudioDeviceList audio_devices;
394 cras_audio_handler_->GetAudioDevices(&audio_devices);
395 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
396 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
397
398 // Verify the internal mic is selected as the active output.
399 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
400 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
401 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
402
403 // Plug the USB Mic.
404 audio_nodes.push_back(kUSBMic);
405 ChangeAudioNodes(audio_nodes);
406
407 // Verify the AudioNodesChanged event is fired and new audio device is added.
408 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
409 cras_audio_handler_->GetAudioDevices(&audio_devices);
410 EXPECT_EQ(kNumStubAudioDevices + 1, audio_devices.size());
411
412 // Verify the active input device is switched to USB mic and
413 // and ActiveInputChanged event is fired.
414 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
415 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
416 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
417 }
418
419 TEST_F(CrasAudioHandlerTest, UnplugUSBMic) {
420 // Set up initial audio devices, with internal mic and USB Mic.
421 const size_t kNumStubAudioDevices = 2;
422 AudioNodeList audio_nodes;
423 audio_nodes.push_back(kInternalMic);
424 audio_nodes.push_back(kUSBMic);
425 SetUpCrasAudioHandler(audio_nodes);
426
427 // Verify the audio devices size.
428 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
429 AudioDeviceList audio_devices;
430 cras_audio_handler_->GetAudioDevices(&audio_devices);
431 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
432
433 // Verify the USB mic is selected as the active output.
434 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
435 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
436 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
437
438 // Unplug the USB Mic.
439 audio_nodes.clear();
440 audio_nodes.push_back(kInternalMic);
441 ChangeAudioNodes(audio_nodes);
442
443 // Verify the AudioNodesChanged event is fired, and one audio device is
444 // removed.
445 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
446 cras_audio_handler_->GetAudioDevices(&audio_devices);
447 EXPECT_EQ(kNumStubAudioDevices - 1, audio_devices.size());
448
449 // Verify the active input device is switched to internal mic, and
450 // and ActiveInputChanged event is fired.
451 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
452 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
453 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
454 }
455
456 TEST_F(CrasAudioHandlerTest, SetOutputMute) {
457 AudioNodeList audio_nodes;
458 audio_nodes.push_back(kInternalSpeaker);
459 SetUpCrasAudioHandler(audio_nodes);
460 EXPECT_EQ(0, test_observer_->output_mute_changed_count());
461
462 // Mute the device.
463 cras_audio_handler_->SetOutputMute(true);
464
465 // Verify the output is muted, OnOutputMuteChanged event is fired,
466 // and mute value is saved in the preferences.
467 EXPECT_TRUE(cras_audio_handler_->IsOutputMuted());
468 EXPECT_EQ(1, test_observer_->output_mute_changed_count());
469 AudioDevice speaker(kInternalSpeaker);
470 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(speaker));
471
472 // Unmute the device.
473 cras_audio_handler_->SetOutputMute(false);
474
475 // Verify the output is unmuted, OnOutputMuteChanged event is fired,
476 // and mute value is saved in the preferences.
477 EXPECT_FALSE(cras_audio_handler_->IsOutputMuted());
478 EXPECT_EQ(2, test_observer_->output_mute_changed_count());
479 EXPECT_FALSE(audio_pref_handler_->GetMuteValue(speaker));
480 }
481
482 TEST_F(CrasAudioHandlerTest, SetInputMute) {
483 AudioNodeList audio_nodes;
484 audio_nodes.push_back(kInternalMic);
485 SetUpCrasAudioHandler(audio_nodes);
486 EXPECT_EQ(0, test_observer_->input_mute_changed_count());
487
488 // Mute the device.
489 cras_audio_handler_->SetInputMute(true);
490
491 // Verify the input is muted, OnInputMuteChanged event is fired,
492 // and mute value is saved in the preferences.
493 EXPECT_TRUE(cras_audio_handler_->IsInputMuted());
494 EXPECT_EQ(1, test_observer_->input_mute_changed_count());
495 AudioDevice internal_mic(kInternalMic);
496 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_mic));
497
498 // Unmute the device.
499 cras_audio_handler_->SetInputMute(false);
500
501 // Verify the input is unmuted, OnInputMuteChanged event is fired,
502 // and mute value is saved in the preferences.
503 EXPECT_FALSE(cras_audio_handler_->IsInputMuted());
504 EXPECT_EQ(2, test_observer_->input_mute_changed_count());
505 EXPECT_FALSE(audio_pref_handler_->GetMuteValue(internal_mic));
506 }
507
508 TEST_F(CrasAudioHandlerTest, SetOutputVolumePercent) {
509 AudioNodeList audio_nodes;
510 audio_nodes.push_back(kInternalSpeaker);
511 SetUpCrasAudioHandler(audio_nodes);
512 EXPECT_EQ(0, test_observer_->output_volume_changed_count());
513
514 cras_audio_handler_->SetOutputVolumePercent(60);
515
516 // Verify the output volume is changed to the designated value,
517 // OnOutputVolumeChanged event is fired, and the device volume value
518 // is saved the preferences.
519 const int kVolume = 60;
520 EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent());
521 EXPECT_EQ(1, test_observer_->output_volume_changed_count());
522 AudioDevice device;
523 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&device));
524 EXPECT_EQ(device.id, kInternalSpeaker.id);
525 EXPECT_EQ(kVolume, audio_pref_handler_->GetVolumeGainValue(device));
526 }
527
528 TEST_F(CrasAudioHandlerTest, SetInputGainPercent) {
529 AudioNodeList audio_nodes;
530 audio_nodes.push_back(kInternalMic);
531 SetUpCrasAudioHandler(audio_nodes);
532 EXPECT_EQ(0, test_observer_->input_gain_changed_count());
533
534 cras_audio_handler_->SetInputGainPercent(60);
535
536 // Verify the input gain changed to the designated value,
537 // OnInputGainChanged event is fired, and the device gain value
538 // is saved in the preferences.
539 const int kGain = 60;
540 EXPECT_EQ(kGain, cras_audio_handler_->GetInputGainPercent());
541 EXPECT_EQ(1, test_observer_->input_gain_changed_count());
542 AudioDevice internal_mic(kInternalMic);
543 EXPECT_EQ(kGain, audio_pref_handler_->GetVolumeGainValue(internal_mic));
544 }
545
546 TEST_F(CrasAudioHandlerTest, SetMuteForDevice) {
547 AudioNodeList audio_nodes;
548 audio_nodes.push_back(kInternalSpeaker);
549 audio_nodes.push_back(kHeadphone);
550 audio_nodes.push_back(kInternalMic);
551 audio_nodes.push_back(kUSBMic);
552 SetUpCrasAudioHandler(audio_nodes);
553
554 // Mute the active output device.
555 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
556 cras_audio_handler_->SetMuteForDevice(kHeadphone.id, true);
557
558 // Verify the headphone is muted and mute value is saved in the preferences.
559 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kHeadphone.id));
560 AudioDevice headphone(kHeadphone);
561 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(headphone));
562
563 // Mute the non-active output device.
564 cras_audio_handler_->SetMuteForDevice(kInternalSpeaker.id, true);
565
566 // Verify the internal speaker is muted and mute value is saved in the
567 // preferences.
568 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kInternalSpeaker.id));
569 AudioDevice internal_speaker(kInternalSpeaker);
570 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_speaker));
571
572 // Mute the active input device.
573 EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetActiveInputNode());
574 cras_audio_handler_->SetMuteForDevice(kUSBMic.id, true);
575
576 // Verify the USB Mic is muted and mute state is saved in the preferences.
577 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kUSBMic.id));
578 AudioDevice usb_mic(kUSBMic);
579 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(usb_mic));
580
581 // Mute the non-active input device.
582 cras_audio_handler_->SetMuteForDevice(kInternalMic.id, true);
583
584 // Verify the internal mic is muted and mute value is saved in the
585 // preferences.
586 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kInternalMic.id));
587 AudioDevice internal_mic(kInternalMic);
588 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_mic));
589 }
590
591 TEST_F(CrasAudioHandlerTest, SetVolumeGainPercentForDevice) {
592 AudioNodeList audio_nodes;
593 audio_nodes.push_back(kInternalSpeaker);
594 audio_nodes.push_back(kHeadphone);
595 audio_nodes.push_back(kInternalMic);
596 audio_nodes.push_back(kUSBMic);
597 SetUpCrasAudioHandler(audio_nodes);
598
599 // Set volume percent for active output device.
600 const int kHeadphoneVolume = 30;
601 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
602 cras_audio_handler_->SetVolumeGainPercentForDevice(kHeadphone.id,
603 kHeadphoneVolume);
604
605 // Verify the volume percent of headphone is set, and saved in preferences.
606 EXPECT_EQ(kHeadphoneVolume,
607 cras_audio_handler_->GetOutputVolumePercentForDevice(
608 kHeadphone.id));
609 AudioDevice headphone(kHeadphone);
610 EXPECT_EQ(kHeadphoneVolume,
611 audio_pref_handler_->GetVolumeGainValue(headphone));
612
613 // Set volume percent for non-active output device.
614 const int kSpeakerVolume = 60;
615 cras_audio_handler_->SetVolumeGainPercentForDevice(kInternalSpeaker.id,
616 kSpeakerVolume);
617
618 // Verify the volume percent of speaker is set, and saved in preferences.
619 EXPECT_EQ(kSpeakerVolume,
620 cras_audio_handler_->GetOutputVolumePercentForDevice(
621 kInternalSpeaker.id));
622 AudioDevice speaker(kInternalSpeaker);
623 EXPECT_EQ(kSpeakerVolume,
624 audio_pref_handler_->GetVolumeGainValue(speaker));
625
626 // Set gain percent for active input device.
627 const int kUSBMicGain = 30;
628 EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetActiveInputNode());
629 cras_audio_handler_->SetVolumeGainPercentForDevice(kUSBMic.id,
630 kUSBMicGain);
631
632 // Verify the gain percent of USB mic is set, and saved in preferences.
633 EXPECT_EQ(kUSBMicGain,
634 cras_audio_handler_->GetOutputVolumePercentForDevice(kUSBMic.id));
635 AudioDevice usb_mic(kHeadphone);
636 EXPECT_EQ(kUSBMicGain,
637 audio_pref_handler_->GetVolumeGainValue(usb_mic));
638
639 // Set gain percent for non-active input device.
640 const int kInternalMicGain = 60;
641 cras_audio_handler_->SetVolumeGainPercentForDevice(kInternalMic.id,
642 kInternalMicGain);
643
644 // Verify the gain percent of internal mic is set, and saved in preferences.
645 EXPECT_EQ(kInternalMicGain,
646 cras_audio_handler_->GetOutputVolumePercentForDevice(
647 kInternalMic.id));
648 AudioDevice internal_mic(kInternalMic);
649 EXPECT_EQ(kInternalMicGain,
650 audio_pref_handler_->GetVolumeGainValue(internal_mic));
651 }
652
653 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698