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

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: Add more test cases. 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;
stevenjb 2013/07/26 17:23:30 We could put this entire file inside namespace chr
jennyz 2013/07/26 18:14:44 Done.
18
19 namespace {
20 const uint64 kInternalSpeakerId = 10001;
21 const uint64 kHeadphoneId = 10002;
22 const uint64 kInternalMicId = 10003;
23 const uint64 kUSBMicId = 10004;
24 const uint64 kBluetoothHeadsetId = 10005;
25 const uint64 kHDMIOutputId = 10006;
26 const uint64 kUSBHeadphoneId1 = 10007;
27 const uint64 kUSBHeadphoneId2 = 10008;
28 const uint64 kOtherTypeOutputId = 90001;
29 const uint64 kOtherTypeInputId = 90002;
30
31 const AudioNode kInternalSpeaker(
32 false,
33 kInternalSpeakerId,
34 "Fake Speaker",
35 "INTERNAL_SPEAKER",
36 "Speaker",
37 false,
38 0
39 );
40
41 const AudioNode kHeadphone(
42 false,
43 kHeadphoneId,
44 "Fake Headphone",
45 "HEADPHONE",
46 "Headphone",
47 false,
48 0
49 );
50
51 const AudioNode kInternalMic(
52 true,
53 kInternalMicId,
54 "Fake Mic",
55 "INTERNAL_MIC",
56 "Internal Mic",
57 false,
58 0
59 );
60
61 const AudioNode kUSBMic(
62 true,
63 kUSBMicId,
64 "Fake USB Mic",
65 "USB",
66 "USB Microphone",
67 false,
68 0
69 );
70
71 const AudioNode kOtherTypeOutput(
72 false,
73 kOtherTypeOutputId,
74 "Output Device",
75 "SOME_OTHER_TYPE",
76 "Other Type Output Device",
77 false,
78 0
79 );
80
81 const AudioNode kOtherTypeInput(
82 true,
83 kOtherTypeInputId,
84 "Input Device",
85 "SOME_OTHER_TYPE",
86 "Other Type Input Device",
87 false,
88 0
89 );
90
91 const AudioNode kBluetoothHeadset (
92 false,
93 kBluetoothHeadsetId,
94 "Bluetooth Headset",
95 "BLUETOOTH",
96 "Bluetooth Headset 1",
97 false,
98 0
99 );
100
101 const AudioNode kHDMIOutput (
102 false,
103 kHDMIOutputId,
104 "HDMI output",
105 "HDMI",
106 "HDMI output",
107 false,
108 0
109 );
110
111 const AudioNode kUSBHeadphone1 (
112 false,
113 kUSBHeadphoneId1,
114 "USB Headphone",
115 "USB",
116 "USB Headphone 1",
117 false,
118 0
119 );
120
121 const AudioNode kUSBHeadphone2 (
122 false,
123 kUSBHeadphoneId2,
124 "USB Headphone",
125 "USB",
126 "USB Headphone 1",
127 false,
128 0
129 );
130
131
132 class TestObserver : public chromeos::CrasAudioHandler::AudioObserver {
133 public:
134 TestObserver() : active_output_node_changed_count_(0),
135 active_input_node_changed_count_(0),
136 audio_nodes_changed_count_(0),
137 output_mute_changed_count_(0),
138 input_mute_changed_count_(0),
139 output_volume_changed_count_(0),
140 input_gain_changed_count_(0) {
141 }
142
143 int active_output_node_changed_count() const {
144 return active_output_node_changed_count_;
145 }
146
147 int active_input_node_changed_count() const {
148 return active_input_node_changed_count_;
149 }
150
151 int audio_nodes_changed_count() const {
152 return audio_nodes_changed_count_;
153 }
154
155 int output_mute_changed_count() const {
156 return output_mute_changed_count_;
157 }
158
159 int input_mute_changed_count() const {
160 return input_mute_changed_count_;
161 }
162
163 int output_volume_changed_count() const {
164 return output_volume_changed_count_;
165 }
166
167 int input_gain_changed_count() const {
168 return input_gain_changed_count_;
169 }
170
171 virtual ~TestObserver() {}
172
173 protected:
174 // chromeos::CrasAudioHandler::AudioObserver overrides.
175 virtual void OnActiveOutputNodeChanged() OVERRIDE {
176 ++active_output_node_changed_count_;
177 }
178
179 virtual void OnActiveInputNodeChanged() OVERRIDE {
180 ++active_input_node_changed_count_;
181 }
182
183 virtual void OnAudioNodesChanged() OVERRIDE {
184 ++audio_nodes_changed_count_;
185 }
186
187 virtual void OnOutputMuteChanged() OVERRIDE {
188 ++output_mute_changed_count_;
189 }
190
191 virtual void OnInputMuteChanged() OVERRIDE {
192 ++input_mute_changed_count_;
193 }
194
195 virtual void OnOutputVolumeChanged() OVERRIDE {
196 ++output_volume_changed_count_;
197 }
198
199 virtual void OnInputGainChanged() OVERRIDE {
200 ++input_gain_changed_count_;
201 }
202
203 private:
204 int active_output_node_changed_count_;
205 int active_input_node_changed_count_;
206 int audio_nodes_changed_count_;
207 int output_mute_changed_count_;
208 int input_mute_changed_count_;
209 int output_volume_changed_count_;
210 int input_gain_changed_count_;
211
212 DISALLOW_COPY_AND_ASSIGN(TestObserver);
213 };
214
215 } // namespace
216
217 namespace chromeos{
218
219 class CrasAudioHandlerTest : public testing::Test {
220 public:
221 CrasAudioHandlerTest() : cras_audio_handler_(NULL),
222 cras_audio_client_stub_(NULL) {
223 }
224 virtual ~CrasAudioHandlerTest() {}
225
226 virtual void SetUp() OVERRIDE {
227 }
228
229 virtual void TearDown() OVERRIDE {
230 cras_audio_handler_->RemoveAudioObserver(test_observer_.get());
231 test_observer_.reset();
232 CrasAudioHandler::Shutdown();
233 audio_pref_handler_ = NULL;
234 DBusThreadManager::Shutdown();
235 }
236
237 void SetUpCrasAudioHandler(const AudioNodeList& audio_nodes) {
238 DBusThreadManager::InitializeWithStub();
239 cras_audio_client_stub_ = static_cast<CrasAudioClientStubImpl*>(
240 DBusThreadManager::Get()->GetCrasAudioClient());
241 cras_audio_client_stub_->SetAudioDevices(audio_nodes);
242 audio_pref_handler_ = new AudioDevicesPrefHandlerStub();
243 CrasAudioHandler::Initialize(audio_pref_handler_);
244 cras_audio_handler_ = CrasAudioHandler::Get();
245 test_observer_.reset(new TestObserver);
246 cras_audio_handler_->AddAudioObserver(test_observer_.get());
247 message_loop_.RunUntilIdle();
248 }
249
250 void ChangeAudioNodes(const AudioNodeList& audio_nodes) {
251 cras_audio_client_stub_->ChangeAudioNodes(audio_nodes);
252 message_loop_.RunUntilIdle();
253 }
254
255 protected:
256 base::MessageLoopForUI message_loop_;
257 CrasAudioHandler* cras_audio_handler_; // Not owned.
258 CrasAudioClientStubImpl* cras_audio_client_stub_; // Not owned.
stevenjb 2013/07/26 17:23:30 Unused?
jennyz 2013/07/26 18:14:44 It is used in both SetUpCrasAudioHandler and Chang
259 scoped_ptr<TestObserver> test_observer_;
260 scoped_refptr<AudioDevicesPrefHandlerStub> audio_pref_handler_;
261
262 private:
263 DISALLOW_COPY_AND_ASSIGN(CrasAudioHandlerTest);
264 };
265
266 TEST_F(CrasAudioHandlerTest, InitializeWithOnlyDefaultAudioDevices) {
267 const size_t kNumStubAudioDevices = 2;
stevenjb 2013/07/26 17:23:30 Maybe use audio_nodes.size() instead, here and bel
jennyz 2013/07/26 18:14:44 Done.
268 AudioNodeList audio_nodes;
269 audio_nodes.push_back(kInternalSpeaker);
270 audio_nodes.push_back(kInternalMic);
271 SetUpCrasAudioHandler(audio_nodes);
272
273 // Verify the audio devices size.
274 AudioDeviceList audio_devices;
275 cras_audio_handler_->GetAudioDevices(&audio_devices);
276 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
277
278 // Verify the internal speaker has been selected as the active output.
279 AudioDevice active_output;
280 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
281 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
282 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
283 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
284
285 // Ensure the internal microphone has been selected as the active input.
286 AudioDevice active_input;
287 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
288 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
289 }
290
291 TEST_F(CrasAudioHandlerTest, InitializeWithAlternativeAudioDevices) {
292 const size_t kNumStubAudioDevices = 4;
293 AudioNodeList audio_nodes;
294 audio_nodes.push_back(kInternalSpeaker);
295 audio_nodes.push_back(kHeadphone);
296 audio_nodes.push_back(kInternalMic);
297 audio_nodes.push_back(kUSBMic);
298 SetUpCrasAudioHandler(audio_nodes);
299
300 // Verify the audio devices size.
301 AudioDeviceList audio_devices;
302 cras_audio_handler_->GetAudioDevices(&audio_devices);
303 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
304
305 // Verify the headphone has been selected as the active output.
306 AudioDevice active_output;
307 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
308 EXPECT_EQ(kHeadphone.id, active_output.id);
309 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
310 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
311
312 // Ensure the USB microphone has been selected as the active input.
313 AudioDevice active_input;
314 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
315 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
316 }
317
318 TEST_F(CrasAudioHandlerTest, SwitchActiveOutputDevice) {
319 const size_t kNumStubAudioDevices = 2;
320 AudioNodeList audio_nodes;
321 audio_nodes.push_back(kInternalSpeaker);
322 audio_nodes.push_back(kHeadphone);
323 SetUpCrasAudioHandler(audio_nodes);
324 AudioDeviceList audio_devices;
325 cras_audio_handler_->GetAudioDevices(&audio_devices);
326 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
327
328 // Verify the initial active output device is headphone.
329 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
330 AudioDevice active_output;
331 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
332 EXPECT_EQ(kHeadphone.id, active_output.id);
333 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
334
335 // Switch the active output to internal speaker.
336 AudioDevice internal_speaker(kInternalSpeaker);
337 cras_audio_handler_->SwitchToDevice(internal_speaker);
338
339 // Verify the active output is switched to internal speaker, and the
340 // ActiveOutputNodeChanged event is fired.
341 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
342 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
343 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
344 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
345 }
346
347 TEST_F(CrasAudioHandlerTest, SwitchActiveInputDevice) {
348 const size_t kNumStubAudioDevices = 2;
349 AudioNodeList audio_nodes;
350 audio_nodes.push_back(kInternalMic);
351 audio_nodes.push_back(kUSBMic);
352 SetUpCrasAudioHandler(audio_nodes);
353 AudioDeviceList audio_devices;
354 cras_audio_handler_->GetAudioDevices(&audio_devices);
355 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
356
357 // Verify the initial active input device is USB mic.
358 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
359 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
360
361 // Switch the active input to internal mic.
362 AudioDevice internal_mic(kInternalMic);
363 cras_audio_handler_->SwitchToDevice(internal_mic);
364
365 // Verify the active output is switched to internal speaker, and the active
366 // ActiveInputNodeChanged event is fired.
367 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
368 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
369 }
370
371 TEST_F(CrasAudioHandlerTest, PlugHeadphone) {
372 // Set up initial audio devices, only with internal speaker.
373 const size_t kNumStubAudioDevices = 1;
374 AudioNodeList audio_nodes;
375 audio_nodes.push_back(kInternalSpeaker);
376 SetUpCrasAudioHandler(audio_nodes);
377
378 // Verify the audio devices size.
379 AudioDeviceList audio_devices;
380 cras_audio_handler_->GetAudioDevices(&audio_devices);
381 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
382 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
383
384 // Verify the internal speaker has been selected as the active output.
385 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
386 AudioDevice active_output;
387 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
388 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
389 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
390 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
391
392 // Plug the headphone.
393 audio_nodes.push_back(kHeadphone);
394 ChangeAudioNodes(audio_nodes);
395
396 // Verify the AudioNodesChanged event is fired and new audio device is added.
397 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
398 cras_audio_handler_->GetAudioDevices(&audio_devices);
399 EXPECT_EQ(kNumStubAudioDevices + 1, audio_devices.size());
400
401 // Verify the active output device is switched to headphone and
402 // ActiveOutputChanged event is fired.
403 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
404 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
405 EXPECT_EQ(kHeadphone.id, active_output.id);
406 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
407 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
408 }
409
410 TEST_F(CrasAudioHandlerTest, UnplugHeadphone) {
411 // Set up initial audio devices, with internal speaker and headphone.
412 const size_t kNumStubAudioDevices = 2;
413 AudioNodeList audio_nodes;
414 audio_nodes.push_back(kInternalSpeaker);
415 audio_nodes.push_back(kHeadphone);
416 SetUpCrasAudioHandler(audio_nodes);
417
418 // Verify the audio devices size.
419 AudioDeviceList audio_devices;
420 cras_audio_handler_->GetAudioDevices(&audio_devices);
421 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
422 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
423
424 // Verify the headphone has been selected as the active output.
425 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
426 AudioDevice active_output;
427 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
428 EXPECT_EQ(kHeadphone.id, active_output.id);
429 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
430 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
431
432 // Unplug the headphone.
433 audio_nodes.clear();
434 audio_nodes.push_back(kInternalSpeaker);
435 ChangeAudioNodes(audio_nodes);
436
437 // Verify the AudioNodesChanged event is fired and one audio device is
438 // removed.
439 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
440 cras_audio_handler_->GetAudioDevices(&audio_devices);
441 EXPECT_EQ(kNumStubAudioDevices - 1, audio_devices.size());
442
443 // Verify the active output device is switched to internal speaker and
444 // ActiveOutputChanged event is fired.
445 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
446 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
447 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
448 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
449 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
450 }
451
452 TEST_F(CrasAudioHandlerTest, InitializeWithBluetoothHeadset) {
453 const size_t kNumStubAudioDevices = 2;
454 AudioNodeList audio_nodes;
455 audio_nodes.push_back(kInternalSpeaker);
456 audio_nodes.push_back(kBluetoothHeadset);
457 SetUpCrasAudioHandler(audio_nodes);
458
459 // Verify the audio devices size.
460 AudioDeviceList audio_devices;
461 cras_audio_handler_->GetAudioDevices(&audio_devices);
462 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
463 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
464
465 // Verify the bluetooth headset has been selected as the active output.
466 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
467 AudioDevice active_output;
468 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
469 EXPECT_EQ(kBluetoothHeadset.id, active_output.id);
470 EXPECT_EQ(kBluetoothHeadset.id, cras_audio_handler_->GetActiveOutputNode());
471 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
472 }
473
474 TEST_F(CrasAudioHandlerTest, ConnectAndDisconnectBluetoothHeadset) {
475 // Initialize with internal speaker and headphone.
476 const size_t kNumStubAudioDevices = 2;
477 AudioNodeList audio_nodes;
478 audio_nodes.push_back(kInternalSpeaker);
479 audio_nodes.push_back(kHeadphone);
480 SetUpCrasAudioHandler(audio_nodes);
481
482 // Verify the audio devices size.
483 AudioDeviceList audio_devices;
484 cras_audio_handler_->GetAudioDevices(&audio_devices);
485 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
486 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
487
488 // Verify the headphone is selected as the active output initially.
489 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
490 AudioDevice active_output;
491 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
492 EXPECT_EQ(kHeadphone.id, active_output.id);
493 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
494 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
495
496 // Connect to bluetooth headset. Since it is plugged in later than
497 // headphone, active output should be switched to it.
498 audio_nodes.clear();
499 audio_nodes.push_back(kInternalSpeaker);
500 AudioNode headphone(kHeadphone);
501 headphone.plugged_time = 80000000;
502 headphone.active = true;
503 audio_nodes.push_back(headphone);
504 AudioNode bluetooth_headset(kBluetoothHeadset);
505 bluetooth_headset.plugged_time = 90000000;
506 audio_nodes.push_back(bluetooth_headset);
507 ChangeAudioNodes(audio_nodes);
508
509 // Verify the AudioNodesChanged event is fired and new audio device is added.
510 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
511 cras_audio_handler_->GetAudioDevices(&audio_devices);
512 EXPECT_EQ(kNumStubAudioDevices + 1, audio_devices.size());
513
514 // Verify the active output device is switched to bluetooth headset, and
515 // ActiveOutputChanged event is fired.
516 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
517 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
518 EXPECT_EQ(kBluetoothHeadset.id, active_output.id);
519 EXPECT_EQ(kBluetoothHeadset.id, cras_audio_handler_->GetActiveOutputNode());
520 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
521
522 // Disconnect bluetooth headset.
523 audio_nodes.clear();
524 audio_nodes.push_back(kInternalSpeaker);
525 audio_nodes.push_back(headphone);
526 ChangeAudioNodes(audio_nodes);
527
528 // Verify the AudioNodesChanged event is fired and one audio device is
529 // removed.
530 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
531 cras_audio_handler_->GetAudioDevices(&audio_devices);
532 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
533
534 // Verify the active output device is switched to headphone, and
535 // ActiveOutputChanged event is fired.
536 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
537 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
538 EXPECT_EQ(kHeadphone.id, active_output.id);
539 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
540 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
541 }
542
543 TEST_F(CrasAudioHandlerTest, InitializeWithHDMIOutput) {
544 const size_t kNumStubAudioDevices = 2;
545 AudioNodeList audio_nodes;
546 audio_nodes.push_back(kInternalSpeaker);
547 audio_nodes.push_back(kHDMIOutput);
548 SetUpCrasAudioHandler(audio_nodes);
549
550 // Verify the audio devices size.
551 AudioDeviceList audio_devices;
552 cras_audio_handler_->GetAudioDevices(&audio_devices);
553 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
554 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
555
556 // Verify the HDMI device has been selected as the active output.
557 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
558 AudioDevice active_output;
559 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
560 EXPECT_EQ(kHDMIOutput.id, active_output.id);
561 EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetActiveOutputNode());
562 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
563 }
564
565 TEST_F(CrasAudioHandlerTest, ConnectAndDisconnectHDMIOutput) {
566 // Initialize with internal speaker.
567 const size_t kNumStubAudioDevices = 1;
568 AudioNodeList audio_nodes;
569 audio_nodes.push_back(kInternalSpeaker);
570 SetUpCrasAudioHandler(audio_nodes);
571
572 // Verify the audio devices size.
573 AudioDeviceList audio_devices;
574 cras_audio_handler_->GetAudioDevices(&audio_devices);
575 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
576 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
577
578 // Verify the internal speaker is selected as the active output initially.
579 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
580 AudioDevice active_output;
581 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
582 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
583 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
584 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
585
586 // Connect to HDMI output.
587 audio_nodes.clear();
588 AudioNode internal_speaker(kInternalSpeaker);
589 internal_speaker.active = true;
590 internal_speaker.plugged_time = 80000000;
591 audio_nodes.push_back(internal_speaker);
592 AudioNode hdmi(kHDMIOutput);
593 hdmi.plugged_time = 90000000;
594 audio_nodes.push_back(hdmi);
595 ChangeAudioNodes(audio_nodes);
596
597 // Verify the AudioNodesChanged event is fired and new audio device is added.
598 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
599 cras_audio_handler_->GetAudioDevices(&audio_devices);
600 EXPECT_EQ(kNumStubAudioDevices + 1, audio_devices.size());
601
602 // Verify the active output device is switched to hdmi output, and
603 // ActiveOutputChanged event is fired.
604 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
605 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
606 EXPECT_EQ(kHDMIOutput.id, active_output.id);
607 EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetActiveOutputNode());
608 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
609
610 // Disconnect hdmi headset.
611 audio_nodes.clear();
612 audio_nodes.push_back(kInternalSpeaker);
613 ChangeAudioNodes(audio_nodes);
614
615 // Verify the AudioNodesChanged event is fired and one audio device is
616 // removed.
617 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
618 cras_audio_handler_->GetAudioDevices(&audio_devices);
619 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
620
621 // Verify the active output device is switched to internal speaker, and
622 // ActiveOutputChanged event is fired.
623 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
624 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
625 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
626 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
627 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
628 }
629
630 TEST_F(CrasAudioHandlerTest, HandleHeadphoneAndHDMIOutput) {
631 // Initialize with internal speaker, headphone and HDMI output.
632 const size_t kNumStubAudioDevices = 3;
633 AudioNodeList audio_nodes;
634 audio_nodes.push_back(kInternalSpeaker);
635 audio_nodes.push_back(kHeadphone);
636 audio_nodes.push_back(kHDMIOutput);
637 SetUpCrasAudioHandler(audio_nodes);
638
639 // Verify the audio devices size.
640 AudioDeviceList audio_devices;
641 cras_audio_handler_->GetAudioDevices(&audio_devices);
642 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
643 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
644
645 // Verify the headphone is selected as the active output initially.
646 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
647 AudioDevice active_output;
648 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
649 EXPECT_EQ(kHeadphone.id, active_output.id);
650 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
651 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
652
653 // Disconnect HDMI output.
654 audio_nodes.clear();
655 audio_nodes.push_back(kInternalSpeaker);
656 audio_nodes.push_back(kHDMIOutput);
657 ChangeAudioNodes(audio_nodes);
658
659 // Verify the AudioNodesChanged event is fired and one audio device is
660 // removed.
661 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
662 cras_audio_handler_->GetAudioDevices(&audio_devices);
663 EXPECT_EQ(kNumStubAudioDevices - 1, audio_devices.size());
664
665 // Verify the active output device is switched to HDMI output, and
666 // ActiveOutputChanged event is fired.
667 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
668 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
669 EXPECT_EQ(kHDMIOutput.id, active_output.id);
670 EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetActiveOutputNode());
671 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
672 }
673
674 TEST_F(CrasAudioHandlerTest, InitializeWithUSBHeadphone) {
675 const size_t kNumStubAudioDevices = 2;
676 AudioNodeList audio_nodes;
677 audio_nodes.push_back(kInternalSpeaker);
678 audio_nodes.push_back(kUSBHeadphone1);
679 SetUpCrasAudioHandler(audio_nodes);
680
681 // Verify the audio devices size.
682 AudioDeviceList audio_devices;
683 cras_audio_handler_->GetAudioDevices(&audio_devices);
684 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
685 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
686
687 // Verify the usb headphone has been selected as the active output.
688 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
689 AudioDevice active_output;
690 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
691 EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
692 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
693 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
694 }
695
696 TEST_F(CrasAudioHandlerTest, PlugAndUnplugUSBHeadphone) {
697 // Initialize with internal speaker.
698 const size_t kNumStubAudioDevices = 1;
699 AudioNodeList audio_nodes;
700 audio_nodes.push_back(kInternalSpeaker);
701 SetUpCrasAudioHandler(audio_nodes);
702
703 // Verify the audio devices size.
704 AudioDeviceList audio_devices;
705 cras_audio_handler_->GetAudioDevices(&audio_devices);
706 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
707 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
708
709 // Verify the internal speaker is selected as the active output initially.
710 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
711 AudioDevice active_output;
712 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
713 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
714 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
715 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
716
717 // Plug in usb headphone
718 audio_nodes.clear();
719 AudioNode internal_speaker(kInternalSpeaker);
720 internal_speaker.active = true;
721 internal_speaker.plugged_time = 80000000;
722 audio_nodes.push_back(internal_speaker);
723 AudioNode usb_headphone(kUSBHeadphone1);
724 usb_headphone.plugged_time = 90000000;
725 audio_nodes.push_back(usb_headphone);
726 ChangeAudioNodes(audio_nodes);
727
728 // Verify the AudioNodesChanged event is fired and new audio device is added.
729 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
730 cras_audio_handler_->GetAudioDevices(&audio_devices);
731 EXPECT_EQ(kNumStubAudioDevices + 1, audio_devices.size());
732
733 // Verify the active output device is switched to usb headphone, and
734 // ActiveOutputChanged event is fired.
735 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
736 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
737 EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
738 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
739 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
740
741 // Unplug usb headphone.
742 audio_nodes.clear();
743 audio_nodes.push_back(kInternalSpeaker);
744 ChangeAudioNodes(audio_nodes);
745
746 // Verify the AudioNodesChanged event is fired and one audio device is
747 // removed.
748 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
749 cras_audio_handler_->GetAudioDevices(&audio_devices);
750 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
751
752 // Verify the active output device is switched to internal speaker, and
753 // ActiveOutputChanged event is fired.
754 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
755 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
756 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
757 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
758 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
759 }
760
761 TEST_F(CrasAudioHandlerTest, HandleMultipleUSBHeadphones) {
762 // Initialize with internal speaker and one usb headphone.
763 const size_t kNumStubAudioDevices = 2;
764 AudioNodeList audio_nodes;
765 audio_nodes.push_back(kInternalSpeaker);
766 audio_nodes.push_back(kUSBHeadphone1);
767 SetUpCrasAudioHandler(audio_nodes);
768
769 // Verify the audio devices size.
770 AudioDeviceList audio_devices;
771 cras_audio_handler_->GetAudioDevices(&audio_devices);
772 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
773 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
774
775 // Verify the usb headphone is selected as the active output initially.
776 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
777 AudioDevice active_output;
778 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
779 EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
780 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
781 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
782
783 // Plug in another usb headphone.
784 audio_nodes.clear();
785 audio_nodes.push_back(kInternalSpeaker);
786 AudioNode usb_headphone_1(kUSBHeadphone1);
787 usb_headphone_1.active = true;
788 usb_headphone_1.plugged_time = 80000000;
789 audio_nodes.push_back(usb_headphone_1);
790 AudioNode usb_headphone_2(kUSBHeadphone2);
791 usb_headphone_2.plugged_time = 90000000;
792 audio_nodes.push_back(usb_headphone_2);
793 ChangeAudioNodes(audio_nodes);
794
795 // Verify the AudioNodesChanged event is fired and new audio device is added.
796 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
797 cras_audio_handler_->GetAudioDevices(&audio_devices);
798 EXPECT_EQ(kNumStubAudioDevices + 1, audio_devices.size());
799
800 // Verify the active output device is switched to the 2nd usb headphone, which
801 // is plugged later, and ActiveOutputChanged event is fired.
802 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
803 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
804 EXPECT_EQ(kUSBHeadphone2.id, active_output.id);
805 EXPECT_EQ(kUSBHeadphone2.id, cras_audio_handler_->GetActiveOutputNode());
806 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
807
808 // Unplug the 2nd usb headphone.
809 audio_nodes.clear();
810 audio_nodes.push_back(kInternalSpeaker);
811 audio_nodes.push_back(kUSBHeadphone1);
812 ChangeAudioNodes(audio_nodes);
813
814 // Verify the AudioNodesChanged event is fired and one audio device is
815 // removed.
816 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
817 cras_audio_handler_->GetAudioDevices(&audio_devices);
818 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
819
820 // Verify the active output device is switched to the first usb headphone, and
821 // ActiveOutputChanged event is fired.
822 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
823 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
824 EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
825 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
826 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
827 }
828
829 TEST_F(CrasAudioHandlerTest, PlugUSBMic) {
830 // Set up initial audio devices, only with internal mic.
831 const size_t kNumStubAudioDevices = 1;
832 AudioNodeList audio_nodes;
833 audio_nodes.push_back(kInternalMic);
834 SetUpCrasAudioHandler(audio_nodes);
835
836 // Verify the audio devices size.
837 AudioDeviceList audio_devices;
838 cras_audio_handler_->GetAudioDevices(&audio_devices);
839 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
840 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
841
842 // Verify the internal mic is selected as the active output.
843 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
844 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
845 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
846
847 // Plug the USB Mic.
848 audio_nodes.push_back(kUSBMic);
849 ChangeAudioNodes(audio_nodes);
850
851 // Verify the AudioNodesChanged event is fired and new audio device is added.
852 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
853 cras_audio_handler_->GetAudioDevices(&audio_devices);
854 EXPECT_EQ(kNumStubAudioDevices + 1, audio_devices.size());
855
856 // Verify the active input device is switched to USB mic and
857 // and ActiveInputChanged event is fired.
858 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
859 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
860 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
861 }
862
863 TEST_F(CrasAudioHandlerTest, UnplugUSBMic) {
864 // Set up initial audio devices, with internal mic and USB Mic.
865 const size_t kNumStubAudioDevices = 2;
866 AudioNodeList audio_nodes;
867 audio_nodes.push_back(kInternalMic);
868 audio_nodes.push_back(kUSBMic);
869 SetUpCrasAudioHandler(audio_nodes);
870
871 // Verify the audio devices size.
872 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
873 AudioDeviceList audio_devices;
874 cras_audio_handler_->GetAudioDevices(&audio_devices);
875 EXPECT_EQ(kNumStubAudioDevices, audio_devices.size());
876
877 // Verify the USB mic is selected as the active output.
878 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
879 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
880 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
881
882 // Unplug the USB Mic.
883 audio_nodes.clear();
884 audio_nodes.push_back(kInternalMic);
885 ChangeAudioNodes(audio_nodes);
886
887 // Verify the AudioNodesChanged event is fired, and one audio device is
888 // removed.
889 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
890 cras_audio_handler_->GetAudioDevices(&audio_devices);
891 EXPECT_EQ(kNumStubAudioDevices - 1, audio_devices.size());
892
893 // Verify the active input device is switched to internal mic, and
894 // and ActiveInputChanged event is fired.
895 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
896 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
897 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
898 }
899
900 TEST_F(CrasAudioHandlerTest, SetOutputMute) {
901 AudioNodeList audio_nodes;
902 audio_nodes.push_back(kInternalSpeaker);
903 SetUpCrasAudioHandler(audio_nodes);
904 EXPECT_EQ(0, test_observer_->output_mute_changed_count());
905
906 // Mute the device.
907 cras_audio_handler_->SetOutputMute(true);
908
909 // Verify the output is muted, OnOutputMuteChanged event is fired,
910 // and mute value is saved in the preferences.
911 EXPECT_TRUE(cras_audio_handler_->IsOutputMuted());
912 EXPECT_EQ(1, test_observer_->output_mute_changed_count());
913 AudioDevice speaker(kInternalSpeaker);
914 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(speaker));
915
916 // Unmute the device.
917 cras_audio_handler_->SetOutputMute(false);
918
919 // Verify the output is unmuted, OnOutputMuteChanged event is fired,
920 // and mute value is saved in the preferences.
921 EXPECT_FALSE(cras_audio_handler_->IsOutputMuted());
922 EXPECT_EQ(2, test_observer_->output_mute_changed_count());
923 EXPECT_FALSE(audio_pref_handler_->GetMuteValue(speaker));
924 }
925
926 TEST_F(CrasAudioHandlerTest, SetInputMute) {
927 AudioNodeList audio_nodes;
928 audio_nodes.push_back(kInternalMic);
929 SetUpCrasAudioHandler(audio_nodes);
930 EXPECT_EQ(0, test_observer_->input_mute_changed_count());
931
932 // Mute the device.
933 cras_audio_handler_->SetInputMute(true);
934
935 // Verify the input is muted, OnInputMuteChanged event is fired,
936 // and mute value is saved in the preferences.
937 EXPECT_TRUE(cras_audio_handler_->IsInputMuted());
938 EXPECT_EQ(1, test_observer_->input_mute_changed_count());
939 AudioDevice internal_mic(kInternalMic);
940 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_mic));
941
942 // Unmute the device.
943 cras_audio_handler_->SetInputMute(false);
944
945 // Verify the input is unmuted, OnInputMuteChanged event is fired,
946 // and mute value is saved in the preferences.
947 EXPECT_FALSE(cras_audio_handler_->IsInputMuted());
948 EXPECT_EQ(2, test_observer_->input_mute_changed_count());
949 EXPECT_FALSE(audio_pref_handler_->GetMuteValue(internal_mic));
950 }
951
952 TEST_F(CrasAudioHandlerTest, SetOutputVolumePercent) {
953 AudioNodeList audio_nodes;
954 audio_nodes.push_back(kInternalSpeaker);
955 SetUpCrasAudioHandler(audio_nodes);
956 EXPECT_EQ(0, test_observer_->output_volume_changed_count());
957
958 cras_audio_handler_->SetOutputVolumePercent(60);
959
960 // Verify the output volume is changed to the designated value,
961 // OnOutputVolumeChanged event is fired, and the device volume value
962 // is saved the preferences.
963 const int kVolume = 60;
964 EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent());
965 EXPECT_EQ(1, test_observer_->output_volume_changed_count());
966 AudioDevice device;
967 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&device));
968 EXPECT_EQ(device.id, kInternalSpeaker.id);
969 EXPECT_EQ(kVolume, audio_pref_handler_->GetVolumeGainValue(device));
970 }
971
972 TEST_F(CrasAudioHandlerTest, SetInputGainPercent) {
973 AudioNodeList audio_nodes;
974 audio_nodes.push_back(kInternalMic);
975 SetUpCrasAudioHandler(audio_nodes);
976 EXPECT_EQ(0, test_observer_->input_gain_changed_count());
977
978 cras_audio_handler_->SetInputGainPercent(60);
979
980 // Verify the input gain changed to the designated value,
981 // OnInputGainChanged event is fired, and the device gain value
982 // is saved in the preferences.
983 const int kGain = 60;
984 EXPECT_EQ(kGain, cras_audio_handler_->GetInputGainPercent());
985 EXPECT_EQ(1, test_observer_->input_gain_changed_count());
986 AudioDevice internal_mic(kInternalMic);
987 EXPECT_EQ(kGain, audio_pref_handler_->GetVolumeGainValue(internal_mic));
988 }
989
990 TEST_F(CrasAudioHandlerTest, SetMuteForDevice) {
991 AudioNodeList audio_nodes;
992 audio_nodes.push_back(kInternalSpeaker);
993 audio_nodes.push_back(kHeadphone);
994 audio_nodes.push_back(kInternalMic);
995 audio_nodes.push_back(kUSBMic);
996 SetUpCrasAudioHandler(audio_nodes);
997
998 // Mute the active output device.
999 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
1000 cras_audio_handler_->SetMuteForDevice(kHeadphone.id, true);
1001
1002 // Verify the headphone is muted and mute value is saved in the preferences.
1003 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kHeadphone.id));
1004 AudioDevice headphone(kHeadphone);
1005 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(headphone));
1006
1007 // Mute the non-active output device.
1008 cras_audio_handler_->SetMuteForDevice(kInternalSpeaker.id, true);
1009
1010 // Verify the internal speaker is muted and mute value is saved in the
1011 // preferences.
1012 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kInternalSpeaker.id));
1013 AudioDevice internal_speaker(kInternalSpeaker);
1014 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_speaker));
1015
1016 // Mute the active input device.
1017 EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetActiveInputNode());
1018 cras_audio_handler_->SetMuteForDevice(kUSBMic.id, true);
1019
1020 // Verify the USB Mic is muted and mute state is saved in the preferences.
1021 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kUSBMic.id));
1022 AudioDevice usb_mic(kUSBMic);
1023 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(usb_mic));
1024
1025 // Mute the non-active input device.
1026 cras_audio_handler_->SetMuteForDevice(kInternalMic.id, true);
1027
1028 // Verify the internal mic is muted and mute value is saved in the
1029 // preferences.
1030 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kInternalMic.id));
1031 AudioDevice internal_mic(kInternalMic);
1032 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_mic));
1033 }
1034
1035 TEST_F(CrasAudioHandlerTest, SetVolumeGainPercentForDevice) {
1036 AudioNodeList audio_nodes;
1037 audio_nodes.push_back(kInternalSpeaker);
1038 audio_nodes.push_back(kHeadphone);
1039 audio_nodes.push_back(kInternalMic);
1040 audio_nodes.push_back(kUSBMic);
1041 SetUpCrasAudioHandler(audio_nodes);
1042
1043 // Set volume percent for active output device.
1044 const int kHeadphoneVolume = 30;
1045 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
1046 cras_audio_handler_->SetVolumeGainPercentForDevice(kHeadphone.id,
1047 kHeadphoneVolume);
1048
1049 // Verify the volume percent of headphone is set, and saved in preferences.
1050 EXPECT_EQ(kHeadphoneVolume,
1051 cras_audio_handler_->GetOutputVolumePercentForDevice(
1052 kHeadphone.id));
1053 AudioDevice headphone(kHeadphone);
1054 EXPECT_EQ(kHeadphoneVolume,
1055 audio_pref_handler_->GetVolumeGainValue(headphone));
1056
1057 // Set volume percent for non-active output device.
1058 const int kSpeakerVolume = 60;
1059 cras_audio_handler_->SetVolumeGainPercentForDevice(kInternalSpeaker.id,
1060 kSpeakerVolume);
1061
1062 // Verify the volume percent of speaker is set, and saved in preferences.
1063 EXPECT_EQ(kSpeakerVolume,
1064 cras_audio_handler_->GetOutputVolumePercentForDevice(
1065 kInternalSpeaker.id));
1066 AudioDevice speaker(kInternalSpeaker);
1067 EXPECT_EQ(kSpeakerVolume,
1068 audio_pref_handler_->GetVolumeGainValue(speaker));
1069
1070 // Set gain percent for active input device.
1071 const int kUSBMicGain = 30;
1072 EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetActiveInputNode());
1073 cras_audio_handler_->SetVolumeGainPercentForDevice(kUSBMic.id,
1074 kUSBMicGain);
1075
1076 // Verify the gain percent of USB mic is set, and saved in preferences.
1077 EXPECT_EQ(kUSBMicGain,
1078 cras_audio_handler_->GetOutputVolumePercentForDevice(kUSBMic.id));
1079 AudioDevice usb_mic(kHeadphone);
1080 EXPECT_EQ(kUSBMicGain,
1081 audio_pref_handler_->GetVolumeGainValue(usb_mic));
1082
1083 // Set gain percent for non-active input device.
1084 const int kInternalMicGain = 60;
1085 cras_audio_handler_->SetVolumeGainPercentForDevice(kInternalMic.id,
1086 kInternalMicGain);
1087
1088 // Verify the gain percent of internal mic is set, and saved in preferences.
1089 EXPECT_EQ(kInternalMicGain,
1090 cras_audio_handler_->GetOutputVolumePercentForDevice(
1091 kInternalMic.id));
1092 AudioDevice internal_mic(kInternalMic);
1093 EXPECT_EQ(kInternalMicGain,
1094 audio_pref_handler_->GetVolumeGainValue(internal_mic));
1095 }
1096
1097 TEST_F(CrasAudioHandlerTest, HandleOtherDeviceType) {
1098 const size_t kNumValidAudioDevices = 4;
1099 AudioNodeList audio_nodes;
1100 audio_nodes.push_back(kInternalSpeaker);
1101 audio_nodes.push_back(kOtherTypeOutput);
1102 audio_nodes.push_back(kInternalMic);
1103 audio_nodes.push_back(kOtherTypeInput);
1104 SetUpCrasAudioHandler(audio_nodes);
1105
1106 // Verify the audio devices size.
1107 AudioDeviceList audio_devices;
1108 cras_audio_handler_->GetAudioDevices(&audio_devices);
1109 EXPECT_EQ(kNumValidAudioDevices, audio_devices.size());
1110
1111 // Verify the internal speaker has been selected as the active output,
1112 // and the output device with some randown unknown type is handled gracefully.
1113 AudioDevice active_output;
1114 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
1115 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
1116 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
1117 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1118
1119 // Ensure the internal microphone has been selected as the active input,
1120 // and the input device with some random unknown type is handled gracefully.
1121 AudioDevice active_input;
1122 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
1123 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
1124 }
1125
1126 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698