| Index: chromeos/audio/cras_audio_handler_unittest.cc
|
| diff --git a/chromeos/audio/cras_audio_handler_unittest.cc b/chromeos/audio/cras_audio_handler_unittest.cc
|
| index 46e7d3e8e347a1b437a8de4740a44fd26ebda4df..f9178d9fe3a5ccdff3d26c118130dc6b9d7cdf4b 100644
|
| --- a/chromeos/audio/cras_audio_handler_unittest.cc
|
| +++ b/chromeos/audio/cras_audio_handler_unittest.cc
|
| @@ -42,88 +42,81 @@ const uint64_t kUSBJabraSpeakerInputId1 = 90005;
|
| const uint64_t kUSBJabraSpeakerInputId2 = 90006;
|
| const uint64_t kUSBCameraInputId = 90007;
|
|
|
| -const AudioNode kInternalSpeaker(
|
| - false,
|
| - kInternalSpeakerId,
|
| - "Fake Speaker",
|
| - "INTERNAL_SPEAKER",
|
| - "Speaker",
|
| - false,
|
| - 0
|
| -);
|
| -
|
| -const AudioNode kHeadphone(
|
| - false,
|
| - kHeadphoneId,
|
| - "Fake Headphone",
|
| - "HEADPHONE",
|
| - "Headphone",
|
| - false,
|
| - 0
|
| -);
|
| -
|
| -const AudioNode kInternalMic(
|
| - true,
|
| - kInternalMicId,
|
| - "Fake Mic",
|
| - "INTERNAL_MIC",
|
| - "Internal Mic",
|
| - false,
|
| - 0
|
| -);
|
| -
|
| -const AudioNode kMicJack(
|
| - true,
|
| - kMicJackId,
|
| - "Fake Mic Jack",
|
| - "MIC",
|
| - "Mic Jack",
|
| - false,
|
| - 0
|
| -);
|
| -
|
| -const AudioNode kUSBMic(
|
| - true,
|
| - kUSBMicId,
|
| - "Fake USB Mic",
|
| - "USB",
|
| - "USB Microphone",
|
| - false,
|
| - 0
|
| -);
|
| -
|
| -const AudioNode kKeyboardMic(
|
| - true,
|
| - kKeyboardMicId,
|
| - "Fake Keyboard Mic",
|
| - "KEYBOARD_MIC",
|
| - "Keyboard Mic",
|
| - false,
|
| - 0
|
| -);
|
| -
|
| -const AudioNode kOtherTypeOutput(
|
| - false,
|
| - kOtherTypeOutputId,
|
| - "Output Device",
|
| - "SOME_OTHER_TYPE",
|
| - "Other Type Output Device",
|
| - false,
|
| - 0
|
| -);
|
| -
|
| -const AudioNode kOtherTypeInput(
|
| - true,
|
| - kOtherTypeInputId,
|
| - "Input Device",
|
| - "SOME_OTHER_TYPE",
|
| - "Other Type Input Device",
|
| - false,
|
| - 0
|
| -);
|
| +const AudioNode kInternalSpeaker(false,
|
| + kInternalSpeakerId,
|
| + kInternalSpeakerId,
|
| + "Fake Speaker",
|
| + "INTERNAL_SPEAKER",
|
| + "Speaker",
|
| + false,
|
| + 0);
|
| +
|
| +const AudioNode kHeadphone(false,
|
| + kHeadphoneId,
|
| + kHeadphoneId,
|
| + "Fake Headphone",
|
| + "HEADPHONE",
|
| + "Headphone",
|
| + false,
|
| + 0);
|
| +
|
| +const AudioNode kInternalMic(true,
|
| + kInternalMicId,
|
| + kInternalMicId,
|
| + "Fake Mic",
|
| + "INTERNAL_MIC",
|
| + "Internal Mic",
|
| + false,
|
| + 0);
|
| +
|
| +const AudioNode kMicJack(true,
|
| + kMicJackId,
|
| + kMicJackId,
|
| + "Fake Mic Jack",
|
| + "MIC",
|
| + "Mic Jack",
|
| + false,
|
| + 0);
|
| +
|
| +const AudioNode kUSBMic(true,
|
| + kUSBMicId,
|
| + kUSBMicId,
|
| + "Fake USB Mic",
|
| + "USB",
|
| + "USB Microphone",
|
| + false,
|
| + 0);
|
| +
|
| +const AudioNode kKeyboardMic(true,
|
| + kKeyboardMicId,
|
| + kKeyboardMicId,
|
| + "Fake Keyboard Mic",
|
| + "KEYBOARD_MIC",
|
| + "Keyboard Mic",
|
| + false,
|
| + 0);
|
| +
|
| +const AudioNode kOtherTypeOutput(false,
|
| + kOtherTypeOutputId,
|
| + kOtherTypeOutputId,
|
| + "Output Device",
|
| + "SOME_OTHER_TYPE",
|
| + "Other Type Output Device",
|
| + false,
|
| + 0);
|
| +
|
| +const AudioNode kOtherTypeInput(true,
|
| + kOtherTypeInputId,
|
| + kOtherTypeInputId,
|
| + "Input Device",
|
| + "SOME_OTHER_TYPE",
|
| + "Other Type Input Device",
|
| + false,
|
| + 0);
|
|
|
| const AudioNode kBluetoothHeadset(false,
|
| kBluetoothHeadsetId,
|
| + kBluetoothHeadsetId,
|
| "Bluetooth Headset",
|
| "BLUETOOTH",
|
| "Bluetooth Headset 1",
|
| @@ -132,6 +125,7 @@ const AudioNode kBluetoothHeadset(false,
|
|
|
| const AudioNode kHDMIOutput(false,
|
| kHDMIOutputId,
|
| + kHDMIOutputId,
|
| "HDMI output",
|
| "HDMI",
|
| "HDMI output",
|
| @@ -140,6 +134,7 @@ const AudioNode kHDMIOutput(false,
|
|
|
| const AudioNode kUSBHeadphone1(false,
|
| kUSBHeadphoneId1,
|
| + kUSBHeadphoneId1,
|
| "USB Headphone",
|
| "USB",
|
| "USB Headphone 1",
|
| @@ -148,6 +143,7 @@ const AudioNode kUSBHeadphone1(false,
|
|
|
| const AudioNode kUSBHeadphone2(false,
|
| kUSBHeadphoneId2,
|
| + kUSBHeadphoneId2,
|
| "USB Headphone",
|
| "USB",
|
| "USB Headphone 1",
|
| @@ -156,6 +152,7 @@ const AudioNode kUSBHeadphone2(false,
|
|
|
| const AudioNode kUSBJabraSpeakerOutput1(false,
|
| kUSBJabraSpeakerOutputId1,
|
| + kUSBJabraSpeakerOutputId1,
|
| "Jabra Speaker 1",
|
| "USB",
|
| "Jabra Speaker 1",
|
| @@ -164,6 +161,7 @@ const AudioNode kUSBJabraSpeakerOutput1(false,
|
|
|
| const AudioNode kUSBJabraSpeakerOutput2(false,
|
| kUSBJabraSpeakerOutputId2,
|
| + kUSBJabraSpeakerOutputId2,
|
| "Jabra Speaker 2",
|
| "USB",
|
| "Jabra Speaker 2",
|
| @@ -172,6 +170,7 @@ const AudioNode kUSBJabraSpeakerOutput2(false,
|
|
|
| const AudioNode kUSBJabraSpeakerInput1(true,
|
| kUSBJabraSpeakerInputId1,
|
| + kUSBJabraSpeakerInputId1,
|
| "Jabra Speaker 1",
|
| "USB",
|
| "Jabra Speaker",
|
| @@ -180,6 +179,7 @@ const AudioNode kUSBJabraSpeakerInput1(true,
|
|
|
| const AudioNode kUSBJabraSpeakerInput2(true,
|
| kUSBJabraSpeakerInputId2,
|
| + kUSBJabraSpeakerInputId2,
|
| "Jabra Speaker 2",
|
| "USB",
|
| "Jabra Speaker 2",
|
| @@ -188,6 +188,7 @@ const AudioNode kUSBJabraSpeakerInput2(true,
|
|
|
| const AudioNode kUSBCameraInput(true,
|
| kUSBCameraInputId,
|
| + kUSBCameraInputId,
|
| "USB Camera",
|
| "USB",
|
| "USB Camera",
|
| @@ -2043,6 +2044,84 @@ TEST_F(CrasAudioHandlerTest, HandleOtherDeviceType) {
|
| EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
|
| }
|
|
|
| +TEST_F(CrasAudioHandlerTest, ActiveDeviceSelectionWithStableDeviceId) {
|
| + AudioNodeList audio_nodes;
|
| + AudioNode internal_speaker(kInternalSpeaker);
|
| + audio_nodes.push_back(internal_speaker);
|
| + AudioNode usb_headset(kUSBHeadphone1);
|
| + usb_headset.plugged_time = 80000000;
|
| + audio_nodes.push_back(usb_headset);
|
| + SetUpCrasAudioHandler(audio_nodes);
|
| +
|
| + // Verify the audio devices size.
|
| + AudioDeviceList audio_devices;
|
| + cras_audio_handler_->GetAudioDevices(&audio_devices);
|
| + EXPECT_EQ(audio_nodes.size(), audio_devices.size());
|
| +
|
| + // Initially active node is selected base on priority, so USB headphone
|
| + // is selected.
|
| + EXPECT_EQ(kUSBHeadphone1.id,
|
| + cras_audio_handler_->GetPrimaryActiveOutputNode());
|
| +
|
| + // Change the active device to internal speaker, now USB headphone becomes
|
| + // inactive.
|
| + AudioDevice speaker(kInternalSpeaker);
|
| + cras_audio_handler_->SwitchToDevice(speaker, true);
|
| + EXPECT_NE(kUSBHeadphone1.id,
|
| + cras_audio_handler_->GetPrimaryActiveOutputNode());
|
| +
|
| + // Unplug USB headset.
|
| + audio_nodes.clear();
|
| + internal_speaker.active = true;
|
| + audio_nodes.push_back(internal_speaker);
|
| + ChangeAudioNodes(audio_nodes);
|
| + EXPECT_EQ(kInternalSpeaker.id,
|
| + cras_audio_handler_->GetPrimaryActiveOutputNode());
|
| +
|
| + // Plug the same USB headset back, id is different, but stable_device_id
|
| + // remains the same.
|
| + usb_headset.active = false;
|
| + usb_headset.id = 98765;
|
| + audio_nodes.push_back(usb_headset);
|
| + ChangeAudioNodes(audio_nodes);
|
| +
|
| + // Since USB headset was inactive before it was unplugged, it won't be
|
| + // selected as active after it's plugged in again.
|
| + EXPECT_EQ(kInternalSpeaker.id,
|
| + cras_audio_handler_->GetPrimaryActiveOutputNode());
|
| +
|
| + // Plug the second USB headset.
|
| + AudioNode usb_headset2(kUSBHeadphone2);
|
| + usb_headset2.plugged_time = 80000001;
|
| + audio_nodes.push_back(usb_headset2);
|
| + ChangeAudioNodes(audio_nodes);
|
| +
|
| + // Since the second USB device is new, it's selected as the active device
|
| + // by its priority.
|
| + EXPECT_EQ(kUSBHeadphone2.id,
|
| + cras_audio_handler_->GetPrimaryActiveOutputNode());
|
| +
|
| + // Unplug the second USB headset.
|
| + audio_nodes.clear();
|
| + internal_speaker.active = false;
|
| + audio_nodes.push_back(internal_speaker);
|
| + audio_nodes.push_back(usb_headset);
|
| + ChangeAudioNodes(audio_nodes);
|
| +
|
| + // There is no active node after USB2 unplugged, the 1st USB got selected
|
| + // by its priority.
|
| + EXPECT_EQ(usb_headset.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
|
| +
|
| + usb_headset2.active = false;
|
| + usb_headset2.plugged_time = 80000002;
|
| + audio_nodes.push_back(usb_headset2);
|
| + ChangeAudioNodes(audio_nodes);
|
| +
|
| + // Plug the second USB again. Since it was the active node before it got
|
| + // unplugged, it is now selected as the active node.
|
| + EXPECT_EQ(usb_headset2.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
|
| +}
|
| +
|
| TEST_F(CrasAudioHandlerTest, ChangeActiveNodesHotrodInit) {
|
| AudioNodeList audio_nodes;
|
| audio_nodes.push_back(kHDMIOutput);
|
|
|