Add a FrameHostMsg_BeginNavigation IPC
[chromium-blink-merge.git] / chromeos / audio / cras_audio_handler_unittest.cc
blobef706dfa50e585f28d2f9a3cea523426fd539378
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.
5 #include "chromeos/audio/cras_audio_handler.h"
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"
17 namespace chromeos {
19 const uint64 kInternalSpeakerId = 10001;
20 const uint64 kHeadphoneId = 10002;
21 const uint64 kInternalMicId = 10003;
22 const uint64 kUSBMicId = 10004;
23 const uint64 kBluetoothHeadsetId = 10005;
24 const uint64 kHDMIOutputId = 10006;
25 const uint64 kUSBHeadphoneId1 = 10007;
26 const uint64 kUSBHeadphoneId2 = 10008;
27 const uint64 kMicJackId = 10009;
28 const uint64 kOtherTypeOutputId = 90001;
29 const uint64 kOtherTypeInputId = 90002;
31 const AudioNode kInternalSpeaker(
32 false,
33 kInternalSpeakerId,
34 "Fake Speaker",
35 "INTERNAL_SPEAKER",
36 "Speaker",
37 false,
41 const AudioNode kHeadphone(
42 false,
43 kHeadphoneId,
44 "Fake Headphone",
45 "HEADPHONE",
46 "Headphone",
47 false,
51 const AudioNode kInternalMic(
52 true,
53 kInternalMicId,
54 "Fake Mic",
55 "INTERNAL_MIC",
56 "Internal Mic",
57 false,
61 const AudioNode kMicJack(
62 true,
63 kMicJackId,
64 "Fake Mic Jack",
65 "MIC",
66 "Mic Jack",
67 false,
71 const AudioNode kUSBMic(
72 true,
73 kUSBMicId,
74 "Fake USB Mic",
75 "USB",
76 "USB Microphone",
77 false,
81 const AudioNode kOtherTypeOutput(
82 false,
83 kOtherTypeOutputId,
84 "Output Device",
85 "SOME_OTHER_TYPE",
86 "Other Type Output Device",
87 false,
91 const AudioNode kOtherTypeInput(
92 true,
93 kOtherTypeInputId,
94 "Input Device",
95 "SOME_OTHER_TYPE",
96 "Other Type Input Device",
97 false,
101 const AudioNode kBluetoothHeadset (
102 false,
103 kBluetoothHeadsetId,
104 "Bluetooth Headset",
105 "BLUETOOTH",
106 "Bluetooth Headset 1",
107 false,
111 const AudioNode kHDMIOutput (
112 false,
113 kHDMIOutputId,
114 "HDMI output",
115 "HDMI",
116 "HDMI output",
117 false,
121 const AudioNode kUSBHeadphone1 (
122 false,
123 kUSBHeadphoneId1,
124 "USB Headphone",
125 "USB",
126 "USB Headphone 1",
127 false,
131 const AudioNode kUSBHeadphone2 (
132 false,
133 kUSBHeadphoneId2,
134 "USB Headphone",
135 "USB",
136 "USB Headphone 1",
137 false,
142 class TestObserver : public chromeos::CrasAudioHandler::AudioObserver {
143 public:
144 TestObserver() : active_output_node_changed_count_(0),
145 active_input_node_changed_count_(0),
146 audio_nodes_changed_count_(0),
147 output_mute_changed_count_(0),
148 input_mute_changed_count_(0),
149 output_volume_changed_count_(0),
150 input_gain_changed_count_(0) {
153 int active_output_node_changed_count() const {
154 return active_output_node_changed_count_;
157 int active_input_node_changed_count() const {
158 return active_input_node_changed_count_;
161 int audio_nodes_changed_count() const {
162 return audio_nodes_changed_count_;
165 int output_mute_changed_count() const {
166 return output_mute_changed_count_;
169 int input_mute_changed_count() const {
170 return input_mute_changed_count_;
173 int output_volume_changed_count() const {
174 return output_volume_changed_count_;
177 int input_gain_changed_count() const {
178 return input_gain_changed_count_;
181 virtual ~TestObserver() {}
183 protected:
184 // chromeos::CrasAudioHandler::AudioObserver overrides.
185 virtual void OnActiveOutputNodeChanged() OVERRIDE {
186 ++active_output_node_changed_count_;
189 virtual void OnActiveInputNodeChanged() OVERRIDE {
190 ++active_input_node_changed_count_;
193 virtual void OnAudioNodesChanged() OVERRIDE {
194 ++audio_nodes_changed_count_;
197 virtual void OnOutputMuteChanged() OVERRIDE {
198 ++output_mute_changed_count_;
201 virtual void OnInputMuteChanged() OVERRIDE {
202 ++input_mute_changed_count_;
205 virtual void OnOutputVolumeChanged() OVERRIDE {
206 ++output_volume_changed_count_;
209 virtual void OnInputGainChanged() OVERRIDE {
210 ++input_gain_changed_count_;
213 private:
214 int active_output_node_changed_count_;
215 int active_input_node_changed_count_;
216 int audio_nodes_changed_count_;
217 int output_mute_changed_count_;
218 int input_mute_changed_count_;
219 int output_volume_changed_count_;
220 int input_gain_changed_count_;
222 DISALLOW_COPY_AND_ASSIGN(TestObserver);
225 class CrasAudioHandlerTest : public testing::Test {
226 public:
227 CrasAudioHandlerTest() : cras_audio_handler_(NULL),
228 cras_audio_client_stub_(NULL) {
230 virtual ~CrasAudioHandlerTest() {}
232 virtual void SetUp() OVERRIDE {
235 virtual void TearDown() OVERRIDE {
236 cras_audio_handler_->RemoveAudioObserver(test_observer_.get());
237 test_observer_.reset();
238 CrasAudioHandler::Shutdown();
239 audio_pref_handler_ = NULL;
240 DBusThreadManager::Shutdown();
243 void SetUpCrasAudioHandler(const AudioNodeList& audio_nodes) {
244 DBusThreadManager::InitializeWithStub();
245 cras_audio_client_stub_ = static_cast<CrasAudioClientStubImpl*>(
246 DBusThreadManager::Get()->GetCrasAudioClient());
247 cras_audio_client_stub_->SetAudioDevices(audio_nodes);
248 audio_pref_handler_ = new AudioDevicesPrefHandlerStub();
249 CrasAudioHandler::Initialize(audio_pref_handler_);
250 cras_audio_handler_ = CrasAudioHandler::Get();
251 test_observer_.reset(new TestObserver);
252 cras_audio_handler_->AddAudioObserver(test_observer_.get());
253 message_loop_.RunUntilIdle();
256 void ChangeAudioNodes(const AudioNodeList& audio_nodes) {
257 cras_audio_client_stub_->ChangeAudioNodes(audio_nodes);
258 message_loop_.RunUntilIdle();
261 protected:
262 base::MessageLoopForUI message_loop_;
263 CrasAudioHandler* cras_audio_handler_; // Not owned.
264 CrasAudioClientStubImpl* cras_audio_client_stub_; // Not owned.
265 scoped_ptr<TestObserver> test_observer_;
266 scoped_refptr<AudioDevicesPrefHandlerStub> audio_pref_handler_;
268 private:
269 DISALLOW_COPY_AND_ASSIGN(CrasAudioHandlerTest);
272 TEST_F(CrasAudioHandlerTest, InitializeWithOnlyDefaultAudioDevices) {
273 AudioNodeList audio_nodes;
274 audio_nodes.push_back(kInternalSpeaker);
275 audio_nodes.push_back(kInternalMic);
276 SetUpCrasAudioHandler(audio_nodes);
278 // Verify the audio devices size.
279 AudioDeviceList audio_devices;
280 cras_audio_handler_->GetAudioDevices(&audio_devices);
281 EXPECT_EQ(audio_nodes.size(), audio_devices.size());
283 // Verify the internal speaker has been selected as the active output.
284 AudioDevice active_output;
285 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
286 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
287 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
288 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
290 // Ensure the internal microphone has been selected as the active input.
291 AudioDevice active_input;
292 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
293 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
296 TEST_F(CrasAudioHandlerTest, InitializeWithAlternativeAudioDevices) {
297 AudioNodeList audio_nodes;
298 audio_nodes.push_back(kInternalSpeaker);
299 audio_nodes.push_back(kHeadphone);
300 audio_nodes.push_back(kInternalMic);
301 audio_nodes.push_back(kUSBMic);
302 SetUpCrasAudioHandler(audio_nodes);
304 // Verify the audio devices size.
305 AudioDeviceList audio_devices;
306 cras_audio_handler_->GetAudioDevices(&audio_devices);
307 EXPECT_EQ(audio_nodes.size(), audio_devices.size());
309 // Verify the headphone has been selected as the active output.
310 AudioDevice active_output;
311 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
312 EXPECT_EQ(kHeadphone.id, active_output.id);
313 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
314 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
316 // Ensure the USB microphone has been selected as the active input.
317 AudioDevice active_input;
318 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
319 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
322 TEST_F(CrasAudioHandlerTest, SwitchActiveOutputDevice) {
323 AudioNodeList audio_nodes;
324 audio_nodes.push_back(kInternalSpeaker);
325 audio_nodes.push_back(kHeadphone);
326 SetUpCrasAudioHandler(audio_nodes);
327 AudioDeviceList audio_devices;
328 cras_audio_handler_->GetAudioDevices(&audio_devices);
329 EXPECT_EQ(audio_nodes.size(), audio_devices.size());
331 // Verify the initial active output device is headphone.
332 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
333 AudioDevice active_output;
334 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
335 EXPECT_EQ(kHeadphone.id, active_output.id);
336 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
338 // Switch the active output to internal speaker.
339 AudioDevice internal_speaker(kInternalSpeaker);
340 cras_audio_handler_->SwitchToDevice(internal_speaker);
342 // Verify the active output is switched to internal speaker, and the
343 // ActiveOutputNodeChanged event is fired.
344 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
345 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
346 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
347 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
350 TEST_F(CrasAudioHandlerTest, SwitchActiveInputDevice) {
351 AudioNodeList audio_nodes;
352 audio_nodes.push_back(kInternalMic);
353 audio_nodes.push_back(kUSBMic);
354 SetUpCrasAudioHandler(audio_nodes);
355 AudioDeviceList audio_devices;
356 cras_audio_handler_->GetAudioDevices(&audio_devices);
357 EXPECT_EQ(audio_nodes.size(), audio_devices.size());
359 // Verify the initial active input device is USB mic.
360 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
361 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
363 // Switch the active input to internal mic.
364 AudioDevice internal_mic(kInternalMic);
365 cras_audio_handler_->SwitchToDevice(internal_mic);
367 // Verify the active output is switched to internal speaker, and the active
368 // ActiveInputNodeChanged event is fired.
369 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
370 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
373 TEST_F(CrasAudioHandlerTest, PlugHeadphone) {
374 // Set up initial audio devices, only with internal speaker.
375 AudioNodeList audio_nodes;
376 audio_nodes.push_back(kInternalSpeaker);
377 SetUpCrasAudioHandler(audio_nodes);
378 const size_t init_nodes_size = audio_nodes.size();
380 // Verify the audio devices size.
381 AudioDeviceList audio_devices;
382 cras_audio_handler_->GetAudioDevices(&audio_devices);
383 EXPECT_EQ(init_nodes_size, audio_devices.size());
384 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
386 // Verify the internal speaker has been selected as the active output.
387 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
388 AudioDevice active_output;
389 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
390 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
391 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
392 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
394 // Plug the headphone.
395 audio_nodes.clear();
396 AudioNode internal_speaker(kInternalSpeaker);
397 internal_speaker.active = true;
398 audio_nodes.push_back(internal_speaker);
399 audio_nodes.push_back(kHeadphone);
400 ChangeAudioNodes(audio_nodes);
402 // Verify the AudioNodesChanged event is fired and new audio device is added.
403 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
404 cras_audio_handler_->GetAudioDevices(&audio_devices);
405 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
407 // Verify the active output device is switched to headphone and
408 // ActiveOutputChanged event is fired.
409 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
410 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
411 EXPECT_EQ(kHeadphone.id, active_output.id);
412 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
413 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
416 TEST_F(CrasAudioHandlerTest, UnplugHeadphone) {
417 // Set up initial audio devices, with internal speaker and headphone.
418 AudioNodeList audio_nodes;
419 audio_nodes.push_back(kInternalSpeaker);
420 audio_nodes.push_back(kHeadphone);
421 SetUpCrasAudioHandler(audio_nodes);
422 const size_t init_nodes_size = audio_nodes.size();
424 // Verify the audio devices size.
425 AudioDeviceList audio_devices;
426 cras_audio_handler_->GetAudioDevices(&audio_devices);
427 EXPECT_EQ(init_nodes_size, audio_devices.size());
428 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
430 // Verify the headphone has been selected as the active output.
431 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
432 AudioDevice active_output;
433 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
434 EXPECT_EQ(kHeadphone.id, active_output.id);
435 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
436 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
438 // Unplug the headphone.
439 audio_nodes.clear();
440 audio_nodes.push_back(kInternalSpeaker);
441 ChangeAudioNodes(audio_nodes);
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(init_nodes_size - 1, audio_devices.size());
449 // Verify the active output device is switched to internal speaker and
450 // ActiveOutputChanged event is fired.
451 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
452 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
453 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
454 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
455 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
458 TEST_F(CrasAudioHandlerTest, InitializeWithBluetoothHeadset) {
459 AudioNodeList audio_nodes;
460 audio_nodes.push_back(kInternalSpeaker);
461 audio_nodes.push_back(kBluetoothHeadset);
462 SetUpCrasAudioHandler(audio_nodes);
464 // Verify the audio devices size.
465 AudioDeviceList audio_devices;
466 cras_audio_handler_->GetAudioDevices(&audio_devices);
467 EXPECT_EQ(audio_nodes.size(), audio_devices.size());
468 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
470 // Verify the bluetooth headset has been selected as the active output.
471 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
472 AudioDevice active_output;
473 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
474 EXPECT_EQ(kBluetoothHeadset.id, active_output.id);
475 EXPECT_EQ(kBluetoothHeadset.id, cras_audio_handler_->GetActiveOutputNode());
476 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
479 TEST_F(CrasAudioHandlerTest, ConnectAndDisconnectBluetoothHeadset) {
480 // Initialize with internal speaker and headphone.
481 AudioNodeList audio_nodes;
482 audio_nodes.push_back(kInternalSpeaker);
483 audio_nodes.push_back(kHeadphone);
484 SetUpCrasAudioHandler(audio_nodes);
485 const size_t init_nodes_size = audio_nodes.size();
487 // Verify the audio devices size.
488 AudioDeviceList audio_devices;
489 cras_audio_handler_->GetAudioDevices(&audio_devices);
490 EXPECT_EQ(init_nodes_size, audio_devices.size());
491 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
493 // Verify the headphone is selected as the active output initially.
494 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
495 AudioDevice active_output;
496 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
497 EXPECT_EQ(kHeadphone.id, active_output.id);
498 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
499 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
501 // Connect to bluetooth headset. Since it is plugged in later than
502 // headphone, active output should be switched to it.
503 audio_nodes.clear();
504 audio_nodes.push_back(kInternalSpeaker);
505 AudioNode headphone(kHeadphone);
506 headphone.plugged_time = 80000000;
507 headphone.active = true;
508 audio_nodes.push_back(headphone);
509 AudioNode bluetooth_headset(kBluetoothHeadset);
510 bluetooth_headset.plugged_time = 90000000;
511 audio_nodes.push_back(bluetooth_headset);
512 ChangeAudioNodes(audio_nodes);
514 // Verify the AudioNodesChanged event is fired and new audio device is added.
515 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
516 cras_audio_handler_->GetAudioDevices(&audio_devices);
517 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
519 // Verify the active output device is switched to bluetooth headset, and
520 // ActiveOutputChanged event is fired.
521 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
522 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
523 EXPECT_EQ(kBluetoothHeadset.id, active_output.id);
524 EXPECT_EQ(kBluetoothHeadset.id, cras_audio_handler_->GetActiveOutputNode());
525 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
527 // Disconnect bluetooth headset.
528 audio_nodes.clear();
529 audio_nodes.push_back(kInternalSpeaker);
530 headphone.active = false;
531 audio_nodes.push_back(headphone);
532 ChangeAudioNodes(audio_nodes);
534 // Verify the AudioNodesChanged event is fired and one audio device is
535 // removed.
536 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
537 cras_audio_handler_->GetAudioDevices(&audio_devices);
538 EXPECT_EQ(init_nodes_size, audio_devices.size());
540 // Verify the active output device is switched to headphone, and
541 // ActiveOutputChanged event is fired.
542 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
543 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
544 EXPECT_EQ(kHeadphone.id, active_output.id);
545 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
546 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
549 TEST_F(CrasAudioHandlerTest, InitializeWithHDMIOutput) {
550 AudioNodeList audio_nodes;
551 audio_nodes.push_back(kInternalSpeaker);
552 audio_nodes.push_back(kHDMIOutput);
553 SetUpCrasAudioHandler(audio_nodes);
555 // Verify the audio devices size.
556 AudioDeviceList audio_devices;
557 cras_audio_handler_->GetAudioDevices(&audio_devices);
558 EXPECT_EQ(audio_nodes.size(), audio_devices.size());
559 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
561 // Verify the HDMI device has been selected as the active output.
562 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
563 AudioDevice active_output;
564 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
565 EXPECT_EQ(kHDMIOutput.id, active_output.id);
566 EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetActiveOutputNode());
567 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
570 TEST_F(CrasAudioHandlerTest, ConnectAndDisconnectHDMIOutput) {
571 // Initialize with internal speaker.
572 AudioNodeList audio_nodes;
573 audio_nodes.push_back(kInternalSpeaker);
574 SetUpCrasAudioHandler(audio_nodes);
575 const size_t init_nodes_size = audio_nodes.size();
577 // Verify the audio devices size.
578 AudioDeviceList audio_devices;
579 cras_audio_handler_->GetAudioDevices(&audio_devices);
580 EXPECT_EQ(init_nodes_size, audio_devices.size());
581 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
583 // Verify the internal speaker is selected as the active output initially.
584 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
585 AudioDevice active_output;
586 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
587 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
588 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
589 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
591 // Connect to HDMI output.
592 audio_nodes.clear();
593 AudioNode internal_speaker(kInternalSpeaker);
594 internal_speaker.active = true;
595 internal_speaker.plugged_time = 80000000;
596 audio_nodes.push_back(internal_speaker);
597 AudioNode hdmi(kHDMIOutput);
598 hdmi.plugged_time = 90000000;
599 audio_nodes.push_back(hdmi);
600 ChangeAudioNodes(audio_nodes);
602 // Verify the AudioNodesChanged event is fired and new audio device is added.
603 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
604 cras_audio_handler_->GetAudioDevices(&audio_devices);
605 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
607 // Verify the active output device is switched to hdmi output, and
608 // ActiveOutputChanged event is fired.
609 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
610 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
611 EXPECT_EQ(kHDMIOutput.id, active_output.id);
612 EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetActiveOutputNode());
613 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
615 // Disconnect hdmi headset.
616 audio_nodes.clear();
617 audio_nodes.push_back(kInternalSpeaker);
618 ChangeAudioNodes(audio_nodes);
620 // Verify the AudioNodesChanged event is fired and one audio device is
621 // removed.
622 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
623 cras_audio_handler_->GetAudioDevices(&audio_devices);
624 EXPECT_EQ(init_nodes_size, audio_devices.size());
626 // Verify the active output device is switched to internal speaker, and
627 // ActiveOutputChanged event is fired.
628 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
629 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
630 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
631 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
632 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
635 TEST_F(CrasAudioHandlerTest, HandleHeadphoneAndHDMIOutput) {
636 // Initialize with internal speaker, headphone and HDMI output.
637 AudioNodeList audio_nodes;
638 audio_nodes.push_back(kInternalSpeaker);
639 audio_nodes.push_back(kHeadphone);
640 audio_nodes.push_back(kHDMIOutput);
641 SetUpCrasAudioHandler(audio_nodes);
642 const size_t init_nodes_size = audio_nodes.size();
644 // Verify the audio devices size.
645 AudioDeviceList audio_devices;
646 cras_audio_handler_->GetAudioDevices(&audio_devices);
647 EXPECT_EQ(init_nodes_size, audio_devices.size());
648 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
650 // Verify the headphone is selected as the active output initially.
651 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
652 AudioDevice active_output;
653 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
654 EXPECT_EQ(kHeadphone.id, active_output.id);
655 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
656 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
658 // Disconnect HDMI output.
659 audio_nodes.clear();
660 audio_nodes.push_back(kInternalSpeaker);
661 audio_nodes.push_back(kHDMIOutput);
662 ChangeAudioNodes(audio_nodes);
664 // Verify the AudioNodesChanged event is fired and one audio device is
665 // removed.
666 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
667 cras_audio_handler_->GetAudioDevices(&audio_devices);
668 EXPECT_EQ(init_nodes_size - 1, audio_devices.size());
670 // Verify the active output device is switched to HDMI output, and
671 // ActiveOutputChanged event is fired.
672 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
673 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
674 EXPECT_EQ(kHDMIOutput.id, active_output.id);
675 EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetActiveOutputNode());
676 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
679 TEST_F(CrasAudioHandlerTest, InitializeWithUSBHeadphone) {
680 AudioNodeList audio_nodes;
681 audio_nodes.push_back(kInternalSpeaker);
682 audio_nodes.push_back(kUSBHeadphone1);
683 SetUpCrasAudioHandler(audio_nodes);
685 // Verify the audio devices size.
686 AudioDeviceList audio_devices;
687 cras_audio_handler_->GetAudioDevices(&audio_devices);
688 EXPECT_EQ(audio_nodes.size(), audio_devices.size());
689 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
691 // Verify the usb headphone has been selected as the active output.
692 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
693 AudioDevice active_output;
694 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
695 EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
696 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
697 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
700 TEST_F(CrasAudioHandlerTest, PlugAndUnplugUSBHeadphone) {
701 // Initialize with internal speaker.
702 AudioNodeList audio_nodes;
703 audio_nodes.push_back(kInternalSpeaker);
704 SetUpCrasAudioHandler(audio_nodes);
705 const size_t init_nodes_size = audio_nodes.size();
707 // Verify the audio devices size.
708 AudioDeviceList audio_devices;
709 cras_audio_handler_->GetAudioDevices(&audio_devices);
710 EXPECT_EQ(init_nodes_size, audio_devices.size());
711 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
713 // Verify the internal speaker is selected as the active output initially.
714 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
715 AudioDevice active_output;
716 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
717 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
718 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
719 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
721 // Plug in usb headphone
722 audio_nodes.clear();
723 AudioNode internal_speaker(kInternalSpeaker);
724 internal_speaker.active = true;
725 internal_speaker.plugged_time = 80000000;
726 audio_nodes.push_back(internal_speaker);
727 AudioNode usb_headphone(kUSBHeadphone1);
728 usb_headphone.plugged_time = 90000000;
729 audio_nodes.push_back(usb_headphone);
730 ChangeAudioNodes(audio_nodes);
732 // Verify the AudioNodesChanged event is fired and new audio device is added.
733 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
734 cras_audio_handler_->GetAudioDevices(&audio_devices);
735 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
737 // Verify the active output device is switched to usb headphone, and
738 // ActiveOutputChanged event is fired.
739 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
740 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
741 EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
742 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
743 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
745 // Unplug usb headphone.
746 audio_nodes.clear();
747 audio_nodes.push_back(kInternalSpeaker);
748 ChangeAudioNodes(audio_nodes);
750 // Verify the AudioNodesChanged event is fired and one audio device is
751 // removed.
752 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
753 cras_audio_handler_->GetAudioDevices(&audio_devices);
754 EXPECT_EQ(init_nodes_size, audio_devices.size());
756 // Verify the active output device is switched to internal speaker, and
757 // ActiveOutputChanged event is fired.
758 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
759 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
760 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
761 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
762 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
765 TEST_F(CrasAudioHandlerTest, HandleMultipleUSBHeadphones) {
766 // Initialize with internal speaker and one usb headphone.
767 AudioNodeList audio_nodes;
768 audio_nodes.push_back(kInternalSpeaker);
769 audio_nodes.push_back(kUSBHeadphone1);
770 SetUpCrasAudioHandler(audio_nodes);
771 const size_t init_nodes_size = audio_nodes.size();
773 // Verify the audio devices size.
774 AudioDeviceList audio_devices;
775 cras_audio_handler_->GetAudioDevices(&audio_devices);
776 EXPECT_EQ(init_nodes_size, audio_devices.size());
777 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
779 // Verify the usb headphone is selected as the active output initially.
780 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
781 AudioDevice active_output;
782 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
783 EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
784 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
785 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
787 // Plug in another usb headphone.
788 audio_nodes.clear();
789 audio_nodes.push_back(kInternalSpeaker);
790 AudioNode usb_headphone_1(kUSBHeadphone1);
791 usb_headphone_1.active = true;
792 usb_headphone_1.plugged_time = 80000000;
793 audio_nodes.push_back(usb_headphone_1);
794 AudioNode usb_headphone_2(kUSBHeadphone2);
795 usb_headphone_2.plugged_time = 90000000;
796 audio_nodes.push_back(usb_headphone_2);
797 ChangeAudioNodes(audio_nodes);
799 // Verify the AudioNodesChanged event is fired and new audio device is added.
800 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
801 cras_audio_handler_->GetAudioDevices(&audio_devices);
802 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
804 // Verify the active output device is switched to the 2nd usb headphone, which
805 // is plugged later, and ActiveOutputChanged event is fired.
806 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
807 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
808 EXPECT_EQ(kUSBHeadphone2.id, active_output.id);
809 EXPECT_EQ(kUSBHeadphone2.id, cras_audio_handler_->GetActiveOutputNode());
810 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
812 // Unplug the 2nd usb headphone.
813 audio_nodes.clear();
814 audio_nodes.push_back(kInternalSpeaker);
815 audio_nodes.push_back(kUSBHeadphone1);
816 ChangeAudioNodes(audio_nodes);
818 // Verify the AudioNodesChanged event is fired and one audio device is
819 // removed.
820 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
821 cras_audio_handler_->GetAudioDevices(&audio_devices);
822 EXPECT_EQ(init_nodes_size, audio_devices.size());
824 // Verify the active output device is switched to the first usb headphone, and
825 // ActiveOutputChanged event is fired.
826 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
827 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
828 EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
829 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
830 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
833 TEST_F(CrasAudioHandlerTest, UnplugUSBHeadphonesWithActiveSpeaker) {
834 // Initialize with internal speaker and one usb headphone.
835 AudioNodeList audio_nodes;
836 audio_nodes.push_back(kInternalSpeaker);
837 audio_nodes.push_back(kUSBHeadphone1);
838 SetUpCrasAudioHandler(audio_nodes);
839 const size_t init_nodes_size = audio_nodes.size();
841 // Verify the audio devices size.
842 AudioDeviceList audio_devices;
843 cras_audio_handler_->GetAudioDevices(&audio_devices);
844 EXPECT_EQ(init_nodes_size, audio_devices.size());
845 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
847 // Verify the usb headphone is selected as the active output initially.
848 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
849 AudioDevice active_output;
850 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
851 EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
852 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
853 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
855 // Plug in the headphone jack.
856 audio_nodes.clear();
857 audio_nodes.push_back(kInternalSpeaker);
858 AudioNode usb_headphone_1(kUSBHeadphone1);
859 usb_headphone_1.active = true;
860 usb_headphone_1.plugged_time = 80000000;
861 audio_nodes.push_back(usb_headphone_1);
862 AudioNode headphone_jack(kHeadphone);
863 headphone_jack.plugged_time = 90000000;
864 audio_nodes.push_back(headphone_jack);
865 ChangeAudioNodes(audio_nodes);
867 // Verify the AudioNodesChanged event is fired and new audio device is added.
868 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
869 cras_audio_handler_->GetAudioDevices(&audio_devices);
870 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
872 // Verify the active output device is switched to the headphone jack, which
873 // is plugged later, and ActiveOutputChanged event is fired.
874 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
875 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
876 EXPECT_EQ(kHeadphone.id, active_output.id);
877 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
878 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
880 // Select the speaker to be the active output device.
881 AudioDevice internal_speaker(kInternalSpeaker);
882 cras_audio_handler_->SwitchToDevice(internal_speaker);
884 // Verify the active output is switched to internal speaker, and the
885 // ActiveOutputNodeChanged event is fired.
886 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
887 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
888 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
889 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
891 // Unplug the usb headphone.
892 audio_nodes.clear();
893 AudioNode internal_speaker_node(kInternalSpeaker);
894 internal_speaker_node.active = true;
895 internal_speaker_node.plugged_time = 70000000;
896 audio_nodes.push_back(internal_speaker_node);
897 headphone_jack.active = false;
898 audio_nodes.push_back(headphone_jack);
899 ChangeAudioNodes(audio_nodes);
901 // Verify the AudioNodesChanged event is fired and one audio device is
902 // removed.
903 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
904 cras_audio_handler_->GetAudioDevices(&audio_devices);
905 EXPECT_EQ(init_nodes_size, audio_devices.size());
907 // Verify the active output device remains to be speaker.
908 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
909 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
910 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
911 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
912 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
915 TEST_F(CrasAudioHandlerTest, OneActiveAudioOutputAfterLoginNewUserSession) {
916 // This tests the case found with crbug.com/273271.
917 // Initialize with internal speaker, bluetooth headphone and headphone jack
918 // for a new chrome session after user signs out from the previous session.
919 // Headphone jack is plugged in later than bluetooth headphone, but bluetooth
920 // headphone is selected as the active output by user from previous user
921 // session.
922 AudioNodeList audio_nodes;
923 audio_nodes.push_back(kInternalSpeaker);
924 AudioNode bluetooth_headphone(kBluetoothHeadset);
925 bluetooth_headphone.active = true;
926 bluetooth_headphone.plugged_time = 70000000;
927 audio_nodes.push_back(bluetooth_headphone);
928 AudioNode headphone_jack(kHeadphone);
929 headphone_jack.plugged_time = 80000000;
930 audio_nodes.push_back(headphone_jack);
931 SetUpCrasAudioHandler(audio_nodes);
932 const size_t init_nodes_size = audio_nodes.size();
934 // Verify the audio devices size.
935 AudioDeviceList audio_devices;
936 cras_audio_handler_->GetAudioDevices(&audio_devices);
937 EXPECT_EQ(init_nodes_size, audio_devices.size());
938 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
940 // Verify the headphone jack is selected as the active output and all other
941 // audio devices are not active.
942 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
943 AudioDevice active_output;
944 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
945 EXPECT_EQ(kHeadphone.id, active_output.id);
946 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
947 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
948 for (size_t i = 0; i < audio_devices.size(); ++i) {
949 if (audio_devices[i].id != kHeadphone.id)
950 EXPECT_FALSE(audio_devices[i].active);
954 TEST_F(CrasAudioHandlerTest, BluetoothSpeakerIdChangedOnFly) {
955 // Initialize with internal speaker and bluetooth headset.
956 AudioNodeList audio_nodes;
957 audio_nodes.push_back(kInternalSpeaker);
958 audio_nodes.push_back(kBluetoothHeadset);
959 SetUpCrasAudioHandler(audio_nodes);
960 const size_t init_nodes_size = audio_nodes.size();
962 // Verify the audio devices size.
963 AudioDeviceList audio_devices;
964 cras_audio_handler_->GetAudioDevices(&audio_devices);
965 EXPECT_EQ(init_nodes_size, audio_devices.size());
966 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
968 // Verify the bluetooth headset is selected as the active output and all other
969 // audio devices are not active.
970 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
971 AudioDevice active_output;
972 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
973 EXPECT_EQ(kBluetoothHeadset.id, active_output.id);
974 EXPECT_EQ(kBluetoothHeadset.id, cras_audio_handler_->GetActiveOutputNode());
975 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
977 // Cras changes the bluetooth headset's id on the fly.
978 audio_nodes.clear();
979 AudioNode internal_speaker(kInternalSpeaker);
980 internal_speaker.active = false;
981 audio_nodes.push_back(internal_speaker);
982 AudioNode bluetooth_headphone(kBluetoothHeadset);
983 // Change bluetooth headphone id.
984 bluetooth_headphone.id = kBluetoothHeadsetId + 20000;
985 bluetooth_headphone.active = false;
986 audio_nodes.push_back(bluetooth_headphone);
987 ChangeAudioNodes(audio_nodes);
989 // Verify NodesChanged event is fired, and the audio devices size is not
990 // changed.
991 audio_devices.clear();
992 cras_audio_handler_->GetAudioDevices(&audio_devices);
993 EXPECT_EQ(init_nodes_size, audio_devices.size());
994 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
996 // Verify ActiveOutputNodeChanged event is fired, and active device should be
997 // bluetooth headphone.
998 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
999 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
1000 EXPECT_EQ(bluetooth_headphone.id, active_output.id);
1003 TEST_F(CrasAudioHandlerTest, PlugUSBMic) {
1004 // Set up initial audio devices, only with internal mic.
1005 AudioNodeList audio_nodes;
1006 audio_nodes.push_back(kInternalMic);
1007 SetUpCrasAudioHandler(audio_nodes);
1008 const size_t init_nodes_size = audio_nodes.size();
1010 // Verify the audio devices size.
1011 AudioDeviceList audio_devices;
1012 cras_audio_handler_->GetAudioDevices(&audio_devices);
1013 EXPECT_EQ(init_nodes_size, audio_devices.size());
1014 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
1016 // Verify the internal mic is selected as the active input.
1017 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
1018 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
1019 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
1021 // Plug the USB Mic.
1022 audio_nodes.clear();
1023 AudioNode internal_mic(kInternalMic);
1024 internal_mic.active = true;
1025 audio_nodes.push_back(internal_mic);
1026 audio_nodes.push_back(kUSBMic);
1027 ChangeAudioNodes(audio_nodes);
1029 // Verify the AudioNodesChanged event is fired and new audio device is added.
1030 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
1031 cras_audio_handler_->GetAudioDevices(&audio_devices);
1032 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
1034 // Verify the active input device is switched to USB mic and
1035 // and ActiveInputChanged event is fired.
1036 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
1037 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
1038 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
1041 TEST_F(CrasAudioHandlerTest, UnplugUSBMic) {
1042 // Set up initial audio devices, with internal mic and USB Mic.
1043 AudioNodeList audio_nodes;
1044 audio_nodes.push_back(kInternalMic);
1045 audio_nodes.push_back(kUSBMic);
1046 SetUpCrasAudioHandler(audio_nodes);
1047 const size_t init_nodes_size = audio_nodes.size();
1049 // Verify the audio devices size.
1050 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
1051 AudioDeviceList audio_devices;
1052 cras_audio_handler_->GetAudioDevices(&audio_devices);
1053 EXPECT_EQ(init_nodes_size, audio_devices.size());
1055 // Verify the USB mic is selected as the active output.
1056 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
1057 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
1058 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
1060 // Unplug the USB Mic.
1061 audio_nodes.clear();
1062 audio_nodes.push_back(kInternalMic);
1063 ChangeAudioNodes(audio_nodes);
1065 // Verify the AudioNodesChanged event is fired, and one audio device is
1066 // removed.
1067 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
1068 cras_audio_handler_->GetAudioDevices(&audio_devices);
1069 EXPECT_EQ(init_nodes_size - 1, audio_devices.size());
1071 // Verify the active input device is switched to internal mic, and
1072 // and ActiveInputChanged event is fired.
1073 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
1074 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
1075 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
1078 TEST_F(CrasAudioHandlerTest, PlugUSBMicNotAffectActiveOutput) {
1079 // Set up initial audio devices.
1080 AudioNodeList audio_nodes;
1081 audio_nodes.push_back(kInternalSpeaker);
1082 audio_nodes.push_back(kHeadphone);
1083 audio_nodes.push_back(kInternalMic);
1084 SetUpCrasAudioHandler(audio_nodes);
1085 const size_t init_nodes_size = audio_nodes.size();
1087 // Verify the audio devices size.
1088 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
1089 AudioDeviceList audio_devices;
1090 cras_audio_handler_->GetAudioDevices(&audio_devices);
1091 EXPECT_EQ(init_nodes_size, audio_devices.size());
1093 // Verify the internal mic is selected as the active input.
1094 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
1095 EXPECT_EQ(kInternalMicId, cras_audio_handler_->GetActiveInputNode());
1096 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
1098 // Verify the headphone is selected as the active output.
1099 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
1100 EXPECT_EQ(kHeadphoneId, cras_audio_handler_->GetActiveOutputNode());
1101 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1103 // Switch the active output to internal speaker.
1104 AudioDevice internal_speaker(kInternalSpeaker);
1105 cras_audio_handler_->SwitchToDevice(internal_speaker);
1107 // Verify the active output is switched to internal speaker, and the
1108 // ActiveOutputNodeChanged event is fired.
1109 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
1110 AudioDevice active_output;
1111 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
1112 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
1113 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
1115 // Plug the USB Mic.
1116 audio_nodes.clear();
1117 AudioNode internal_speaker_node(kInternalSpeaker);
1118 internal_speaker_node.active = true;
1119 audio_nodes.push_back(internal_speaker_node);
1120 audio_nodes.push_back(kHeadphone);
1121 AudioNode internal_mic(kInternalMic);
1122 internal_mic.active = true;
1123 audio_nodes.push_back(internal_mic);
1124 audio_nodes.push_back(kUSBMic);
1125 ChangeAudioNodes(audio_nodes);
1127 // Verify the AudioNodesChanged event is fired, one new device is added.
1128 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
1129 cras_audio_handler_->GetAudioDevices(&audio_devices);
1130 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
1132 // Verify the active input device is switched to USB mic, and
1133 // and ActiveInputChanged event is fired.
1134 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
1135 EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetActiveInputNode());
1136 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
1138 // Verify the active output device is not changed.
1139 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
1140 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
1141 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
1142 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
1145 TEST_F(CrasAudioHandlerTest, PlugHeadphoneAutoUnplugSpeakerWithActiveUSB) {
1146 // Set up initial audio devices.
1147 AudioNodeList audio_nodes;
1148 audio_nodes.push_back(kUSBHeadphone1);
1149 audio_nodes.push_back(kInternalSpeaker);
1150 audio_nodes.push_back(kInternalMic);
1151 SetUpCrasAudioHandler(audio_nodes);
1152 const size_t init_nodes_size = audio_nodes.size();
1154 // Verify the audio devices size.
1155 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
1156 AudioDeviceList audio_devices;
1157 cras_audio_handler_->GetAudioDevices(&audio_devices);
1158 EXPECT_EQ(init_nodes_size, audio_devices.size());
1160 // Verify the internal mic is selected as the active input.
1161 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
1162 EXPECT_EQ(kInternalMicId, cras_audio_handler_->GetActiveInputNode());
1163 EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
1165 // Verify the USB headphone is selected as the active output.
1166 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
1167 EXPECT_EQ(kUSBHeadphoneId1, cras_audio_handler_->GetActiveOutputNode());
1168 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1170 // Plug the headphone and auto-unplug internal speaker.
1171 audio_nodes.clear();
1172 AudioNode usb_headphone_node(kUSBHeadphone1);
1173 usb_headphone_node.active = true;
1174 audio_nodes.push_back(usb_headphone_node);
1175 AudioNode headphone_node(kHeadphone);
1176 headphone_node.plugged_time = 1000;
1177 audio_nodes.push_back(headphone_node);
1178 AudioNode internal_mic(kInternalMic);
1179 internal_mic.active = true;
1180 audio_nodes.push_back(internal_mic);
1181 ChangeAudioNodes(audio_nodes);
1183 // Verify the AudioNodesChanged event is fired, with nodes count unchanged.
1184 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
1185 cras_audio_handler_->GetAudioDevices(&audio_devices);
1186 EXPECT_EQ(init_nodes_size, audio_devices.size());
1188 // Verify the active output device is switched to headphone, and
1189 // an ActiveOutputChanged event is fired.
1190 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
1191 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
1192 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1194 // Unplug the headphone and internal speaker auto-plugs back.
1195 audio_nodes.clear();
1196 audio_nodes.push_back(kUSBHeadphone1);
1197 AudioNode internal_speaker_node(kInternalSpeaker);
1198 internal_speaker_node.plugged_time = 2000;
1199 audio_nodes.push_back(internal_speaker_node);
1200 audio_nodes.push_back(internal_mic);
1201 ChangeAudioNodes(audio_nodes);
1203 // Verify the AudioNodesChanged event is fired, with nodes count unchanged.
1204 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
1205 cras_audio_handler_->GetAudioDevices(&audio_devices);
1206 EXPECT_EQ(init_nodes_size, audio_devices.size());
1208 // Verify the active output device is switched back to USB, and
1209 // an ActiveOutputChanged event is fired.
1210 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
1211 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
1212 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1214 // Verify the active input device is not changed.
1215 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
1216 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
1219 TEST_F(CrasAudioHandlerTest, PlugMicAutoUnplugInternalMicWithActiveUSB) {
1220 // Set up initial audio devices.
1221 AudioNodeList audio_nodes;
1222 audio_nodes.push_back(kUSBHeadphone1);
1223 audio_nodes.push_back(kInternalSpeaker);
1224 audio_nodes.push_back(kUSBMic);
1225 audio_nodes.push_back(kInternalMic);
1226 SetUpCrasAudioHandler(audio_nodes);
1227 const size_t init_nodes_size = audio_nodes.size();
1229 // Verify the audio devices size.
1230 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
1231 AudioDeviceList audio_devices;
1232 cras_audio_handler_->GetAudioDevices(&audio_devices);
1233 EXPECT_EQ(init_nodes_size, audio_devices.size());
1235 // Verify the internal mic is selected as the active input.
1236 EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
1237 EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetActiveInputNode());
1238 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
1240 // Verify the internal speaker is selected as the active output.
1241 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
1242 EXPECT_EQ(kUSBHeadphoneId1, cras_audio_handler_->GetActiveOutputNode());
1243 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1245 // Plug the headphone and mic, auto-unplug internal mic and speaker.
1246 audio_nodes.clear();
1247 AudioNode usb_headphone_node(kUSBHeadphone1);
1248 usb_headphone_node.active = true;
1249 audio_nodes.push_back(usb_headphone_node);
1250 AudioNode headphone_node(kHeadphone);
1251 headphone_node.plugged_time = 1000;
1252 audio_nodes.push_back(headphone_node);
1253 AudioNode usb_mic(kUSBMic);
1254 usb_mic.active = true;
1255 audio_nodes.push_back(usb_mic);
1256 AudioNode mic_jack(kMicJack);
1257 mic_jack.plugged_time = 1000;
1258 audio_nodes.push_back(mic_jack);
1259 ChangeAudioNodes(audio_nodes);
1261 // Verify the AudioNodesChanged event is fired, with nodes count unchanged.
1262 EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
1263 cras_audio_handler_->GetAudioDevices(&audio_devices);
1264 EXPECT_EQ(init_nodes_size, audio_devices.size());
1266 // Verify the active output device is switched to headphone, and
1267 // an ActiveOutputChanged event is fired.
1268 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
1269 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
1270 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1272 // Verify the active input device is switched to mic jack, and
1273 // an ActiveInputChanged event is fired.
1274 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
1275 EXPECT_EQ(kMicJack.id, cras_audio_handler_->GetActiveInputNode());
1276 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
1278 // Unplug the headphone and internal speaker auto-plugs back.
1279 audio_nodes.clear();
1280 audio_nodes.push_back(kUSBHeadphone1);
1281 AudioNode internal_speaker_node(kInternalSpeaker);
1282 internal_speaker_node.plugged_time = 2000;
1283 audio_nodes.push_back(internal_speaker_node);
1284 audio_nodes.push_back(kUSBMic);
1285 AudioNode internal_mic(kInternalMic);
1286 internal_mic.plugged_time = 2000;
1287 audio_nodes.push_back(internal_mic);
1288 ChangeAudioNodes(audio_nodes);
1290 // Verify the AudioNodesChanged event is fired, with nodes count unchanged.
1291 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
1292 cras_audio_handler_->GetAudioDevices(&audio_devices);
1293 EXPECT_EQ(init_nodes_size, audio_devices.size());
1295 // Verify the active output device is switched back to USB, and
1296 // an ActiveOutputChanged event is fired.
1297 EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
1298 EXPECT_EQ(kUSBHeadphone1.id, cras_audio_handler_->GetActiveOutputNode());
1299 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1301 // Verify the active input device is switched back to USB mic, and
1302 // an ActiveInputChanged event is fired.
1303 EXPECT_EQ(2, test_observer_->active_input_node_changed_count());
1304 EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetActiveInputNode());
1305 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
1308 TEST_F(CrasAudioHandlerTest, MultipleNodesChangedSignalsOnPlugInHeadphone) {
1309 // Set up initial audio devices.
1310 AudioNodeList audio_nodes;
1311 audio_nodes.push_back(kInternalSpeaker);
1312 audio_nodes.push_back(kBluetoothHeadset);
1313 SetUpCrasAudioHandler(audio_nodes);
1314 const size_t init_nodes_size = audio_nodes.size();
1316 // Verify the audio devices size.
1317 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
1318 AudioDeviceList audio_devices;
1319 cras_audio_handler_->GetAudioDevices(&audio_devices);
1320 EXPECT_EQ(init_nodes_size, audio_devices.size());
1322 // Verify the bluetooth headset is selected as the active output.
1323 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
1324 EXPECT_EQ(kBluetoothHeadsetId, cras_audio_handler_->GetActiveOutputNode());
1325 AudioDevice active_output;
1326 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
1327 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1329 // Plug in headphone, but fire NodesChanged signal twice.
1330 audio_nodes.clear();
1331 audio_nodes.push_back(kInternalSpeaker);
1332 AudioNode bluetooth_headset(kBluetoothHeadset);
1333 bluetooth_headset.plugged_time = 1000;
1334 bluetooth_headset.active = true;
1335 audio_nodes.push_back(bluetooth_headset);
1336 AudioNode headphone(kHeadphone);
1337 headphone.active = false;
1338 headphone.plugged_time = 2000;
1339 audio_nodes.push_back(headphone);
1340 ChangeAudioNodes(audio_nodes);
1341 ChangeAudioNodes(audio_nodes);
1343 // Verify the active output device is set to headphone.
1344 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
1345 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
1346 EXPECT_EQ(headphone.id, cras_audio_handler_->GetActiveOutputNode());
1347 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
1348 EXPECT_EQ(headphone.id, active_output.id);
1350 // Verfiy the audio devices data is consistent, i.e., the active output device
1351 // should be headphone.
1352 cras_audio_handler_->GetAudioDevices(&audio_devices);
1353 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
1354 for (size_t i = 0; i < audio_devices.size(); ++i) {
1355 if (audio_devices[i].id == kInternalSpeaker.id)
1356 EXPECT_FALSE(audio_devices[i].active);
1357 else if (audio_devices[i].id == bluetooth_headset.id)
1358 EXPECT_FALSE(audio_devices[i].active);
1359 else if (audio_devices[i].id == headphone.id)
1360 EXPECT_TRUE(audio_devices[i].active);
1361 else
1362 NOTREACHED();
1366 TEST_F(CrasAudioHandlerTest, MultipleNodesChangedSignalsOnPlugInUSBMic) {
1367 // Set up initial audio devices.
1368 AudioNodeList audio_nodes;
1369 audio_nodes.push_back(kInternalMic);
1370 SetUpCrasAudioHandler(audio_nodes);
1371 const size_t init_nodes_size = audio_nodes.size();
1373 // Verify the audio devices size.
1374 EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
1375 AudioDeviceList audio_devices;
1376 cras_audio_handler_->GetAudioDevices(&audio_devices);
1377 EXPECT_EQ(init_nodes_size, audio_devices.size());
1379 // Verify the internal mic is selected as the active output.
1380 EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
1381 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
1382 EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
1383 EXPECT_TRUE(audio_devices[0].active);
1385 // Plug in usb mic, but fire NodesChanged signal twice.
1386 audio_nodes.clear();
1387 AudioNode internal_mic(kInternalMic);
1388 internal_mic.active = true;
1389 internal_mic.plugged_time = 1000;
1390 audio_nodes.push_back(internal_mic);
1391 AudioNode usb_mic(kUSBMic);
1392 usb_mic.active = false;
1393 usb_mic.plugged_time = 2000;
1394 audio_nodes.push_back(usb_mic);
1395 ChangeAudioNodes(audio_nodes);
1396 ChangeAudioNodes(audio_nodes);
1398 // Verify the active output device is set to headphone.
1399 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
1400 EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
1401 EXPECT_EQ(usb_mic.id, cras_audio_handler_->GetActiveInputNode());
1402 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
1404 // Verfiy the audio devices data is consistent, i.e., the active input device
1405 // should be usb mic.
1406 cras_audio_handler_->GetAudioDevices(&audio_devices);
1407 EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
1408 for (size_t i = 0; i < audio_devices.size(); ++i) {
1409 if (audio_devices[i].id == kInternalMic.id)
1410 EXPECT_FALSE(audio_devices[i].active);
1411 else if (audio_devices[i].id == usb_mic.id)
1412 EXPECT_TRUE(audio_devices[i].active);
1413 else
1414 NOTREACHED();
1418 // This is the case of crbug.com/291303.
1419 TEST_F(CrasAudioHandlerTest, MultipleNodesChangedSignalsOnSystemBoot) {
1420 // Set up audio handler with empty audio_nodes.
1421 AudioNodeList audio_nodes;
1422 SetUpCrasAudioHandler(audio_nodes);
1424 AudioNode internal_speaker(kInternalSpeaker);
1425 internal_speaker.active = false;
1426 AudioNode headphone(kHeadphone);
1427 headphone.active = false;
1428 AudioNode internal_mic(kInternalMic);
1429 internal_mic.active = false;
1430 audio_nodes.push_back(internal_speaker);
1431 audio_nodes.push_back(headphone);
1432 audio_nodes.push_back(internal_mic);
1433 const size_t init_nodes_size = audio_nodes.size();
1435 // Simulate AudioNodesChanged signal being fired twice during system boot.
1436 ChangeAudioNodes(audio_nodes);
1437 ChangeAudioNodes(audio_nodes);
1439 // Verify the active output device is set to headphone.
1440 EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
1441 EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
1442 EXPECT_EQ(headphone.id, cras_audio_handler_->GetActiveOutputNode());
1443 AudioDevice active_output;
1444 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
1445 EXPECT_EQ(headphone.id, active_output.id);
1447 // Verify the active input device id is set to internal mic.
1448 EXPECT_EQ(internal_mic.id, cras_audio_handler_->GetActiveInputNode());
1450 // Verfiy the audio devices data is consistent, i.e., the active output device
1451 // should be headphone, and the active input device should internal mic.
1452 AudioDeviceList audio_devices;
1453 cras_audio_handler_->GetAudioDevices(&audio_devices);
1454 EXPECT_EQ(init_nodes_size, audio_devices.size());
1455 for (size_t i = 0; i < audio_devices.size(); ++i) {
1456 if (audio_devices[i].id == internal_speaker.id)
1457 EXPECT_FALSE(audio_devices[i].active);
1458 else if (audio_devices[i].id == headphone.id)
1459 EXPECT_TRUE(audio_devices[i].active);
1460 else if (audio_devices[i].id == internal_mic.id)
1461 EXPECT_TRUE(audio_devices[i].active);
1462 else
1463 NOTREACHED();
1467 TEST_F(CrasAudioHandlerTest, SetOutputMute) {
1468 AudioNodeList audio_nodes;
1469 audio_nodes.push_back(kInternalSpeaker);
1470 SetUpCrasAudioHandler(audio_nodes);
1471 EXPECT_EQ(0, test_observer_->output_mute_changed_count());
1473 // Mute the device.
1474 cras_audio_handler_->SetOutputMute(true);
1476 // Verify the output is muted, OnOutputMuteChanged event is fired,
1477 // and mute value is saved in the preferences.
1478 EXPECT_TRUE(cras_audio_handler_->IsOutputMuted());
1479 EXPECT_EQ(1, test_observer_->output_mute_changed_count());
1480 AudioDevice speaker(kInternalSpeaker);
1481 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(speaker));
1483 // Unmute the device.
1484 cras_audio_handler_->SetOutputMute(false);
1486 // Verify the output is unmuted, OnOutputMuteChanged event is fired,
1487 // and mute value is saved in the preferences.
1488 EXPECT_FALSE(cras_audio_handler_->IsOutputMuted());
1489 EXPECT_EQ(2, test_observer_->output_mute_changed_count());
1490 EXPECT_FALSE(audio_pref_handler_->GetMuteValue(speaker));
1493 TEST_F(CrasAudioHandlerTest, SetInputMute) {
1494 AudioNodeList audio_nodes;
1495 audio_nodes.push_back(kInternalMic);
1496 SetUpCrasAudioHandler(audio_nodes);
1497 EXPECT_EQ(0, test_observer_->input_mute_changed_count());
1499 // Mute the device.
1500 cras_audio_handler_->SetInputMute(true);
1502 // Verify the input is muted, OnInputMuteChanged event is fired.
1503 EXPECT_TRUE(cras_audio_handler_->IsInputMuted());
1504 EXPECT_EQ(1, test_observer_->input_mute_changed_count());
1506 // Unmute the device.
1507 cras_audio_handler_->SetInputMute(false);
1509 // Verify the input is unmuted, OnInputMuteChanged event is fired.
1510 EXPECT_FALSE(cras_audio_handler_->IsInputMuted());
1511 EXPECT_EQ(2, test_observer_->input_mute_changed_count());
1514 TEST_F(CrasAudioHandlerTest, SetOutputVolumePercent) {
1515 AudioNodeList audio_nodes;
1516 audio_nodes.push_back(kInternalSpeaker);
1517 SetUpCrasAudioHandler(audio_nodes);
1518 EXPECT_EQ(0, test_observer_->output_volume_changed_count());
1520 cras_audio_handler_->SetOutputVolumePercent(60);
1522 // Verify the output volume is changed to the designated value,
1523 // OnOutputVolumeChanged event is fired, and the device volume value
1524 // is saved the preferences.
1525 const int kVolume = 60;
1526 EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent());
1527 EXPECT_EQ(1, test_observer_->output_volume_changed_count());
1528 AudioDevice device;
1529 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&device));
1530 EXPECT_EQ(device.id, kInternalSpeaker.id);
1531 EXPECT_EQ(kVolume, audio_pref_handler_->GetOutputVolumeValue(&device));
1534 TEST_F(CrasAudioHandlerTest, SetInputGainPercent) {
1535 AudioNodeList audio_nodes;
1536 audio_nodes.push_back(kInternalMic);
1537 SetUpCrasAudioHandler(audio_nodes);
1538 EXPECT_EQ(0, test_observer_->input_gain_changed_count());
1540 cras_audio_handler_->SetInputGainPercent(60);
1542 // Verify the input gain changed to the designated value,
1543 // OnInputGainChanged event is fired, and the device gain value
1544 // is saved in the preferences.
1545 const int kGain = 60;
1546 EXPECT_EQ(kGain, cras_audio_handler_->GetInputGainPercent());
1547 EXPECT_EQ(1, test_observer_->input_gain_changed_count());
1548 AudioDevice internal_mic(kInternalMic);
1549 EXPECT_EQ(kGain, audio_pref_handler_->GetInputGainValue(&internal_mic));
1552 TEST_F(CrasAudioHandlerTest, SetMuteForDevice) {
1553 AudioNodeList audio_nodes;
1554 audio_nodes.push_back(kInternalSpeaker);
1555 audio_nodes.push_back(kHeadphone);
1556 audio_nodes.push_back(kInternalMic);
1557 audio_nodes.push_back(kUSBMic);
1558 SetUpCrasAudioHandler(audio_nodes);
1560 // Mute the active output device.
1561 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
1562 cras_audio_handler_->SetMuteForDevice(kHeadphone.id, true);
1564 // Verify the headphone is muted and mute value is saved in the preferences.
1565 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kHeadphone.id));
1566 AudioDevice headphone(kHeadphone);
1567 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(headphone));
1569 // Mute the non-active output device.
1570 cras_audio_handler_->SetMuteForDevice(kInternalSpeaker.id, true);
1572 // Verify the internal speaker is muted and mute value is saved in the
1573 // preferences.
1574 EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kInternalSpeaker.id));
1575 AudioDevice internal_speaker(kInternalSpeaker);
1576 EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_speaker));
1578 // Mute the active input device.
1579 EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetActiveInputNode());
1580 cras_audio_handler_->SetMuteForDevice(kUSBMic.id, true);
1582 // Verify the USB Mic is muted.
1583 EXPECT_TRUE(cras_audio_handler_->IsInputMutedForDevice(kUSBMic.id));
1585 // Mute the non-active input device should be a no-op, see crbug.com/365050.
1586 cras_audio_handler_->SetMuteForDevice(kInternalMic.id, true);
1588 // Verify IsInputMutedForDevice returns false for non-active input device.
1589 EXPECT_FALSE(cras_audio_handler_->IsInputMutedForDevice(kInternalMic.id));
1592 TEST_F(CrasAudioHandlerTest, SetVolumeGainPercentForDevice) {
1593 AudioNodeList audio_nodes;
1594 audio_nodes.push_back(kInternalSpeaker);
1595 audio_nodes.push_back(kHeadphone);
1596 audio_nodes.push_back(kInternalMic);
1597 audio_nodes.push_back(kUSBMic);
1598 SetUpCrasAudioHandler(audio_nodes);
1600 // Set volume percent for active output device.
1601 const int kHeadphoneVolume = 30;
1602 EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetActiveOutputNode());
1603 cras_audio_handler_->SetVolumeGainPercentForDevice(kHeadphone.id,
1604 kHeadphoneVolume);
1606 // Verify the volume percent of headphone is set, and saved in preferences.
1607 EXPECT_EQ(kHeadphoneVolume,
1608 cras_audio_handler_->GetOutputVolumePercentForDevice(
1609 kHeadphone.id));
1610 AudioDevice headphone(kHeadphone);
1611 EXPECT_EQ(kHeadphoneVolume,
1612 audio_pref_handler_->GetOutputVolumeValue(&headphone));
1614 // Set volume percent for non-active output device.
1615 const int kSpeakerVolume = 60;
1616 cras_audio_handler_->SetVolumeGainPercentForDevice(kInternalSpeaker.id,
1617 kSpeakerVolume);
1619 // Verify the volume percent of speaker is set, and saved in preferences.
1620 EXPECT_EQ(kSpeakerVolume,
1621 cras_audio_handler_->GetOutputVolumePercentForDevice(
1622 kInternalSpeaker.id));
1623 AudioDevice speaker(kInternalSpeaker);
1624 EXPECT_EQ(kSpeakerVolume,
1625 audio_pref_handler_->GetOutputVolumeValue(&speaker));
1627 // Set gain percent for active input device.
1628 const int kUSBMicGain = 30;
1629 EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetActiveInputNode());
1630 cras_audio_handler_->SetVolumeGainPercentForDevice(kUSBMic.id,
1631 kUSBMicGain);
1633 // Verify the gain percent of USB mic is set, and saved in preferences.
1634 EXPECT_EQ(kUSBMicGain,
1635 cras_audio_handler_->GetOutputVolumePercentForDevice(kUSBMic.id));
1636 AudioDevice usb_mic(kHeadphone);
1637 EXPECT_EQ(kUSBMicGain,
1638 audio_pref_handler_->GetInputGainValue(&usb_mic));
1640 // Set gain percent for non-active input device.
1641 const int kInternalMicGain = 60;
1642 cras_audio_handler_->SetVolumeGainPercentForDevice(kInternalMic.id,
1643 kInternalMicGain);
1645 // Verify the gain percent of internal mic is set, and saved in preferences.
1646 EXPECT_EQ(kInternalMicGain,
1647 cras_audio_handler_->GetOutputVolumePercentForDevice(
1648 kInternalMic.id));
1649 AudioDevice internal_mic(kInternalMic);
1650 EXPECT_EQ(kInternalMicGain,
1651 audio_pref_handler_->GetInputGainValue(&internal_mic));
1654 TEST_F(CrasAudioHandlerTest, HandleOtherDeviceType) {
1655 const size_t kNumValidAudioDevices = 4;
1656 AudioNodeList audio_nodes;
1657 audio_nodes.push_back(kInternalSpeaker);
1658 audio_nodes.push_back(kOtherTypeOutput);
1659 audio_nodes.push_back(kInternalMic);
1660 audio_nodes.push_back(kOtherTypeInput);
1661 SetUpCrasAudioHandler(audio_nodes);
1663 // Verify the audio devices size.
1664 AudioDeviceList audio_devices;
1665 cras_audio_handler_->GetAudioDevices(&audio_devices);
1666 EXPECT_EQ(kNumValidAudioDevices, audio_devices.size());
1668 // Verify the internal speaker has been selected as the active output,
1669 // and the output device with some randown unknown type is handled gracefully.
1670 AudioDevice active_output;
1671 EXPECT_TRUE(cras_audio_handler_->GetActiveOutputDevice(&active_output));
1672 EXPECT_EQ(kInternalSpeaker.id, active_output.id);
1673 EXPECT_EQ(kInternalSpeaker.id, cras_audio_handler_->GetActiveOutputNode());
1674 EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
1676 // Ensure the internal microphone has been selected as the active input,
1677 // and the input device with some random unknown type is handled gracefully.
1678 AudioDevice active_input;
1679 EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetActiveInputNode());
1680 EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
1683 } // namespace chromeos