diff --git a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/DefaultRadioTunerTest.java b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/DefaultRadioTunerTest.java new file mode 100644 index 0000000000000..2fa3f87668ca0 --- /dev/null +++ b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/DefaultRadioTunerTest.java @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2022 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.hardware.radio.tests.unittests; + +import static com.google.common.truth.Truth.assertWithMessage; + +import static org.junit.Assert.assertThrows; + +import android.graphics.Bitmap; +import android.hardware.radio.ProgramList; +import android.hardware.radio.ProgramSelector; +import android.hardware.radio.RadioManager; +import android.hardware.radio.RadioTuner; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public final class DefaultRadioTunerTest { + + private static final RadioTuner DEFAULT_RADIO_TUNER = new RadioTuner() { + @Override + public void close() {} + + @Override + public int setConfiguration(RadioManager.BandConfig config) { + return 0; + } + + @Override + public int getConfiguration(RadioManager.BandConfig[] config) { + return 0; + } + + @Override + public int setMute(boolean mute) { + return 0; + } + + @Override + public boolean getMute() { + return false; + } + + @Override + public int step(int direction, boolean skipSubChannel) { + return 0; + } + + @Override + public int scan(int direction, boolean skipSubChannel) { + return 0; + } + + @Override + public int tune(int channel, int subChannel) { + return 0; + } + + @Override + public void tune(@NonNull ProgramSelector selector) {} + + @Override + public int cancel() { + return 0; + } + + @Override + public void cancelAnnouncement() {} + + @Override + public int getProgramInformation(RadioManager.ProgramInfo[] info) { + return 0; + } + + @Nullable + @Override + public Bitmap getMetadataImage(int id) { + return null; + } + + @Override + public boolean startBackgroundScan() { + return false; + } + + @NonNull + @Override + public List getProgramList( + @Nullable Map vendorFilter) { + return new ArrayList<>(); + } + + @Override + public boolean isAnalogForced() { + return false; + } + + @Override + public void setAnalogForced(boolean isForced) {} + + @Override + public boolean isAntennaConnected() { + return false; + } + + @Override + public boolean hasControl() { + return false; + } + }; + + @Test + public void getDynamicProgramList_forRadioTuner_returnsNull() { + assertWithMessage("Dynamic program list obtained from default radio tuner") + .that(DEFAULT_RADIO_TUNER.getDynamicProgramList(new ProgramList.Filter())).isNull(); + } + + @Test + public void isConfigFlagSupported_forRadioTuner_throwsException() { + assertWithMessage("Dynamic program list obtained from default radio tuner") + .that(DEFAULT_RADIO_TUNER.isConfigFlagSupported(/* flag= */ 1)).isFalse(); + } + + @Test + public void isConfigFlagSet_forRadioTuner_throwsException() { + assertThrows(UnsupportedOperationException.class, () -> { + DEFAULT_RADIO_TUNER.isConfigFlagSet(/* flag= */ 1); + }); + } + + @Test + public void setConfigFlag_forRadioTuner_throwsException() { + assertThrows(UnsupportedOperationException.class, () -> { + DEFAULT_RADIO_TUNER.setConfigFlag(/* flag= */ 1, /* value= */ false); + }); + } + + @Test + public void setParameters_forRadioTuner_throwsException() { + assertThrows(UnsupportedOperationException.class, () -> { + DEFAULT_RADIO_TUNER.setParameters(Map.of("testKey", "testValue")); + }); + } + + @Test + public void getParameters_forRadioTuner_throwsException() { + assertThrows(UnsupportedOperationException.class, () -> { + DEFAULT_RADIO_TUNER.getParameters(List.of("testKey")); + }); + } +} diff --git a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/ProgramListTest.java b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/ProgramListTest.java index 27111004ae609..2b9de18701e2e 100644 --- a/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/ProgramListTest.java +++ b/core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/ProgramListTest.java @@ -360,17 +360,34 @@ public final class ProgramListTest { } @Test - public void registerListCallback_withExecutor() throws Exception { + public void onItemChanged_forListCallbackRegisteredWithExecutor_invokesWhenIdAdded() + throws Exception { createRadioTuner(); mProgramList = mRadioTuner.getDynamicProgramList(TEST_FILTER); ProgramList.ListCallback listCallbackMock = mock(ProgramList.ListCallback.class); - mProgramList.registerListCallback(mExecutor, listCallbackMock); + mTunerCallback.onProgramListUpdated(FM_ADD_INCOMPLETE_CHUNK); verify(listCallbackMock, CALLBACK_TIMEOUT).onItemChanged(FM_IDENTIFIER); } + @Test + public void onItemRemoved_forListCallbackRegisteredWithExecutor_invokesWhenIdRemoved() + throws Exception { + ProgramList.Chunk purgeChunk = new ProgramList.Chunk(/* purge= */ true, + /* complete= */ true, new ArraySet<>(), new ArraySet<>()); + createRadioTuner(); + mProgramList = mRadioTuner.getDynamicProgramList(TEST_FILTER); + ProgramList.ListCallback listCallbackMock = mock(ProgramList.ListCallback.class); + mProgramList.registerListCallback(mExecutor, listCallbackMock); + mTunerCallback.onProgramListUpdated(FM_ADD_INCOMPLETE_CHUNK); + + mTunerCallback.onProgramListUpdated(purgeChunk); + + verify(listCallbackMock, CALLBACK_TIMEOUT).onItemRemoved(FM_IDENTIFIER); + } + @Test public void onProgramListUpdated_withMultipleListCallBacks() throws Exception { int numCallbacks = 3;