summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/ProgramInfoCacheTest.java206
-rw-r--r--core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/TunerSessionTest.java243
2 files changed, 287 insertions, 162 deletions
diff --git a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/ProgramInfoCacheTest.java b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/ProgramInfoCacheTest.java
index 58107ccf25c7..ce27bc177769 100644
--- a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/ProgramInfoCacheTest.java
+++ b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/ProgramInfoCacheTest.java
@@ -33,6 +33,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -44,6 +45,9 @@ public class ProgramInfoCacheTest {
private static final int TEST_SIGNAL_QUALITY = 90;
+ private static final int TEST_MAX_NUM_MODIFIED_PER_CHUNK = 2;
+ private static final int TEST_MAX_NUM_REMOVED_PER_CHUNK = 2;
+
private static final ProgramSelector.Identifier TEST_FM_FREQUENCY_ID =
new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY,
/* value= */ 88_500);
@@ -86,15 +90,27 @@ public class ProgramInfoCacheTest {
private static final ProgramSelector.Identifier TEST_DAB_FREQUENCY_ID =
new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY,
/* value= */ 220_352);
+ private static final ProgramSelector.Identifier TEST_DAB_FREQUENCY_ID_ALTERNATIVE =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY,
+ /* value= */ 220_064);
private static final ProgramSelector TEST_DAB_SELECTOR = new ProgramSelector(
ProgramSelector.PROGRAM_TYPE_DAB, TEST_DAB_DMB_SID_EXT_ID,
new ProgramSelector.Identifier[]{TEST_DAB_FREQUENCY_ID, TEST_DAB_ENSEMBLE_ID},
/* vendorIds= */ null);
+ private static final ProgramSelector TEST_DAB_SELECTOR_ALTERNATIVE = new ProgramSelector(
+ ProgramSelector.PROGRAM_TYPE_DAB, TEST_DAB_DMB_SID_EXT_ID,
+ new ProgramSelector.Identifier[]{TEST_DAB_FREQUENCY_ID_ALTERNATIVE,
+ TEST_DAB_ENSEMBLE_ID}, /* vendorIds= */ null);
private static final UniqueProgramIdentifier TEST_DAB_UNIQUE_ID = new UniqueProgramIdentifier(
TEST_DAB_SELECTOR);
- private static final RadioManager.ProgramInfo TEST_DAB_INFO = AidlTestUtils.makeProgramInfo(
- TEST_DAB_SELECTOR, TEST_DAB_DMB_SID_EXT_ID, TEST_DAB_FREQUENCY_ID,
- TEST_SIGNAL_QUALITY);
+ private static final UniqueProgramIdentifier TEST_DAB_UNIQUE_ID_ALTERNATIVE =
+ new UniqueProgramIdentifier(TEST_DAB_SELECTOR_ALTERNATIVE);
+ private static final RadioManager.ProgramInfo TEST_DAB_INFO =
+ AidlTestUtils.makeProgramInfo(TEST_DAB_SELECTOR, TEST_DAB_DMB_SID_EXT_ID,
+ TEST_DAB_FREQUENCY_ID, TEST_SIGNAL_QUALITY);
+ private static final RadioManager.ProgramInfo TEST_DAB_INFO_ALTERNATIVE =
+ AidlTestUtils.makeProgramInfo(TEST_DAB_SELECTOR_ALTERNATIVE, TEST_DAB_DMB_SID_EXT_ID,
+ TEST_DAB_FREQUENCY_ID_ALTERNATIVE, TEST_SIGNAL_QUALITY);
private static final ProgramSelector.Identifier TEST_VENDOR_ID =
new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_VENDOR_START,
@@ -104,8 +120,8 @@ public class ProgramInfoCacheTest {
TEST_VENDOR_ID), TEST_VENDOR_ID, TEST_VENDOR_ID, TEST_SIGNAL_QUALITY);
private static final ProgramInfoCache FULL_PROGRAM_INFO_CACHE = new ProgramInfoCache(
- /* filter= */ null, /* complete= */ true,
- TEST_FM_INFO, TEST_AM_INFO, TEST_RDS_INFO, TEST_DAB_INFO, TEST_VENDOR_INFO);
+ /* filter= */ null, /* complete= */ true, TEST_FM_INFO, TEST_AM_INFO, TEST_RDS_INFO,
+ TEST_DAB_INFO, TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
@Rule
public final Expect expect = Expect.create();
@@ -197,7 +213,7 @@ public class ProgramInfoCacheTest {
expect.withMessage("Program cache filtered by null filter")
.that(cache.toProgramInfoList())
.containsExactly(TEST_FM_INFO, TEST_AM_INFO, TEST_RDS_INFO, TEST_DAB_INFO,
- TEST_VENDOR_INFO);
+ TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
}
@Test
@@ -211,21 +227,21 @@ public class ProgramInfoCacheTest {
expect.withMessage("Program cache filtered by empty filter")
.that(cache.toProgramInfoList())
.containsExactly(TEST_FM_INFO, TEST_AM_INFO, TEST_RDS_INFO, TEST_DAB_INFO,
- TEST_VENDOR_INFO);
+ TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
}
@Test
public void filterAndUpdateFromInternal_withFilterByIdentifierType() {
ProgramInfoCache cache = new ProgramInfoCache(
new ProgramList.Filter(Set.of(ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY,
- ProgramSelector.IDENTIFIER_TYPE_RDS_PI), new ArraySet<>(),
+ ProgramSelector.IDENTIFIER_TYPE_DAB_DMB_SID_EXT), new ArraySet<>(),
/* includeCategories= */ true, /* excludeModifications= */ false));
cache.filterAndUpdateFromInternal(FULL_PROGRAM_INFO_CACHE, /* purge= */ false);
expect.withMessage("Program cache filtered by identifier type")
- .that(cache.toProgramInfoList())
- .containsExactly(TEST_FM_INFO, TEST_AM_INFO, TEST_RDS_INFO);
+ .that(cache.toProgramInfoList()).containsExactly(TEST_FM_INFO, TEST_AM_INFO,
+ TEST_DAB_INFO, TEST_DAB_INFO_ALTERNATIVE);
}
@Test
@@ -233,20 +249,60 @@ public class ProgramInfoCacheTest {
ProgramInfoCache cache = new ProgramInfoCache(new ProgramList.Filter(
new ArraySet<>(), Set.of(TEST_FM_FREQUENCY_ID, TEST_DAB_DMB_SID_EXT_ID),
/* includeCategories= */ true, /* excludeModifications= */ false));
- int maxNumModifiedPerChunk = 2;
- int maxNumRemovedPerChunk = 2;
List<ProgramList.Chunk> programListChunks = cache.filterAndUpdateFromInternal(
- FULL_PROGRAM_INFO_CACHE, /* purge= */ true, maxNumModifiedPerChunk,
- maxNumRemovedPerChunk);
+ FULL_PROGRAM_INFO_CACHE, /* purge= */ false, TEST_MAX_NUM_MODIFIED_PER_CHUNK,
+ TEST_MAX_NUM_REMOVED_PER_CHUNK);
expect.withMessage("Program cache filtered by identifier")
- .that(cache.toProgramInfoList()).containsExactly(TEST_FM_INFO, TEST_DAB_INFO);
+ .that(cache.toProgramInfoList()).containsExactly(TEST_FM_INFO, TEST_DAB_INFO,
+ TEST_DAB_INFO_ALTERNATIVE);
verifyChunkListPurge(programListChunks, /* purge= */ true);
- verifyChunkListComplete(programListChunks, FULL_PROGRAM_INFO_CACHE.isComplete());
+ verifyChunkListComplete(programListChunks, cache.isComplete());
+ verifyChunkListModified(programListChunks, TEST_MAX_NUM_MODIFIED_PER_CHUNK, TEST_FM_INFO,
+ TEST_DAB_INFO, TEST_DAB_INFO_ALTERNATIVE);
+ verifyChunkListRemoved(programListChunks, TEST_MAX_NUM_REMOVED_PER_CHUNK);
+ }
+
+ @Test
+ public void filterAndUpdateFromInternal_withPurging() {
+ ProgramInfoCache cache = new ProgramInfoCache(new ProgramList.Filter(new ArraySet<>(),
+ new ArraySet<>(), /* includeCategories= */ true, /* excludeModifications= */ false),
+ /* complete= */ true, TEST_RDS_INFO, TEST_DAB_INFO);
+ ProgramInfoCache otherCache = new ProgramInfoCache(/* filter= */ null, /* complete= */ true,
+ TEST_FM_INFO, TEST_RDS_INFO, TEST_DAB_INFO_ALTERNATIVE);
+
+ List<ProgramList.Chunk> programListChunks = cache.filterAndUpdateFromInternal(otherCache,
+ /* purge= */ true, TEST_MAX_NUM_MODIFIED_PER_CHUNK, TEST_MAX_NUM_REMOVED_PER_CHUNK);
+
+ expect.withMessage("Program cache filtered with purging").that(cache.toProgramInfoList())
+ .containsExactly(TEST_FM_INFO, TEST_RDS_INFO, TEST_DAB_INFO_ALTERNATIVE);
+ verifyChunkListPurge(programListChunks, /* purge= */ true);
+ verifyChunkListModified(programListChunks, TEST_MAX_NUM_MODIFIED_PER_CHUNK, TEST_FM_INFO,
+ TEST_RDS_INFO, TEST_DAB_INFO_ALTERNATIVE);
+ verifyChunkListRemoved(programListChunks, TEST_MAX_NUM_REMOVED_PER_CHUNK);
+ }
+
+ @Test
+ public void filterAndUpdateFromInternal_withoutPurging() {
+ ProgramInfoCache cache = new ProgramInfoCache(new ProgramList.Filter(new ArraySet<>(),
+ new ArraySet<>(), /* includeCategories= */ true, /* excludeModifications= */ false),
+ /* complete= */ true, TEST_RDS_INFO, TEST_DAB_INFO);
+ ProgramInfoCache otherCache = new ProgramInfoCache(/* filter= */ null, /* complete= */ true,
+ TEST_FM_INFO, TEST_RDS_INFO, TEST_DAB_INFO_ALTERNATIVE);
+ int maxNumModifiedPerChunk = 1;
+
+ List<ProgramList.Chunk> programListChunks = cache.filterAndUpdateFromInternal(otherCache,
+ /* purge= */ false, maxNumModifiedPerChunk, TEST_MAX_NUM_REMOVED_PER_CHUNK);
+
+ expect.withMessage("Program cache filtered without puring").that(cache.toProgramInfoList())
+ .containsExactly(TEST_FM_INFO, TEST_RDS_INFO, TEST_DAB_INFO_ALTERNATIVE);
+ verifyChunkListPurge(programListChunks, /* purge= */ false);
+ verifyChunkListComplete(programListChunks, cache.isComplete());
verifyChunkListModified(programListChunks, maxNumModifiedPerChunk, TEST_FM_INFO,
- TEST_DAB_INFO);
- verifyChunkListRemoved(programListChunks, maxNumRemovedPerChunk);
+ TEST_DAB_INFO_ALTERNATIVE);
+ verifyChunkListRemoved(programListChunks, TEST_MAX_NUM_REMOVED_PER_CHUNK,
+ TEST_DAB_UNIQUE_ID);
}
@Test
@@ -255,20 +311,19 @@ public class ProgramInfoCacheTest {
new ArraySet<>(), /* includeCategories= */ false,
/* excludeModifications= */ false));
int maxNumModifiedPerChunk = 3;
- int maxNumRemovedPerChunk = 2;
List<ProgramList.Chunk> programListChunks = cache.filterAndUpdateFromInternal(
FULL_PROGRAM_INFO_CACHE, /* purge= */ false, maxNumModifiedPerChunk,
- maxNumRemovedPerChunk);
+ TEST_MAX_NUM_REMOVED_PER_CHUNK);
expect.withMessage("Program cache filtered by excluding categories")
- .that(cache.toProgramInfoList())
- .containsExactly(TEST_FM_INFO, TEST_AM_INFO, TEST_RDS_INFO, TEST_DAB_INFO);
+ .that(cache.toProgramInfoList()).containsExactly(TEST_FM_INFO, TEST_AM_INFO,
+ TEST_RDS_INFO, TEST_DAB_INFO, TEST_DAB_INFO_ALTERNATIVE);
verifyChunkListPurge(programListChunks, /* purge= */ true);
- verifyChunkListComplete(programListChunks, FULL_PROGRAM_INFO_CACHE.isComplete());
+ verifyChunkListComplete(programListChunks, cache.isComplete());
verifyChunkListModified(programListChunks, maxNumModifiedPerChunk, TEST_FM_INFO,
- TEST_AM_INFO, TEST_RDS_INFO, TEST_DAB_INFO);
- verifyChunkListRemoved(programListChunks, maxNumRemovedPerChunk);
+ TEST_AM_INFO, TEST_RDS_INFO, TEST_DAB_INFO, TEST_DAB_INFO_ALTERNATIVE);
+ verifyChunkListRemoved(programListChunks, TEST_MAX_NUM_REMOVED_PER_CHUNK);
}
@Test
@@ -279,21 +334,21 @@ public class ProgramInfoCacheTest {
ProgramInfoCache cache = new ProgramInfoCache(filterExcludingModifications,
/* complete= */ true, TEST_FM_INFO, TEST_RDS_INFO, TEST_AM_INFO, TEST_DAB_INFO);
ProgramInfoCache halCache = new ProgramInfoCache(/* filter= */ null, /* complete= */ false,
- TEST_FM_INFO_MODIFIED, TEST_VENDOR_INFO);
- int maxNumModifiedPerChunk = 2;
- int maxNumRemovedPerChunk = 2;
+ TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
List<ProgramList.Chunk> programListChunks = cache.filterAndUpdateFromInternal(halCache,
- /* purge= */ false, maxNumModifiedPerChunk, maxNumRemovedPerChunk);
+ /* purge= */ false, TEST_MAX_NUM_MODIFIED_PER_CHUNK,
+ TEST_MAX_NUM_REMOVED_PER_CHUNK);
expect.withMessage("Program cache filtered by excluding modifications")
.that(cache.toProgramInfoList())
- .containsExactly(TEST_FM_INFO, TEST_VENDOR_INFO);
+ .containsExactly(TEST_FM_INFO, TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
verifyChunkListPurge(programListChunks, /* purge= */ false);
verifyChunkListComplete(programListChunks, halCache.isComplete());
- verifyChunkListModified(programListChunks, maxNumModifiedPerChunk, TEST_VENDOR_INFO);
- verifyChunkListRemoved(programListChunks, maxNumRemovedPerChunk, TEST_RDS_PI_UNIQUE_ID,
- TEST_AM_UNIQUE_ID, TEST_DAB_UNIQUE_ID);
+ verifyChunkListModified(programListChunks, TEST_MAX_NUM_MODIFIED_PER_CHUNK,
+ TEST_VENDOR_INFO, TEST_DAB_INFO_ALTERNATIVE);
+ verifyChunkListRemoved(programListChunks, TEST_MAX_NUM_REMOVED_PER_CHUNK,
+ TEST_RDS_PI_UNIQUE_ID, TEST_AM_UNIQUE_ID, TEST_DAB_UNIQUE_ID);
}
@Test
@@ -301,69 +356,88 @@ public class ProgramInfoCacheTest {
ProgramInfoCache cache = new ProgramInfoCache(new ProgramList.Filter(new ArraySet<>(),
new ArraySet<>(), /* includeCategories= */ true,
/* excludeModifications= */ false),
- /* complete= */ true, TEST_FM_INFO, TEST_RDS_INFO);
+ /* complete= */ true, TEST_FM_INFO, TEST_RDS_INFO, TEST_DAB_INFO);
ProgramInfoCache halCache = new ProgramInfoCache(/* filter= */ null, /* complete= */ false,
- TEST_FM_INFO_MODIFIED, TEST_DAB_INFO, TEST_VENDOR_INFO);
- int maxNumModifiedPerChunk = 2;
- int maxNumRemovedPerChunk = 2;
+ TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
List<ProgramList.Chunk> programListChunks = cache.filterAndUpdateFromInternal(halCache,
- /* purge= */ true, maxNumModifiedPerChunk, maxNumRemovedPerChunk);
+ /* purge= */ true, TEST_MAX_NUM_MODIFIED_PER_CHUNK, TEST_MAX_NUM_REMOVED_PER_CHUNK);
expect.withMessage("Purged program cache").that(cache.toProgramInfoList())
- .containsExactly(TEST_FM_INFO_MODIFIED, TEST_DAB_INFO, TEST_VENDOR_INFO);
+ .containsExactly(TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALTERNATIVE,
+ TEST_VENDOR_INFO);
verifyChunkListPurge(programListChunks, /* purge= */ true);
verifyChunkListComplete(programListChunks, halCache.isComplete());
- verifyChunkListModified(programListChunks, maxNumModifiedPerChunk, TEST_FM_INFO_MODIFIED,
- TEST_DAB_INFO, TEST_VENDOR_INFO);
- verifyChunkListRemoved(programListChunks, maxNumRemovedPerChunk);
+ verifyChunkListModified(programListChunks, TEST_MAX_NUM_MODIFIED_PER_CHUNK,
+ TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
+ verifyChunkListRemoved(programListChunks, TEST_MAX_NUM_REMOVED_PER_CHUNK);
}
@Test
- public void filterAndApplyChunkInternal_withPurgingIncompleteChunk() throws RemoteException {
+ public void filterAndApplyChunkInternal_withPurgingAndIncompleteChunk() throws RemoteException {
ProgramInfoCache cache = new ProgramInfoCache(/* filter= */ null,
- /* complete= */ false, TEST_FM_INFO, TEST_DAB_INFO);
+ /* complete= */ false, TEST_FM_INFO, TEST_RDS_INFO, TEST_DAB_INFO);
ProgramListChunk halChunk = AidlTestUtils.makeHalChunk(/* purge= */ true,
- /* complete= */ false, List.of(TEST_FM_INFO_MODIFIED, TEST_RDS_INFO,
- TEST_VENDOR_INFO), List.of(TEST_DAB_DMB_SID_EXT_ID));
- int maxNumModifiedPerChunk = 2;
- int maxNumRemovedPerChunk = 2;
+ /* complete= */ false, List.of(TEST_FM_INFO_MODIFIED,
+ TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO), new ArrayList<>());
List<ProgramList.Chunk> programListChunks = cache.filterAndApplyChunkInternal(halChunk,
- maxNumModifiedPerChunk, maxNumRemovedPerChunk);
+ TEST_MAX_NUM_MODIFIED_PER_CHUNK, TEST_MAX_NUM_REMOVED_PER_CHUNK);
- expect.withMessage("Program cache applied with non-purging and complete chunk")
- .that(cache.toProgramInfoList())
- .containsExactly(TEST_FM_INFO_MODIFIED, TEST_RDS_INFO, TEST_VENDOR_INFO);
+ expect.withMessage("Program cache applied with purge-enabled and complete chunk")
+ .that(cache.toProgramInfoList()).containsExactly(TEST_FM_INFO_MODIFIED,
+ TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
verifyChunkListPurge(programListChunks, /* purge= */ true);
verifyChunkListComplete(programListChunks, /* complete= */ false);
- verifyChunkListModified(programListChunks, maxNumModifiedPerChunk, TEST_FM_INFO_MODIFIED,
- TEST_RDS_INFO, TEST_VENDOR_INFO);
- verifyChunkListRemoved(programListChunks, maxNumRemovedPerChunk);
+ verifyChunkListModified(programListChunks, TEST_MAX_NUM_MODIFIED_PER_CHUNK,
+ TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
+ verifyChunkListRemoved(programListChunks, TEST_MAX_NUM_REMOVED_PER_CHUNK);
}
@Test
- public void filterAndApplyChunk_withNonPurgingCompleteChunk() throws RemoteException {
- ProgramInfoCache cache = new ProgramInfoCache(/* filter= */ null,
- /* complete= */ false, TEST_FM_INFO, TEST_RDS_INFO, TEST_AM_INFO, TEST_DAB_INFO);
+ public void filterAndApplyChunk_withNonPurgingAndIncompleteChunk() throws RemoteException {
+ ProgramInfoCache cache = new ProgramInfoCache(/* filter= */ null, /* complete= */ false,
+ TEST_FM_INFO, TEST_RDS_INFO, TEST_AM_INFO, TEST_DAB_INFO);
+ ProgramListChunk halChunk = AidlTestUtils.makeHalChunk(/* purge= */ false,
+ /* complete= */ false, List.of(TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALTERNATIVE,
+ TEST_VENDOR_INFO), List.of(TEST_RDS_PI_ID, TEST_AM_FREQUENCY_ID));
+
+ List<ProgramList.Chunk> programListChunks = cache.filterAndApplyChunkInternal(halChunk,
+ TEST_MAX_NUM_MODIFIED_PER_CHUNK, TEST_MAX_NUM_REMOVED_PER_CHUNK);
+
+ expect.withMessage("Program cache applied with non-purging and incomplete chunk")
+ .that(cache.toProgramInfoList()).containsExactly(TEST_DAB_INFO,
+ TEST_DAB_INFO_ALTERNATIVE, TEST_FM_INFO_MODIFIED, TEST_VENDOR_INFO);
+ verifyChunkListPurge(programListChunks, /* purge= */ false);
+ verifyChunkListComplete(programListChunks, /* complete= */ false);
+ verifyChunkListModified(programListChunks, TEST_MAX_NUM_MODIFIED_PER_CHUNK,
+ TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALTERNATIVE, TEST_VENDOR_INFO);
+ verifyChunkListRemoved(programListChunks, TEST_MAX_NUM_REMOVED_PER_CHUNK,
+ TEST_RDS_PI_UNIQUE_ID, TEST_AM_UNIQUE_ID);
+ }
+
+ @Test
+ public void filterAndApplyChunk_withNonPurgingAndCompleteChunk() throws RemoteException {
+ ProgramInfoCache cache = new ProgramInfoCache(/* filter= */ null, /* complete= */ false,
+ TEST_FM_INFO, TEST_RDS_INFO, TEST_AM_INFO, TEST_DAB_INFO,
+ TEST_DAB_INFO_ALTERNATIVE);
ProgramListChunk halChunk = AidlTestUtils.makeHalChunk(/* purge= */ false,
/* complete= */ true, List.of(TEST_FM_INFO_MODIFIED, TEST_VENDOR_INFO),
List.of(TEST_RDS_PI_ID, TEST_AM_FREQUENCY_ID, TEST_DAB_DMB_SID_EXT_ID));
- int maxNumModifiedPerChunk = 2;
- int maxNumRemovedPerChunk = 2;
List<ProgramList.Chunk> programListChunks = cache.filterAndApplyChunkInternal(halChunk,
- maxNumModifiedPerChunk, maxNumRemovedPerChunk);
+ TEST_MAX_NUM_MODIFIED_PER_CHUNK, TEST_MAX_NUM_REMOVED_PER_CHUNK);
- expect.withMessage("Program cache applied with purge-enabled complete chunk")
+ expect.withMessage("Program cache applied with non-purging and complete chunk")
.that(cache.toProgramInfoList())
.containsExactly(TEST_FM_INFO_MODIFIED, TEST_VENDOR_INFO);
verifyChunkListPurge(programListChunks, /* purge= */ false);
verifyChunkListComplete(programListChunks, /* complete= */ true);
- verifyChunkListModified(programListChunks, maxNumModifiedPerChunk, TEST_FM_INFO_MODIFIED,
- TEST_VENDOR_INFO);
- verifyChunkListRemoved(programListChunks, maxNumRemovedPerChunk, TEST_RDS_PI_UNIQUE_ID,
- TEST_AM_UNIQUE_ID, TEST_DAB_UNIQUE_ID);
+ verifyChunkListModified(programListChunks, TEST_MAX_NUM_MODIFIED_PER_CHUNK,
+ TEST_FM_INFO_MODIFIED, TEST_VENDOR_INFO);
+ verifyChunkListRemoved(programListChunks, TEST_MAX_NUM_REMOVED_PER_CHUNK,
+ TEST_RDS_PI_UNIQUE_ID, TEST_AM_UNIQUE_ID, TEST_DAB_UNIQUE_ID,
+ TEST_DAB_UNIQUE_ID_ALTERNATIVE);
}
private void verifyChunkListPurge(List<ProgramList.Chunk> chunks, boolean purge) {
diff --git a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/TunerSessionTest.java b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/TunerSessionTest.java
index a64e2230ce4b..a1952282dd0b 100644
--- a/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/TunerSessionTest.java
+++ b/core/tests/BroadcastRadioTests/src/com/android/server/broadcastradio/aidl/TunerSessionTest.java
@@ -18,8 +18,6 @@ package com.android.server.broadcastradio.aidl;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
-import static com.google.common.truth.Truth.assertWithMessage;
-
import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -60,13 +58,18 @@ import com.android.dx.mockito.inline.extended.StaticMockitoSessionBuilder;
import com.android.server.broadcastradio.ExtendedRadioMockitoTestCase;
import com.android.server.broadcastradio.RadioServiceUserController;
+import com.google.common.truth.Expect;
+
import org.junit.After;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.verification.VerificationWithTimeout;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -95,13 +98,6 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
private static final ProgramSelector.Identifier TEST_FM_FREQUENCY_ID =
new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY,
/* value= */ 88_500);
- private static final ProgramSelector.Identifier TEST_RDS_PI_ID =
- new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_RDS_PI,
- /* value= */ 15_019);
-
- private static final UniqueProgramIdentifier TEST_RDS_PI_UNIQUE_ID =
- new UniqueProgramIdentifier(TEST_RDS_PI_ID);
-
private static final RadioManager.ProgramInfo TEST_FM_INFO = AidlTestUtils.makeProgramInfo(
AidlTestUtils.makeProgramSelector(ProgramSelector.PROGRAM_TYPE_FM,
TEST_FM_FREQUENCY_ID), TEST_FM_FREQUENCY_ID, TEST_FM_FREQUENCY_ID,
@@ -110,11 +106,37 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
AidlTestUtils.makeProgramInfo(AidlTestUtils.makeProgramSelector(
ProgramSelector.PROGRAM_TYPE_FM, TEST_FM_FREQUENCY_ID), TEST_FM_FREQUENCY_ID,
TEST_FM_FREQUENCY_ID, /* signalQuality= */ 100);
- private static final RadioManager.ProgramInfo TEST_RDS_INFO = AidlTestUtils.makeProgramInfo(
- AidlTestUtils.makeProgramSelector(ProgramSelector.PROGRAM_TYPE_FM, TEST_RDS_PI_ID),
- TEST_RDS_PI_ID, new ProgramSelector.Identifier(
- ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY, /* value= */ 89_500),
- SIGNAL_QUALITY);
+
+ private static final ProgramSelector.Identifier TEST_DAB_FREQUENCY_ID =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY,
+ /* value= */ 220_352);
+ private static final ProgramSelector.Identifier TEST_DAB_FREQUENCY_ID_ALT =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY,
+ /* value= */ 220_064);
+ private static final ProgramSelector.Identifier TEST_DAB_SID_EXT_ID =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_DMB_SID_EXT,
+ /* value= */ 0xA000000111L);
+ private static final ProgramSelector.Identifier TEST_DAB_ENSEMBLE_ID =
+ new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_ENSEMBLE,
+ /* value= */ 0x1001);
+ private static final ProgramSelector TEST_DAB_SELECTOR = new ProgramSelector(
+ ProgramSelector.PROGRAM_TYPE_DAB, TEST_DAB_SID_EXT_ID,
+ new ProgramSelector.Identifier[]{TEST_DAB_FREQUENCY_ID, TEST_DAB_ENSEMBLE_ID},
+ /* vendorIds= */ null);
+ private static final ProgramSelector TEST_DAB_SELECTOR_ALT = new ProgramSelector(
+ ProgramSelector.PROGRAM_TYPE_DAB, TEST_DAB_SID_EXT_ID,
+ new ProgramSelector.Identifier[]{TEST_DAB_FREQUENCY_ID_ALT, TEST_DAB_ENSEMBLE_ID},
+ /* vendorIds= */ null);
+ private static final UniqueProgramIdentifier TEST_DAB_UNIQUE_ID = new UniqueProgramIdentifier(
+ TEST_DAB_SELECTOR);
+ private static final UniqueProgramIdentifier TEST_DAB_UNIQUE_ID_ALT =
+ new UniqueProgramIdentifier(TEST_DAB_SELECTOR_ALT);
+ private static final RadioManager.ProgramInfo TEST_DAB_INFO =
+ AidlTestUtils.makeProgramInfo(TEST_DAB_SELECTOR, TEST_DAB_SID_EXT_ID,
+ TEST_DAB_FREQUENCY_ID, SIGNAL_QUALITY);
+ private static final RadioManager.ProgramInfo TEST_DAB_INFO_ALT =
+ AidlTestUtils.makeProgramInfo(TEST_DAB_SELECTOR_ALT, TEST_DAB_SID_EXT_ID,
+ TEST_DAB_FREQUENCY_ID_ALT, SIGNAL_QUALITY);
// Mocks
@Mock
@@ -133,6 +155,9 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
private TunerSession[] mTunerSessions;
+ @Rule
+ public final Expect expect = Expect.create();
+
@Override
protected void initializeSession(StaticMockitoSessionBuilder builder) {
builder.spyStatic(RadioServiceUserController.class).spyStatic(CompatChanges.class)
@@ -229,7 +254,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
openAidlClients(numSessions);
for (int index = 0; index < numSessions; index++) {
- assertWithMessage("Session of index %s close state", index)
+ expect.withMessage("Session of index %s close state", index)
.that(mTunerSessions[index].isClosed()).isFalse();
}
}
@@ -261,7 +286,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
RadioManager.BandConfig config = mTunerSessions[0].getConfiguration();
- assertWithMessage("Session configuration").that(config)
+ expect.withMessage("Session configuration").that(config)
.isEqualTo(FM_BAND_CONFIG);
}
@@ -271,7 +296,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].setMuted(/* mute= */ false);
- assertWithMessage("Session mute state after setting unmuted")
+ expect.withMessage("Session mute state after setting unmuted")
.that(mTunerSessions[0].isMuted()).isFalse();
}
@@ -281,7 +306,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].setMuted(/* mute= */ true);
- assertWithMessage("Session mute state after setting muted")
+ expect.withMessage("Session mute state after setting muted")
.that(mTunerSessions[0].isMuted()).isTrue();
}
@@ -291,7 +316,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].close();
- assertWithMessage("Close state of broadcast radio service session")
+ expect.withMessage("Close state of broadcast radio service session")
.that(mTunerSessions[0].isClosed()).isTrue();
}
@@ -305,11 +330,11 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
for (int index = 0; index < numSessions; index++) {
if (index == closeIdx) {
- assertWithMessage(
+ expect.withMessage(
"Close state of broadcast radio service session of index %s", index)
.that(mTunerSessions[index].isClosed()).isTrue();
} else {
- assertWithMessage(
+ expect.withMessage(
"Close state of broadcast radio service session of index %s", index)
.that(mTunerSessions[index].isClosed()).isFalse();
}
@@ -324,7 +349,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].close(errorCode);
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onError(errorCode);
- assertWithMessage("Close state of broadcast radio service session")
+ expect.withMessage("Close state of broadcast radio service session")
.that(mTunerSessions[0].isClosed()).isTrue();
}
@@ -338,7 +363,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
for (int index = 0; index < numSessions; index++) {
verify(mAidlTunerCallbackMocks[index], CALLBACK_TIMEOUT).onError(errorCode);
- assertWithMessage("Close state of broadcast radio service session of index %s", index)
+ expect.withMessage("Close state of broadcast radio service session of index %s", index)
.that(mTunerSessions[index].isClosed()).isTrue();
}
}
@@ -387,22 +412,12 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
@Test
public void tune_withUnsupportedSelector_throwsException() throws Exception {
- ProgramSelector.Identifier dabPrimaryId =
- new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_DMB_SID_EXT,
- /* value= */ 0xA000000111L);
- ProgramSelector.Identifier[] dabSecondaryIds = new ProgramSelector.Identifier[]{
- new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_ENSEMBLE,
- /* value= */ 1337),
- new ProgramSelector.Identifier(ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY,
- /* value= */ 225648)};
- ProgramSelector unsupportedSelector = new ProgramSelector(ProgramSelector.PROGRAM_TYPE_DAB,
- dabPrimaryId, dabSecondaryIds, /* vendorIds= */ null);
openAidlClients(/* numClients= */ 1);
UnsupportedOperationException thrown = assertThrows(UnsupportedOperationException.class,
- () -> mTunerSessions[0].tune(unsupportedSelector));
+ () -> mTunerSessions[0].tune(TEST_DAB_SELECTOR));
- assertWithMessage("Exception for tuning on unsupported program selector")
+ expect.withMessage("Exception for tuning on unsupported program selector")
.that(thrown).hasMessageThat().contains("tune: NOT_SUPPORTED");
}
@@ -417,7 +432,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class,
() -> mTunerSessions[0].tune(invalidSel));
- assertWithMessage("Exception for tuning on DAB selector without DAB_SID_EXT primary id")
+ expect.withMessage("Exception for tuning on DAB selector without DAB_SID_EXT primary id")
.that(thrown).hasMessageThat().contains("tune: INVALID_ARGUMENTS");
}
@@ -461,7 +476,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].tune(sel);
});
- assertWithMessage("Unknown error HAL exception when tuning")
+ expect.withMessage("Unknown error HAL exception when tuning")
.that(thrown).hasMessageThat().contains("UNKNOWN_ERROR");
}
@@ -524,7 +539,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].step(/* directionDown= */ true, /* skipSubChannel= */ false);
});
- assertWithMessage("Exception for stepping when HAL is in invalid state")
+ expect.withMessage("Exception for stepping when HAL is in invalid state")
.that(thrown).hasMessageThat().contains("INVALID_STATE");
}
@@ -603,7 +618,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].seek(/* directionDown= */ true, /* skipSubChannel= */ false);
});
- assertWithMessage("Internal error HAL exception when seeking")
+ expect.withMessage("Internal error HAL exception when seeking")
.that(thrown).hasMessageThat().contains("INTERNAL_ERROR");
}
@@ -640,7 +655,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].cancel();
});
- assertWithMessage("Exception for canceling when HAL throws remote exception")
+ expect.withMessage("Exception for canceling when HAL throws remote exception")
.that(thrown).hasMessageThat().contains(exceptionMessage);
}
@@ -653,7 +668,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].getImage(imageId);
});
- assertWithMessage("Get image exception")
+ expect.withMessage("Get image exception")
.that(thrown).hasMessageThat().contains("Image ID is missing");
}
@@ -664,7 +679,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
Bitmap imageTest = mTunerSessions[0].getImage(imageId);
- assertWithMessage("Null image").that(imageTest).isEqualTo(null);
+ expect.withMessage("Null image").that(imageTest).isEqualTo(null);
}
@Test
@@ -678,7 +693,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].getImage(/* id= */ 1);
});
- assertWithMessage("Exception for getting image when HAL throws remote exception")
+ expect.withMessage("Exception for getting image when HAL throws remote exception")
.that(thrown).hasMessageThat().contains(exceptionMessage);
}
@@ -706,8 +721,8 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
openAidlClients(/* numClients= */ 1);
ProgramList.Filter filter = new ProgramList.Filter(new ArraySet<>(), new ArraySet<>(),
/* includeCategories= */ true, /* excludeModifications= */ false);
- ProgramFilter halFilter = ConversionUtils.filterToHalProgramFilter(filter);
- List<RadioManager.ProgramInfo> modified = List.of(TEST_FM_INFO, TEST_RDS_INFO);
+ List<RadioManager.ProgramInfo> modified = List.of(TEST_FM_INFO, TEST_DAB_INFO,
+ TEST_DAB_INFO_ALT);
List<ProgramSelector.Identifier> halRemoved = new ArrayList<>();
List<UniqueProgramIdentifier> removed = new ArrayList<>();
ProgramListChunk halProgramList = AidlTestUtils.makeHalChunk(/* purge= */ true,
@@ -718,7 +733,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].startProgramListUpdates(filter);
mHalTunerCallback.onProgramListUpdated(halProgramList);
- verify(mBroadcastRadioMock).startProgramListUpdates(halFilter);
+ verifyHalProgramListUpdatesInvocation(filter);
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT)
.onProgramListUpdated(expectedProgramList);
}
@@ -728,19 +743,23 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
openAidlClients(/* numClients= */ 1);
ProgramList.Filter filter = new ProgramList.Filter(new ArraySet<>(), new ArraySet<>(),
/* includeCategories= */ true, /* excludeModifications= */ false);
+ List<RadioManager.ProgramInfo> modifiedInfo = List.of(TEST_FM_INFO, TEST_DAB_INFO,
+ TEST_DAB_INFO_ALT);
mTunerSessions[0].startProgramListUpdates(filter);
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ true,
- /* complete= */ true, List.of(TEST_FM_INFO, TEST_RDS_INFO), new ArrayList<>()));
+ /* complete= */ true, modifiedInfo, new ArrayList<>()));
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
- AidlTestUtils.makeChunk(/* purge= */ true, /* complete= */ true,
- List.of(TEST_FM_INFO, TEST_RDS_INFO), new ArrayList<>()));
+ AidlTestUtils.makeChunk(/* purge= */ true, /* complete= */ true, modifiedInfo,
+ new ArrayList<>()));
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED), List.of(TEST_RDS_PI_ID)));
+ /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED),
+ List.of(TEST_DAB_SID_EXT_ID)));
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
AidlTestUtils.makeChunk(/* purge= */ false, /* complete= */ true,
- List.of(TEST_FM_INFO_MODIFIED), List.of(TEST_RDS_PI_UNIQUE_ID)));
+ List.of(TEST_FM_INFO_MODIFIED),
+ List.of(TEST_DAB_UNIQUE_ID, TEST_DAB_UNIQUE_ID_ALT)));
}
@Test
@@ -748,17 +767,21 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
openAidlClients(/* numClients= */ 1);
ProgramList.Filter filter = new ProgramList.Filter(new ArraySet<>(), new ArraySet<>(),
/* includeCategories= */ true, /* excludeModifications= */ false);
+ List<RadioManager.ProgramInfo> modifiedInfo = List.of(TEST_FM_INFO, TEST_DAB_INFO,
+ TEST_DAB_INFO_ALT);
mTunerSessions[0].startProgramListUpdates(filter);
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ true,
- /* complete= */ true, List.of(TEST_FM_INFO, TEST_RDS_INFO), new ArrayList<>()));
+ /* complete= */ true, modifiedInfo, new ArrayList<>()));
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
- AidlTestUtils.makeChunk(/* purge= */ true, /* complete= */ true,
- List.of(TEST_FM_INFO, TEST_RDS_INFO), new ArrayList<>()));
+ AidlTestUtils.makeChunk(/* purge= */ true, /* complete= */ true, modifiedInfo,
+ new ArrayList<>()));
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED), List.of(TEST_RDS_PI_ID)));
+ /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED),
+ List.of(TEST_DAB_SID_EXT_ID)));
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
AidlTestUtils.makeChunk(/* purge= */ false, /* complete= */ true,
- List.of(TEST_FM_INFO_MODIFIED), List.of(TEST_RDS_PI_UNIQUE_ID)));
+ List.of(TEST_FM_INFO_MODIFIED),
+ List.of(TEST_DAB_UNIQUE_ID, TEST_DAB_UNIQUE_ID_ALT)));
mTunerSessions[0].startProgramListUpdates(filter);
@@ -771,40 +794,44 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
@Test
public void startProgramListUpdates_withNullFilter() throws Exception {
openAidlClients(/* numClients= */ 1);
+ List<RadioManager.ProgramInfo> modifiedInfo = List.of(TEST_FM_INFO, TEST_DAB_INFO,
+ TEST_DAB_INFO_ALT);
mTunerSessions[0].startProgramListUpdates(/* filter= */ null);
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ true,
- /* complete= */ true, List.of(TEST_FM_INFO, TEST_RDS_INFO), new ArrayList<>()));
+ /* complete= */ true, modifiedInfo, new ArrayList<>()));
verify(mBroadcastRadioMock).startProgramListUpdates(any());
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
- AidlTestUtils.makeChunk(/* purge= */ true, /* complete= */ true,
- List.of(TEST_FM_INFO, TEST_RDS_INFO), new ArrayList<>()));
+ AidlTestUtils.makeChunk(/* purge= */ true, /* complete= */ true, modifiedInfo,
+ new ArrayList<>()));
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED), List.of(TEST_RDS_PI_ID)));
+ /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED),
+ List.of(TEST_DAB_SID_EXT_ID)));
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
AidlTestUtils.makeChunk(/* purge= */ false, /* complete= */ true,
- List.of(TEST_FM_INFO_MODIFIED), List.of(TEST_RDS_PI_UNIQUE_ID)));
+ List.of(TEST_FM_INFO_MODIFIED),
+ List.of(TEST_DAB_UNIQUE_ID, TEST_DAB_UNIQUE_ID_ALT)));
}
@Test
public void startProgramListUpdates_withIdFilter() throws Exception {
openAidlClients(/* numClients= */ 1);
ProgramList.Filter idFilter = new ProgramList.Filter(new ArraySet<>(),
- Set.of(TEST_RDS_PI_ID), /* includeCategories= */ true,
+ Set.of(TEST_DAB_SID_EXT_ID), /* includeCategories= */ true,
/* excludeModifications= */ true);
- ProgramFilter halFilter = ConversionUtils.filterToHalProgramFilter(idFilter);
mTunerSessions[0].startProgramListUpdates(idFilter);
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_RDS_INFO), new ArrayList<>()));
+ /* complete= */ true, List.of(TEST_DAB_INFO, TEST_DAB_INFO_ALT),
+ new ArrayList<>()));
- verify(mBroadcastRadioMock).startProgramListUpdates(halFilter);
+ verifyHalProgramListUpdatesInvocation(idFilter);
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
AidlTestUtils.makeChunk(/* purge= */ false, /* complete= */ true,
- List.of(TEST_RDS_INFO), new ArrayList<>()));
+ List.of(TEST_DAB_INFO, TEST_DAB_INFO_ALT), new ArrayList<>()));
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
/* complete= */ true, List.of(TEST_FM_INFO), new ArrayList<>()));
@@ -816,50 +843,52 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
public void startProgramListUpdates_withFilterExcludingModifications() throws Exception {
openAidlClients(/* numClients= */ 1);
ProgramList.Filter filterExcludingModifications = new ProgramList.Filter(
- Set.of(ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY), new ArraySet<>(),
+ Set.of(ProgramSelector.IDENTIFIER_TYPE_DAB_DMB_SID_EXT,
+ ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY), new ArraySet<>(),
/* includeCategories= */ true, /* excludeModifications= */ true);
- ProgramFilter halFilter =
- ConversionUtils.filterToHalProgramFilter(filterExcludingModifications);
mTunerSessions[0].startProgramListUpdates(filterExcludingModifications);
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_FM_INFO), new ArrayList<>()));
+ /* complete= */ true, List.of(TEST_FM_INFO, TEST_DAB_INFO), new ArrayList<>()));
- verify(mBroadcastRadioMock).startProgramListUpdates(halFilter);
+ verifyHalProgramListUpdatesInvocation(filterExcludingModifications);
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
AidlTestUtils.makeChunk(/* purge= */ false, /* complete= */ true,
- List.of(TEST_FM_INFO), new ArrayList<>()));
+ List.of(TEST_FM_INFO, TEST_DAB_INFO), new ArrayList<>()));
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED), new ArrayList<>()));
+ /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALT),
+ new ArrayList<>()));
- verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(any());
+ verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
+ AidlTestUtils.makeChunk(/* purge= */ false, /* complete= */ true,
+ List.of(TEST_DAB_INFO_ALT), new ArrayList<>()));
}
@Test
public void startProgramListUpdates_withFilterIncludingModifications() throws Exception {
openAidlClients(/* numClients= */ 1);
ProgramList.Filter filterIncludingModifications = new ProgramList.Filter(
- Set.of(ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY), new ArraySet<>(),
+ Set.of(ProgramSelector.IDENTIFIER_TYPE_DAB_DMB_SID_EXT,
+ ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY), new ArraySet<>(),
/* includeCategories= */ true, /* excludeModifications= */ false);
- ProgramFilter halFilter =
- ConversionUtils.filterToHalProgramFilter(filterIncludingModifications);
mTunerSessions[0].startProgramListUpdates(filterIncludingModifications);
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_FM_INFO), new ArrayList<>()));
+ /* complete= */ true, List.of(TEST_FM_INFO, TEST_DAB_INFO), new ArrayList<>()));
- verify(mBroadcastRadioMock).startProgramListUpdates(halFilter);
+ verifyHalProgramListUpdatesInvocation(filterIncludingModifications);
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
AidlTestUtils.makeChunk(/* purge= */ false, /* complete= */ true,
- List.of(TEST_FM_INFO), new ArrayList<>()));
+ List.of(TEST_FM_INFO, TEST_DAB_INFO), new ArrayList<>()));
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED), new ArrayList<>()));
+ /* complete= */ true, List.of(TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALT),
+ new ArrayList<>()));
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT).onProgramListUpdated(
AidlTestUtils.makeChunk(/* purge= */ false, /* complete= */ true,
- List.of(TEST_FM_INFO_MODIFIED), new ArrayList<>()));
+ List.of(TEST_FM_INFO_MODIFIED, TEST_DAB_INFO_ALT), new ArrayList<>()));
}
@Test
@@ -915,7 +944,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
int numSessions = 3;
openAidlClients(numSessions);
List<ProgramList.Filter> filters = List.of(new ProgramList.Filter(
- Set.of(ProgramSelector.IDENTIFIER_TYPE_RDS_PI), new ArraySet<>(),
+ Set.of(ProgramSelector.IDENTIFIER_TYPE_DAB_DMB_SID_EXT), new ArraySet<>(),
/* includeCategories= */ true, /* excludeModifications= */ false),
new ProgramList.Filter(new ArraySet<>(), Set.of(TEST_FM_FREQUENCY_ID),
/* includeCategories= */ false, /* excludeModifications= */ true),
@@ -927,18 +956,20 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
}
mHalTunerCallback.onProgramListUpdated(AidlTestUtils.makeHalChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_FM_INFO, TEST_RDS_INFO), new ArrayList<>()));
+ /* complete= */ true, List.of(TEST_FM_INFO, TEST_DAB_INFO, TEST_DAB_INFO_ALT),
+ new ArrayList<>()));
verify(mAidlTunerCallbackMocks[0], CALLBACK_TIMEOUT)
.onProgramListUpdated(AidlTestUtils.makeChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_RDS_INFO), new ArrayList<>()));
+ /* complete= */ true, List.of(TEST_DAB_INFO, TEST_DAB_INFO_ALT),
+ new ArrayList<>()));
verify(mAidlTunerCallbackMocks[1], CALLBACK_TIMEOUT)
.onProgramListUpdated(AidlTestUtils.makeChunk(/* purge= */ false,
/* complete= */ true, List.of(TEST_FM_INFO), new ArrayList<>()));
verify(mAidlTunerCallbackMocks[2], CALLBACK_TIMEOUT)
.onProgramListUpdated(AidlTestUtils.makeChunk(/* purge= */ false,
- /* complete= */ true, List.of(TEST_RDS_INFO, TEST_FM_INFO),
- new ArrayList<>()));
+ /* complete= */ true, List.of(TEST_DAB_INFO, TEST_DAB_INFO_ALT,
+ TEST_FM_INFO), new ArrayList<>()));
}
@Test
@@ -963,7 +994,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].startProgramListUpdates(/* filter= */ null);
});
- assertWithMessage("Unknown error HAL exception when updating program list")
+ expect.withMessage("Unknown error HAL exception when updating program list")
.that(thrown).hasMessageThat().contains("UNKNOWN_ERROR");
}
@@ -1000,7 +1031,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
boolean isSupported = mTunerSessions[0].isConfigFlagSupported(flag);
verify(mBroadcastRadioMock).isConfigFlagSet(flag);
- assertWithMessage("Config flag %s is supported", flag).that(isSupported).isFalse();
+ expect.withMessage("Config flag %s is supported", flag).that(isSupported).isFalse();
}
@Test
@@ -1011,7 +1042,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
boolean isSupported = mTunerSessions[0].isConfigFlagSupported(flag);
verify(mBroadcastRadioMock).isConfigFlagSet(flag);
- assertWithMessage("Config flag %s is supported", flag).that(isSupported).isTrue();
+ expect.withMessage("Config flag %s is supported", flag).that(isSupported).isTrue();
}
@Test
@@ -1023,7 +1054,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].setConfigFlag(flag, /* value= */ true);
});
- assertWithMessage("Exception for setting unsupported flag %s", flag)
+ expect.withMessage("Exception for setting unsupported flag %s", flag)
.that(thrown).hasMessageThat().contains("setConfigFlag: NOT_SUPPORTED");
}
@@ -1068,7 +1099,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].isConfigFlagSet(flag);
});
- assertWithMessage("Exception for checking if unsupported flag %s is set", flag)
+ expect.withMessage("Exception for checking if unsupported flag %s is set", flag)
.that(thrown).hasMessageThat().contains("isConfigFlagSet: NOT_SUPPORTED");
}
@@ -1081,7 +1112,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
boolean isSet = mTunerSessions[0].isConfigFlagSet(flag);
- assertWithMessage("Config flag %s is set", flag)
+ expect.withMessage("Config flag %s is set", flag)
.that(isSet).isEqualTo(expectedConfigFlagValue);
}
@@ -1095,7 +1126,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].isConfigFlagSet(flag);
});
- assertWithMessage("Exception for checking config flag when HAL throws remote exception")
+ expect.withMessage("Exception for checking config flag when HAL throws remote exception")
.that(thrown).hasMessageThat().contains("Failed to check flag");
}
@@ -1136,7 +1167,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].setParameters(parametersSet);
});
- assertWithMessage("Exception for setting parameters when HAL throws remote exception")
+ expect.withMessage("Exception for setting parameters when HAL throws remote exception")
.that(thrown).hasMessageThat().contains(exceptionMessage);
}
@@ -1162,7 +1193,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
mTunerSessions[0].getParameters(parameterKeys);
});
- assertWithMessage("Exception for getting parameters when HAL throws remote exception")
+ expect.withMessage("Exception for getting parameters when HAL throws remote exception")
.that(thrown).hasMessageThat().contains(exceptionMessage);
}
@@ -1269,4 +1300,24 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
}
return seekFrequency;
}
+
+ private void verifyHalProgramListUpdatesInvocation(ProgramList.Filter filter) throws Exception {
+ ProgramFilter halFilterExpected = ConversionUtils.filterToHalProgramFilter(filter);
+ ArgumentCaptor<ProgramFilter> halFilterCaptor = ArgumentCaptor.forClass(
+ ProgramFilter.class);
+ verify(mBroadcastRadioMock).startProgramListUpdates(halFilterCaptor.capture());
+ ProgramFilter halFilterInvoked = halFilterCaptor.getValue();
+ expect.withMessage("Filtered identifier types").that(
+ halFilterInvoked.identifierTypes).asList().containsExactlyElementsIn(Arrays.stream(
+ halFilterExpected.identifierTypes).boxed().toArray(Integer[]::new));
+ expect.withMessage("Filtered identifiers").that(
+ halFilterInvoked.identifiers).asList()
+ .containsExactlyElementsIn(halFilterExpected.identifiers);
+ expect.withMessage("Categories-included filter")
+ .that(halFilterInvoked.includeCategories)
+ .isEqualTo(halFilterExpected.includeCategories);
+ expect.withMessage("Modifications-excluded filter")
+ .that(halFilterInvoked.excludeModifications)
+ .isEqualTo(halFilterExpected.excludeModifications);
+ }
}