blob: 764e3d0a0d64e8474c731c8abd2e4388ee1e1134 [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.media.audio.cts;
import static org.junit.Assert.*;
import android.media.AudioDeviceInfo;
import android.media.cts.NonMediaMainlineTest;
import android.util.Log;
import androidx.test.runner.AndroidJUnit4;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.junit.Test;
import org.junit.runner.RunWith;
@NonMediaMainlineTest
@RunWith(AndroidJUnit4.class)
public class AudioDeviceInfoTest {
private static final Set<Integer> INPUT_TYPES = Stream.of(
AudioDeviceInfo.TYPE_BUILTIN_MIC,
AudioDeviceInfo.TYPE_BLUETOOTH_SCO,
AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
AudioDeviceInfo.TYPE_WIRED_HEADSET,
AudioDeviceInfo.TYPE_HDMI,
AudioDeviceInfo.TYPE_TELEPHONY,
AudioDeviceInfo.TYPE_DOCK,
AudioDeviceInfo.TYPE_USB_ACCESSORY,
AudioDeviceInfo.TYPE_USB_DEVICE,
AudioDeviceInfo.TYPE_USB_HEADSET,
AudioDeviceInfo.TYPE_FM_TUNER,
AudioDeviceInfo.TYPE_TV_TUNER,
AudioDeviceInfo.TYPE_LINE_ANALOG,
AudioDeviceInfo.TYPE_LINE_DIGITAL,
AudioDeviceInfo.TYPE_IP,
AudioDeviceInfo.TYPE_BUS,
AudioDeviceInfo.TYPE_REMOTE_SUBMIX,
AudioDeviceInfo.TYPE_BLE_HEADSET,
AudioDeviceInfo.TYPE_HDMI_ARC,
AudioDeviceInfo.TYPE_HDMI_EARC,
AudioDeviceInfo.TYPE_ECHO_REFERENCE)
.collect(Collectors.toCollection(HashSet::new));
private static final Set<Integer> OUTPUT_TYPES = Stream.of(
AudioDeviceInfo.TYPE_BUILTIN_EARPIECE,
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER,
AudioDeviceInfo.TYPE_WIRED_HEADSET,
AudioDeviceInfo.TYPE_WIRED_HEADPHONES,
AudioDeviceInfo.TYPE_BLUETOOTH_SCO,
AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
AudioDeviceInfo.TYPE_HDMI,
AudioDeviceInfo.TYPE_DOCK,
AudioDeviceInfo.TYPE_USB_ACCESSORY,
AudioDeviceInfo.TYPE_USB_DEVICE,
AudioDeviceInfo.TYPE_USB_HEADSET,
AudioDeviceInfo.TYPE_TELEPHONY,
AudioDeviceInfo.TYPE_LINE_ANALOG,
AudioDeviceInfo.TYPE_HDMI_ARC,
AudioDeviceInfo.TYPE_HDMI_EARC,
AudioDeviceInfo.TYPE_LINE_DIGITAL,
AudioDeviceInfo.TYPE_FM,
AudioDeviceInfo.TYPE_AUX_LINE,
AudioDeviceInfo.TYPE_IP,
AudioDeviceInfo.TYPE_BUS,
AudioDeviceInfo.TYPE_HEARING_AID,
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER_SAFE,
AudioDeviceInfo.TYPE_BLE_HEADSET,
AudioDeviceInfo.TYPE_BLE_SPEAKER)
.collect(Collectors.toCollection(HashSet::new));
private static int MAX_TYPE;
private static int MIN_TYPE;
{
int maxType = Integer.MIN_VALUE;
int minType = Integer.MAX_VALUE;
for (int type : INPUT_TYPES) {
minType = Integer.min(minType, type);
maxType = Integer.max(maxType, type);
}
for (int type : OUTPUT_TYPES) {
minType = Integer.min(minType, type);
maxType = Integer.max(maxType, type);
}
MIN_TYPE = minType;
MAX_TYPE = maxType;
}
/**
* Ensure no regression on accepted input device types.
*
* @throws Exception
*/
@Test
public void testDeviceTypeIn() throws Exception {
for (int type : INPUT_TYPES) {
// throws IllegalArgumentException on failure
AudioDeviceInfo.enforceValidAudioDeviceTypeIn(type);
}
}
/**
* Ensure no regression on accepted output device types.
*
* @throws Exception
*/
@Test
public void testDeviceTypeOut() throws Exception {
for (int type : OUTPUT_TYPES) {
// throws IllegalArgumentException on failure
AudioDeviceInfo.enforceValidAudioDeviceTypeOut(type);
}
}
}