| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromeos/ash/components/audio/audio_device_encoding.h" |
| |
| #include "chromeos/ash/components/audio/audio_device.h" |
| #include "chromeos/ash/components/audio/audio_device_selection_test_base.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace ash { |
| |
| class AudioDeviceEncodingTest : public AudioDeviceSelectionTestBase {}; |
| |
| // Test that EncodeAudioDeviceSet encodes an audio device set correctly. |
| TEST_F(AudioDeviceEncodingTest, EncodeAudioDeviceSet) { |
| struct { |
| const AudioDeviceList devices; |
| const uint32_t expected_number; |
| } items[] = { |
| {{}, 0b0}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC"))}, 0b1}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("FRONT_MIC"))}, |
| 0b10}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("FRONT_MIC")), |
| AudioDevice(NewInputNode("REAR_MIC"))}, |
| 0b11}, |
| {{AudioDevice(NewOutputNode("INTERNAL_SPEAKER"))}, 1}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC"))}, |
| 0b101}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("USB"))}, |
| 0b10001}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("USB")), AudioDevice(NewInputNode("USB"))}, |
| 0b100001}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("USB")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("USB"))}, |
| 0b110001}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB"))}, |
| 0b10101}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("BLUETOOTH"))}, |
| 0b1000001}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("BLUETOOTH"))}, |
| 0b1010101}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("HDMI"))}, |
| 0b100000001}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("HDMI"))}, |
| 0b100010101}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("BLUETOOTH")), |
| AudioDevice(NewInputNode("HDMI"))}, |
| 0b101010101}, |
| }; |
| |
| for (const auto& item : items) { |
| EXPECT_EQ(EncodeAudioDeviceSet(item.devices), item.expected_number); |
| } |
| } |
| |
| // Test that EncodeBeforeAndAfterAudioDeviceSets encodes an audio device set |
| // correctly. |
| TEST_F(AudioDeviceEncodingTest, EncodeBeforeAndAfterAudioDeviceSets) { |
| struct { |
| const AudioDeviceList device_set_before; |
| const AudioDeviceList device_set_after; |
| const uint32_t expected_number; |
| } items[] = { |
| {{}, {}, 0}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC"))}, |
| 0b100000000000101}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("REAR_MIC"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("REAR_MIC")), |
| AudioDevice(NewInputNode("MIC"))}, |
| 0b1000000000000110}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB"))}, |
| 0b10100000000010101}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("USB"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("BLUETOOTH"))}, |
| 0b1000100000001010001}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("BLUETOOTH"))}, |
| 0b1010100000001010101}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("BLUETOOTH")), |
| AudioDevice(NewInputNode("USB"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("USB"))}, |
| 0b101000100000000010001}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("BLUETOOTH"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC"))}, |
| 0b100000100000000000001}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("BLUETOOTH"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("BLUETOOTH")), |
| AudioDevice(NewInputNode("HDMI"))}, |
| 0b101010100000101010101}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("HDMI"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC"))}, |
| 0b10000000100000000000001}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("HDMI"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB"))}, |
| 0b10001010100000000010101}, |
| {{AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("BLUETOOTH")), |
| AudioDevice(NewInputNode("HDMI"))}, |
| {AudioDevice(NewInputNode("INTERNAL_MIC")), |
| AudioDevice(NewInputNode("MIC")), AudioDevice(NewInputNode("USB")), |
| AudioDevice(NewInputNode("HDMI"))}, |
| 0b10101010100000100010101}, |
| }; |
| |
| for (const auto& item : items) { |
| EXPECT_EQ(EncodeBeforeAndAfterAudioDeviceSets(item.device_set_before, |
| item.device_set_after), |
| item.expected_number); |
| } |
| } |
| |
| } // namespace ash |