summaryrefslogtreecommitdiff
path: root/car-broadcastradio-support/tests
diff options
context:
space:
mode:
Diffstat (limited to 'car-broadcastradio-support/tests')
-rw-r--r--car-broadcastradio-support/tests/Android.bp42
-rw-r--r--car-broadcastradio-support/tests/AndroidManifest.xml29
-rw-r--r--car-broadcastradio-support/tests/src/com/android/car/broadcastradio/support/platform/ProgramInfoExtTest.java203
-rw-r--r--car-broadcastradio-support/tests/src/com/android/car/broadcastradio/support/platform/ProgramSelectorExtTest.java356
4 files changed, 630 insertions, 0 deletions
diff --git a/car-broadcastradio-support/tests/Android.bp b/car-broadcastradio-support/tests/Android.bp
new file mode 100644
index 0000000..2cbca39
--- /dev/null
+++ b/car-broadcastradio-support/tests/Android.bp
@@ -0,0 +1,42 @@
+//
+// Copyright (C) 2024 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 {
+ default_team: "trendy_team_aaos_framework",
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test {
+ name: "CarBroadcastRadioSupportTests",
+ platform_apis: true,
+ srcs: ["src/**/*.java"],
+ static_libs: [
+ "car-broadcastradio-support",
+ "androidx.test.rules",
+ "truth",
+ "mockito-target-extended",
+ ],
+ libs: ["android.test.base"],
+ test_suites: [
+ "general-tests",
+ "automotive-general-tests",
+ ],
+ // mockito-target-inline dependency
+ jni_libs: [
+ "libdexmakerjvmtiagent",
+ "libstaticjvmtiagent",
+ ],
+}
diff --git a/car-broadcastradio-support/tests/AndroidManifest.xml b/car-broadcastradio-support/tests/AndroidManifest.xml
new file mode 100644
index 0000000..458effa
--- /dev/null
+++ b/car-broadcastradio-support/tests/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2024 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.car.broadcastradio.tests">
+
+ <application android:debuggable="true">
+ <uses-library android:name="android.test.runner" />
+ </application>
+
+ <instrumentation
+ android:name="androidx.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.car.broadcastradio.tests"
+ android:label="Tests for Car Broadcast Radio Support" >
+ </instrumentation>
+</manifest> \ No newline at end of file
diff --git a/car-broadcastradio-support/tests/src/com/android/car/broadcastradio/support/platform/ProgramInfoExtTest.java b/car-broadcastradio-support/tests/src/com/android/car/broadcastradio/support/platform/ProgramInfoExtTest.java
new file mode 100644
index 0000000..37e74dc
--- /dev/null
+++ b/car-broadcastradio-support/tests/src/com/android/car/broadcastradio/support/platform/ProgramInfoExtTest.java
@@ -0,0 +1,203 @@
+/**
+ * Copyright (C) 2024 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 com.android.car.broadcastradio.support.platform;
+
+import static org.mockito.Mockito.when;
+
+import android.graphics.Bitmap;
+import android.hardware.radio.ProgramSelector;
+import android.hardware.radio.RadioManager;
+import android.hardware.radio.RadioMetadata;
+import android.support.v4.media.MediaMetadataCompat;
+
+import com.google.common.truth.Expect;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.Comparator;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class ProgramInfoExtTest {
+
+ private static final long FM_FREQUENCY = 88_500;
+ private static final String RDS_VALUE = "TestRds";
+ private static final String PROGRAM_NAME_VALUE = "TestProgramName";
+ private static final String TITLE_VALUE = "TestTitle";
+ private static final String ARTIST_VALUE = "TestArtist";
+ private static final String ALBUM_VALUE = "TestAlbum";
+ private static final int ART_VALUE = 1;
+ private static final ProgramSelector.Identifier FM_IDENTIFIER = new ProgramSelector.Identifier(
+ ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY, FM_FREQUENCY);
+ private static final ProgramSelector FM_SELECTOR = new ProgramSelector(
+ ProgramSelector.PROGRAM_TYPE_FM, FM_IDENTIFIER, /* secondaryIds= */ null,
+ /* vendorIds= */ null);
+ private static final ProgramSelector.Identifier DAB_DMB_SID_EXT_IDENTIFIER =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_DMB_SID_EXT,
+ 0xA000000111L);
+ private static final ProgramSelector.Identifier DAB_ENSEMBLE_IDENTIFIER =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_ENSEMBLE,
+ /* value= */ 0x1001);
+ private static final ProgramSelector.Identifier DAB_FREQUENCY_IDENTIFIER =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY,
+ /* value= */ 220_352);
+ private static final ProgramSelector DAB_SELECTOR = new ProgramSelector(
+ ProgramSelector.PROGRAM_TYPE_DAB, DAB_DMB_SID_EXT_IDENTIFIER,
+ new ProgramSelector.Identifier[]{DAB_FREQUENCY_IDENTIFIER, DAB_ENSEMBLE_IDENTIFIER},
+ /* vendorIds= */ null);
+ private static final RadioMetadata RADIO_METADATA = new RadioMetadata.Builder()
+ .putString(RadioMetadata.METADATA_KEY_RDS_PS, RDS_VALUE)
+ .putString(RadioMetadata.METADATA_KEY_PROGRAM_NAME, PROGRAM_NAME_VALUE)
+ .putString(RadioMetadata.METADATA_KEY_TITLE, TITLE_VALUE)
+ .putString(RadioMetadata.METADATA_KEY_ARTIST, ARTIST_VALUE)
+ .putString(RadioMetadata.METADATA_KEY_ALBUM, ALBUM_VALUE)
+ .putInt(RadioMetadata.METADATA_KEY_ART, ART_VALUE).build();
+ private static final RadioMetadata EMPTY_RADIO_METADATA = new RadioMetadata.Builder().build();
+ private static final RadioManager.ProgramInfo FM_INFO = new RadioManager.ProgramInfo(
+ FM_SELECTOR, FM_IDENTIFIER, FM_IDENTIFIER, /* relatedContents= */ null,
+ /* infoFlags= */ 0, /* signalQuality= */ 1, RADIO_METADATA,
+ /* vendorInfo= */ null);
+ private static final RadioManager.ProgramInfo FM_INFO_WITH_EMPTY_METADATA =
+ new RadioManager.ProgramInfo(FM_SELECTOR, FM_IDENTIFIER, FM_IDENTIFIER,
+ /* relatedContents= */ null, /* infoFlags= */ 0, /* signalQuality= */ 1,
+ EMPTY_RADIO_METADATA, /* vendorInfo= */ null);
+ private static final RadioManager.ProgramInfo DAB_INFO_WITH_EMPTY_METADATA =
+ new RadioManager.ProgramInfo(DAB_SELECTOR, DAB_DMB_SID_EXT_IDENTIFIER,
+ DAB_FREQUENCY_IDENTIFIER, /* relatedContents= */ null, /* infoFlags= */ 0,
+ /* signalQuality= */ 1, EMPTY_RADIO_METADATA, /* vendorInfo= */ null);
+
+ private static final Comparator<ProgramSelector> SELECTOR_COMPARATOR =
+ new ProgramSelectorExt.ProgramSelectorComparator();
+ private static final Comparator<RadioManager.ProgramInfo> PROGRAM_INFO_COMPARATOR =
+ new ProgramInfoExt.ProgramInfoComparator();
+
+ @Rule
+ public final Expect mExpect = Expect.create();
+
+ @Test
+ public void getProgramName() {
+ mExpect.withMessage("Program name")
+ .that(ProgramInfoExt.getProgramName(FM_INFO, /* flags= */ 0))
+ .isEqualTo(PROGRAM_NAME_VALUE);
+ }
+
+ @Test
+ public void getProgramName_withProgramNameOrder() {
+ String[] programNameOrder = new String[] {RadioMetadata.METADATA_KEY_RDS_PS,
+ RadioMetadata.METADATA_KEY_PROGRAM_NAME};
+
+ mExpect.withMessage("Program name with self-defined program name order")
+ .that(ProgramInfoExt.getProgramName(FM_INFO, /* flags= */ 0, programNameOrder))
+ .isEqualTo(RDS_VALUE);
+ }
+
+ @Test
+ public void getProgramName_forFmSelectorWithoutProgramNameMetadata() {
+ String expectedName = ProgramSelectorExt.formatAmFmFrequency(
+ FM_INFO_WITH_EMPTY_METADATA.getPhysicallyTunedTo().getValue(), /* flags= */ 0);
+
+ mExpect.withMessage("FM Program name without program name metadata")
+ .that(ProgramInfoExt.getProgramName(FM_INFO_WITH_EMPTY_METADATA, /* flags= */ 0))
+ .isEqualTo(expectedName);
+ }
+
+ @Test
+ public void getProgramName_forDabProgramWithoutProgramNameMetadata() {
+ String expectedName = ProgramSelectorExt.getDisplayName(
+ DAB_INFO_WITH_EMPTY_METADATA.getSelector(), /* flags= */ 0);
+
+ mExpect.withMessage("DAB Program name without program name metadata")
+ .that(ProgramInfoExt.getProgramName(DAB_INFO_WITH_EMPTY_METADATA, /* flags= */ 0))
+ .isEqualTo(expectedName);
+ }
+
+ @Test
+ public void getMetadata() {
+ mExpect.withMessage("FM radio metadata")
+ .that(ProgramInfoExt.getMetadata(FM_INFO)).isEqualTo(RADIO_METADATA);
+ }
+
+ @Test
+ public void getMetadata_withNullMetadata() {
+ RadioManager.ProgramInfo infoWithNullMetadata = new RadioManager.ProgramInfo(
+ FM_SELECTOR, FM_IDENTIFIER, FM_IDENTIFIER, /* relatedContents= */ null,
+ /* infoFlags= */ 0, /* signalQuality= */ 1, /* metadata= */ null,
+ /* vendorInfo= */ null);
+
+ mExpect.withMessage("FM radio metadata with null metadata")
+ .that(ProgramInfoExt.getMetadata(infoWithNullMetadata))
+ .isEqualTo(EMPTY_RADIO_METADATA);
+ }
+
+ @Test
+ public void toMediaDisplayMetadata() {
+ String[] programNameOrder = new String[] {RadioMetadata.METADATA_KEY_RDS_PS,
+ RadioMetadata.METADATA_KEY_PROGRAM_NAME};
+ Bitmap bitmapMock = Mockito.mock(Bitmap.class);
+ ImageResolver imageResolver = Mockito.mock(ImageResolver.class);
+ when(imageResolver.resolve(ART_VALUE)).thenReturn(bitmapMock);
+
+ MediaMetadataCompat mediaDisplayMetadata = ProgramInfoExt.toMediaDisplayMetadata(FM_INFO,
+ /* isFavorite= */ true, imageResolver, programNameOrder);
+
+ mExpect.withMessage("Media display title in media display metadata")
+ .that(mediaDisplayMetadata.getString(
+ MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE))
+ .isEqualTo(ProgramSelectorExt.getDisplayName(FM_INFO.getSelector(),
+ FM_INFO.getChannel()));
+ mExpect.withMessage("Media display subtitle in media display metadata")
+ .that(mediaDisplayMetadata.getString(
+ MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE))
+ .isEqualTo(ProgramInfoExt.getProgramName(FM_INFO, /* flags= */ 0,
+ programNameOrder));
+ mExpect.withMessage("Album art in media display metadata")
+ .that(mediaDisplayMetadata.getBitmap(
+ MediaMetadataCompat.METADATA_KEY_ALBUM_ART)).isEqualTo(bitmapMock);
+ }
+
+ @Test
+ public void toMediaMetadata() {
+ MediaMetadataCompat mediaMetadata = ProgramInfoExt.toMediaMetadata(FM_INFO,
+ /* isFavorite= */ true, /* imageResolver= */ null);
+
+ mExpect.withMessage("Media display title").that(mediaMetadata
+ .getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE))
+ .isEqualTo(ProgramInfoExt.getProgramName(FM_INFO, /* flags= */ 0));
+ mExpect.withMessage("Media title").that(mediaMetadata.getString(
+ MediaMetadataCompat.METADATA_KEY_TITLE)).isEqualTo(TITLE_VALUE);
+ mExpect.withMessage("Media artist").that(mediaMetadata.getString(
+ MediaMetadataCompat.METADATA_KEY_ARTIST)).isEqualTo(ARTIST_VALUE);
+ mExpect.withMessage("Media album").that(mediaMetadata.getString(
+ MediaMetadataCompat.METADATA_KEY_ALBUM)).isEqualTo(ALBUM_VALUE);
+ }
+
+ @Test
+ public void compare_withSelectorsOfDifferentTypes() {
+ ProgramSelector fmSel2 = ProgramSelectorExt.createAmFmSelector(FM_FREQUENCY + 200);
+ RadioManager.ProgramInfo fmInfo2 = new RadioManager.ProgramInfo(fmSel2,
+ fmSel2.getPrimaryId(), fmSel2.getPrimaryId(), /* relatedContents= */ null,
+ /* infoFlags= */ 1, /* signalQuality= */ 0, new RadioMetadata.Builder().build(),
+ /* vendorInfo= */ null);
+ int expectedResult = SELECTOR_COMPARATOR.compare(fmSel2, FM_SELECTOR);
+
+ mExpect.withMessage("Comparison between FM stations")
+ .that(PROGRAM_INFO_COMPARATOR.compare(fmInfo2, FM_INFO)).isEqualTo(expectedResult);
+ }
+}
diff --git a/car-broadcastradio-support/tests/src/com/android/car/broadcastradio/support/platform/ProgramSelectorExtTest.java b/car-broadcastradio-support/tests/src/com/android/car/broadcastradio/support/platform/ProgramSelectorExtTest.java
new file mode 100644
index 0000000..659ecfc
--- /dev/null
+++ b/car-broadcastradio-support/tests/src/com/android/car/broadcastradio/support/platform/ProgramSelectorExtTest.java
@@ -0,0 +1,356 @@
+/**
+ * Copyright (C) 2024 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 com.android.car.broadcastradio.support.platform;
+
+import static org.junit.Assert.assertThrows;
+
+import android.hardware.radio.ProgramSelector;
+
+import com.google.common.truth.Expect;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.util.Comparator;
+
+public final class ProgramSelectorExtTest {
+
+ private static final long AM_FREQUENCY_VALUE = 700;
+ private static final long FM_FREQUENCY_VALUE = 88_500;
+ private static final long HD_FREQUENCY_VALUE = 97_100;
+ private static final int HD_SUBCHANNEL_VALUE = 1;
+ private static final int HD_STATION_ID_VALUE = 0x01;
+ private static final long DAB_FREQUENCY_VALUE = 220_352;
+ private static final long DAB_ENSEMBLE_VALUE = 0x1001;
+ private static final long DAB_SID_VALUE = 0x112;
+ private static final int DAB_ECC_VALUE = 0xA0;
+ private static final int DAB_SCIDS_VALUE = 1;
+ private static final ProgramSelector.Identifier FM_IDENTIFIER = new ProgramSelector.Identifier(
+ ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY, FM_FREQUENCY_VALUE);
+ private static final ProgramSelector.Identifier HD_STATION_EXT_IDENTIFIER =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_HD_STATION_ID_EXT,
+ (HD_FREQUENCY_VALUE << 36) | ((long) HD_SUBCHANNEL_VALUE << 32)
+ | HD_STATION_ID_VALUE);
+ private static final ProgramSelector.Identifier DAB_DMB_SID_EXT_IDENTIFIER =
+ createDabSidExtId(DAB_SID_VALUE, DAB_ECC_VALUE, DAB_SCIDS_VALUE);
+ private static final ProgramSelector.Identifier DAB_ENSEMBLE_IDENTIFIER =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_ENSEMBLE,
+ DAB_ENSEMBLE_VALUE);
+ private static final ProgramSelector.Identifier DAB_FREQUENCY_IDENTIFIER =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY,
+ DAB_FREQUENCY_VALUE);
+ private static final ProgramSelector FM_SELECTOR = new ProgramSelector(
+ ProgramSelector.PROGRAM_TYPE_FM, FM_IDENTIFIER, /* secondaryIds= */ null,
+ /* vendorIds= */ null);
+ private static final ProgramSelector HD_SELECTOR = new ProgramSelector(
+ ProgramSelector.PROGRAM_TYPE_FM_HD, HD_STATION_EXT_IDENTIFIER,
+ new ProgramSelector.Identifier[]{}, /* vendorIds= */ null);
+ private static final ProgramSelector DAB_SELECTOR = new ProgramSelector(
+ ProgramSelector.PROGRAM_TYPE_DAB, DAB_DMB_SID_EXT_IDENTIFIER,
+ new ProgramSelector.Identifier[]{DAB_FREQUENCY_IDENTIFIER, DAB_ENSEMBLE_IDENTIFIER},
+ /* vendorIds= */ null);
+ private static final Comparator<ProgramSelector> SELECTOR_COMPARATOR =
+ new ProgramSelectorExt.ProgramSelectorComparator();
+
+ @Rule
+ public final Expect mExpect = Expect.create();
+
+ @Test
+ public void isAmFrequency_withAmFrequency() {
+ mExpect.withMessage("AM frequency")
+ .that(ProgramSelectorExt.isAmFrequency(AM_FREQUENCY_VALUE)).isTrue();
+ }
+
+ @Test
+ public void isAmFrequency_withFmFrequency() {
+ mExpect.withMessage("Non-AM frequency")
+ .that(ProgramSelectorExt.isAmFrequency(FM_FREQUENCY_VALUE)).isFalse();
+ }
+
+ @Test
+ public void isFmFrequency_withAmFrequency() {
+ mExpect.withMessage("Non-FM frequency")
+ .that(ProgramSelectorExt.isFmFrequency(AM_FREQUENCY_VALUE)).isFalse();
+ }
+
+ @Test
+ public void isFmFrequency_withFmFrequency() {
+ mExpect.withMessage("FM frequency")
+ .that(ProgramSelectorExt.isFmFrequency(FM_FREQUENCY_VALUE)).isTrue();
+ }
+
+ @Test
+ public void createAmFmSelector() {
+ mExpect.withMessage("FM selector").that(ProgramSelectorExt.createAmFmSelector(
+ FM_FREQUENCY_VALUE)).isEqualTo(FM_SELECTOR);
+ }
+
+ @Test
+ public void createAmFmSelector_withInvalidFrequency_throwsException() {
+ long invalidFrequency = -1;
+
+ IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, () -> {
+ ProgramSelectorExt.createAmFmSelector(invalidFrequency);
+ });
+
+ mExpect.withMessage("Invalid frequency exception").that(thrown).hasMessageThat()
+ .contains("illegal frequency value");
+ }
+
+ @Test
+ public void hasId_forSelectorWithIdAsPrimaryId() {
+ mExpect.withMessage("AM/FM id in selector").that(ProgramSelectorExt.hasId(FM_SELECTOR,
+ ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY)).isTrue();
+ }
+
+ @Test
+ public void hasId_forSelectorWithIdInSecondaryIds() {
+ mExpect.withMessage("DAB ensemble id in selector").that(ProgramSelectorExt.hasId(
+ DAB_SELECTOR, ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY)).isTrue();
+ }
+
+ @Test
+ public void hasId_forSelectorWithoutId() {
+ mExpect.withMessage("Id type beyond selector ids").that(ProgramSelectorExt.hasId(
+ HD_SELECTOR, ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY)).isFalse();
+ }
+
+ @Test
+ public void isAmFmProgram_withAmFmSelector() {
+ mExpect.withMessage("FM selector of AM/FM type program")
+ .that(ProgramSelectorExt.isAmFmProgram(FM_SELECTOR)).isTrue();
+ }
+
+ @Test
+ public void isAmFmProgram_withHdSelector() {
+ mExpect.withMessage("HD selector of AM/FM type program")
+ .that(ProgramSelectorExt.isAmFmProgram(HD_SELECTOR)).isTrue();
+ }
+
+ @Test
+ public void isAmFmProgram_withDabSelector() {
+ mExpect.withMessage("DAB selector of non-AM/FM type program")
+ .that(ProgramSelectorExt.isAmFmProgram(DAB_SELECTOR)).isFalse();
+ }
+
+ @Test
+ public void getFrequency_withAmFmSelector() {
+ mExpect.withMessage("Frequency of FM selector")
+ .that(ProgramSelectorExt.getFrequency(FM_SELECTOR)).isEqualTo(FM_FREQUENCY_VALUE);
+ }
+
+ @Test
+ public void getFrequency_withHdSelector() {
+ mExpect.withMessage("Frequency of HD selector")
+ .that(ProgramSelectorExt.getFrequency(HD_SELECTOR)).isEqualTo(HD_FREQUENCY_VALUE);
+ }
+
+ @Test
+ public void getFrequency_withDabSelector() {
+ mExpect.withMessage("Frequency of DAB selector")
+ .that(ProgramSelectorExt.getFrequency(DAB_SELECTOR)).isEqualTo(DAB_FREQUENCY_VALUE);
+ }
+
+ @Test
+ public void getFrequency_withSelectorWithoutFrequency() {
+ ProgramSelector dabSelectorWithoutFrequency = new ProgramSelector(
+ ProgramSelector.PROGRAM_TYPE_DAB, DAB_DMB_SID_EXT_IDENTIFIER,
+ new ProgramSelector.Identifier[]{DAB_ENSEMBLE_IDENTIFIER}, /* vendorIds= */ null);
+
+ mExpect.withMessage("Frequency of a selector without frequency")
+ .that(ProgramSelectorExt.getFrequency(dabSelectorWithoutFrequency))
+ .isEqualTo(ProgramSelectorExt.INVALID_IDENTIFIER_VALUE);
+ }
+
+ @Test
+ public void getDabEnsemble_withDabSelector() {
+ mExpect.withMessage("Ensemble of DAB selector").that(
+ ProgramSelectorExt.getDabEnsemble(DAB_SELECTOR)).isEqualTo(DAB_ENSEMBLE_VALUE);
+ }
+
+ @Test
+ public void getDabEnsemble_withNonDabSelector() {
+ mExpect.withMessage("Ensemble of FM selector")
+ .that(ProgramSelectorExt.getDabEnsemble(FM_SELECTOR))
+ .isEqualTo(ProgramSelectorExt.INVALID_IDENTIFIER_VALUE);
+ }
+
+ @Test
+ public void asHdPrimary_withNonHdId() {
+ mExpect.withMessage("HD Primary identifier extension for FM id")
+ .that(ProgramSelectorExt.IdentifierExt.asHdPrimary(FM_IDENTIFIER)).isNull();
+ }
+
+ @Test
+ public void getStationId_forHdPrimary() {
+ mExpect.withMessage("Station id of HD primary identifier extension")
+ .that(ProgramSelectorExt.IdentifierExt.asHdPrimary(HD_STATION_EXT_IDENTIFIER)
+ .getStationId()).isEqualTo(HD_STATION_ID_VALUE);
+ }
+
+ @Test
+ public void getSubchannel_forHdPrimary() {
+ mExpect.withMessage("Sub-channel of HD primary identifier extension")
+ .that(ProgramSelectorExt.IdentifierExt.asHdPrimary(HD_STATION_EXT_IDENTIFIER)
+ .getSubchannel()).isEqualTo(HD_SUBCHANNEL_VALUE);
+ }
+
+ @Test
+ public void getFrequency_forHdPrimary() {
+ mExpect.withMessage("Frequency of HD primary identifier extension")
+ .that(ProgramSelectorExt.IdentifierExt.asHdPrimary(HD_STATION_EXT_IDENTIFIER)
+ .getFrequency()).isEqualTo(HD_FREQUENCY_VALUE);
+ }
+
+ @Test
+ public void asDabPrimary_withNonDabId() {
+ mExpect.withMessage("DAB Primary identifier extension for FM id")
+ .that(ProgramSelectorExt.IdentifierExt.asDabPrimary(FM_IDENTIFIER)).isNull();
+ }
+ @Test
+ public void getSId_forDabPrimary() {
+ mExpect.withMessage("Station Id of DAB primary identifier extension")
+ .that(ProgramSelectorExt.IdentifierExt.asDabPrimary(DAB_DMB_SID_EXT_IDENTIFIER)
+ .getSId()).isEqualTo(DAB_SID_VALUE);
+ }
+
+ @Test
+ public void getEcc_forDabPrimary() {
+ mExpect.withMessage("ECC of DAB primary identifier extension")
+ .that(ProgramSelectorExt.IdentifierExt.asDabPrimary(DAB_DMB_SID_EXT_IDENTIFIER)
+ .getEcc()).isEqualTo(DAB_ECC_VALUE);
+ }
+
+ @Test
+ public void getSCIdS_forDabPrimary() {
+ mExpect.withMessage("SCIdS of DAB primary identifier extension")
+ .that(ProgramSelectorExt.IdentifierExt.asDabPrimary(DAB_DMB_SID_EXT_IDENTIFIER)
+ .getSCIdS()).isEqualTo(DAB_SCIDS_VALUE);
+ }
+
+ @Test
+ public void compare_withTwoFmSelectorsForProgramSelectorComparator() {
+ ProgramSelector fmSel2 = ProgramSelectorExt.createAmFmSelector(FM_FREQUENCY_VALUE + 200);
+
+ mExpect.withMessage("Comparison between two FM selectors")
+ .that(SELECTOR_COMPARATOR.compare(FM_SELECTOR, fmSel2)).isEqualTo(-1);
+ }
+
+ @Test
+ public void compare_withFmAndHdSelectors() {
+ mExpect.withMessage("Comparison between FM and HD selectors")
+ .that(SELECTOR_COMPARATOR.compare(FM_SELECTOR, HD_SELECTOR)).isEqualTo(-1);
+ }
+
+ @Test
+ public void compare_withHdSelectorsWithDifferentFrequncies() {
+ ProgramSelector.Identifier hdId = new ProgramSelector.Identifier(
+ ProgramSelector.IDENTIFIER_TYPE_HD_STATION_ID_EXT,
+ ((HD_FREQUENCY_VALUE + 200) << 36) | HD_STATION_ID_VALUE);
+ ProgramSelector hdSel = new ProgramSelector(ProgramSelector.PROGRAM_TYPE_FM_HD, hdId,
+ new ProgramSelector.Identifier[]{}, /* vendorIds= */ null);
+
+ mExpect.withMessage("Comparison between HD selectors with different frequencies")
+ .that(SELECTOR_COMPARATOR.compare(hdSel, HD_SELECTOR)).isEqualTo(1);
+ }
+
+ @Test
+ public void compare_withHdSelectorsWithDifferentSubchannels() {
+ ProgramSelector.Identifier hdId2 = new ProgramSelector.Identifier(
+ ProgramSelector.IDENTIFIER_TYPE_HD_STATION_ID_EXT,
+ (HD_FREQUENCY_VALUE << 36) | HD_STATION_ID_VALUE);
+ ProgramSelector hdSel2 = new ProgramSelector(ProgramSelector.PROGRAM_TYPE_FM_HD, hdId2,
+ new ProgramSelector.Identifier[]{}, /* vendorIds= */ null);
+
+ mExpect.withMessage("Comparison between HD selectors with different subchannels")
+ .that(SELECTOR_COMPARATOR.compare(hdSel2, HD_SELECTOR)).isEqualTo(-1);
+ }
+
+ @Test
+ public void compare_withDabSelectorsWithDifferentFrequencies() {
+ ProgramSelector.Identifier dabFrequencyId2 = new ProgramSelector.Identifier(
+ ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY, 174_928);
+ ProgramSelector.Identifier dabEnsembleId2 = new ProgramSelector.Identifier(
+ ProgramSelector.IDENTIFIER_TYPE_DAB_ENSEMBLE, DAB_ENSEMBLE_VALUE + 1);
+ ProgramSelector dabSel2 = new ProgramSelector(ProgramSelector.PROGRAM_TYPE_DAB,
+ DAB_DMB_SID_EXT_IDENTIFIER,
+ new ProgramSelector.Identifier[]{dabFrequencyId2, dabEnsembleId2},
+ /* vendorIds= */ null);
+
+ mExpect.withMessage("Comparison between DAB selectors with different frequencies")
+ .that(SELECTOR_COMPARATOR.compare(dabSel2, DAB_SELECTOR)).isEqualTo(-1);
+ }
+
+ @Test
+ public void compare_withDabSelectorsWithDifferentEccs() {
+ ProgramSelector.Identifier dabExtId2 = createDabSidExtId(DAB_SID_VALUE - 1,
+ DAB_ECC_VALUE + 1, DAB_SCIDS_VALUE + 1);
+ ProgramSelector dabSel2 = new ProgramSelector(ProgramSelector.PROGRAM_TYPE_DAB,
+ dabExtId2, new ProgramSelector.Identifier[]{DAB_FREQUENCY_IDENTIFIER,
+ DAB_ENSEMBLE_IDENTIFIER}, /* vendorIds= */ null);
+
+ mExpect.withMessage("Comparison between DAB selectors with different ECC values")
+ .that(SELECTOR_COMPARATOR.compare(dabSel2, DAB_SELECTOR)).isEqualTo(1);
+ }
+
+ @Test
+ public void compare_withDabSelectorsWithDifferentSIds() {
+ ProgramSelector.Identifier dabExtId2 = createDabSidExtId(DAB_SID_VALUE - 1,
+ DAB_ECC_VALUE, DAB_SCIDS_VALUE + 1);
+ ProgramSelector dabSel2 = new ProgramSelector(ProgramSelector.PROGRAM_TYPE_DAB,
+ dabExtId2, new ProgramSelector.Identifier[]{DAB_FREQUENCY_IDENTIFIER,
+ DAB_ENSEMBLE_IDENTIFIER}, /* vendorIds= */ null);
+
+ mExpect.withMessage("Comparison between DAB selectors with different SId values")
+ .that(SELECTOR_COMPARATOR.compare(dabSel2, DAB_SELECTOR)).isEqualTo(-1);
+ }
+
+ @Test
+ public void compare_withDabSelectorsWithDifferentSCIds() {
+ ProgramSelector.Identifier dabExtId2 = createDabSidExtId(DAB_SID_VALUE,
+ DAB_ECC_VALUE, DAB_SCIDS_VALUE + 1);
+ ProgramSelector dabSel2 = new ProgramSelector(ProgramSelector.PROGRAM_TYPE_DAB,
+ dabExtId2, new ProgramSelector.Identifier[]{DAB_FREQUENCY_IDENTIFIER,
+ DAB_ENSEMBLE_IDENTIFIER}, /* vendorIds= */ null);
+
+ mExpect.withMessage("Comparison between DAB selectors with different SCId values")
+ .that(SELECTOR_COMPARATOR.compare(dabSel2, DAB_SELECTOR)).isEqualTo(1);
+ }
+
+ @Test
+ public void compare_withDabSelectorsWithDifferentEnsembles() {
+ ProgramSelector.Identifier dabEnsembleId2 = new ProgramSelector.Identifier(
+ ProgramSelector.IDENTIFIER_TYPE_DAB_ENSEMBLE, DAB_ENSEMBLE_VALUE + 1);
+ ProgramSelector dabSel2 = new ProgramSelector(ProgramSelector.PROGRAM_TYPE_DAB,
+ DAB_DMB_SID_EXT_IDENTIFIER, new ProgramSelector.Identifier[]{
+ DAB_FREQUENCY_IDENTIFIER, dabEnsembleId2}, /* vendorIds= */ null);
+
+ mExpect.withMessage("Comparison between DAB selectors with different ensembles")
+ .that(SELECTOR_COMPARATOR.compare(dabSel2, DAB_SELECTOR)).isEqualTo(1);
+ }
+
+ @Test
+ public void compare_withSelectorsOfDifferentTypes() {
+ mExpect.withMessage("Comparison between HD and DAB selectors with different types")
+ .that(SELECTOR_COMPARATOR.compare(HD_SELECTOR, DAB_SELECTOR)).isEqualTo(-1);
+ }
+
+ private static ProgramSelector.Identifier createDabSidExtId(long sid, int ecc, int sCIdS) {
+ return new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_DMB_SID_EXT,
+ ((long) sCIdS << 40) | ((long) ecc << 32) | sid);
+ }
+}