From 9d2260ab3735527cc42bb3b0e17541580ddd5b1c Mon Sep 17 00:00:00 2001 From: Weilin Xu Date: Fri, 4 Nov 2022 07:52:10 +0000 Subject: [PATCH] Add unit test for public methods in radio tuner Unit tests for public methods in public abstract radio tuner are added. Meanwhile, resistering program list callback with executor are also tested when identifiers are removed to coverge tests for all methods in program list callback. Bug: 249602599 Test: atest DefaultRadioTunerTest Change-Id: If6d6f60a8a1d4b7177ea4bbfeb97cc53b6bff4c4 --- .../unittests/DefaultRadioTunerTest.java | 171 ++++++++++++++++++ .../tests/unittests/ProgramListTest.java | 21 ++- 2 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 core/tests/BroadcastRadioTests/src/android/hardware/radio/tests/unittests/DefaultRadioTunerTest.java 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;