Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b4f8234 authored by Weilin Xu's avatar Weilin Xu Committed by Android (Google) Code Review
Browse files

Merge "Add tune test for default bcradio HAL" into main

parents f5d717f2 ffe00b7f
Loading
Loading
Loading
Loading
+78 −0
Original line number Diff line number Diff line
@@ -72,6 +72,13 @@ const VirtualRadio& getAmFmMockTestRadio() {
    return amFmRadioMockTestRadio;
}

int getSignalAcquisitionFlags(const ProgramInfo& info) {
    return (info.infoFlags &
            (ProgramInfo::FLAG_SIGNAL_ACQUISITION | ProgramInfo::FLAG_HD_SIS_ACQUISITION |
             ProgramInfo::FLAG_HD_AUDIO_ACQUISITION)) >>
           6;
}

}  // namespace

class DefaultBroadcastRadioHalTest : public testing::Test {
@@ -88,6 +95,28 @@ class DefaultBroadcastRadioHalTest : public testing::Test {
        EXPECT_FALSE(mTunerCallback->isTunerFailed());
    }

    void verifyUpdatedProgramInfo(const ProgramSelector& sel) {
        ASSERT_TRUE(mTunerCallback->waitOnCurrentProgramInfoChangedCallback());
        ProgramInfo infoCb1 = mTunerCallback->getCurrentProgramInfo();
        mTunerCallback->reset();
        if (sel.primaryId.type == IdentifierType::HD_STATION_ID_EXT) {
            EXPECT_TRUE(mTunerCallback->waitOnCurrentProgramInfoChangedCallback());
            ProgramInfo infoCb2 = mTunerCallback->getCurrentProgramInfo();
            mTunerCallback->reset();
            EXPECT_TRUE(mTunerCallback->waitOnCurrentProgramInfoChangedCallback());
            ProgramInfo infoCb3 = mTunerCallback->getCurrentProgramInfo();
            mTunerCallback->reset();
            EXPECT_EQ(infoCb1.selector, sel);
            EXPECT_EQ(getSignalAcquisitionFlags(infoCb1), 0b001);
            EXPECT_EQ(infoCb2.selector, sel);
            EXPECT_EQ(getSignalAcquisitionFlags(infoCb2), 0b011);
            EXPECT_EQ(infoCb3.selector, sel);
            EXPECT_EQ(getSignalAcquisitionFlags(infoCb3), 0b111);
        } else {
            EXPECT_EQ(infoCb1.selector, sel);
        }
    }

    std::shared_ptr<BroadcastRadio> mBroadcastRadioHal;
    std::shared_ptr<MockBroadcastRadioCallback> mTunerCallback;
};
@@ -168,4 +197,53 @@ TEST_F(DefaultBroadcastRadioHalTest, UnsetTunerCallbackWithNull) {
    ASSERT_TRUE(halResult.isOk());
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWithAmFmSelectorInProgramList) {
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();

    auto halResult = mBroadcastRadioHal->tune(kFmSel1);

    ASSERT_TRUE(halResult.isOk());
    ASSERT_TRUE(mTunerCallback->waitOnCurrentProgramInfoChangedCallback());
    ProgramInfo infoCb = mTunerCallback->getCurrentProgramInfo();
    EXPECT_EQ(infoCb.selector, kFmSel1);
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWithHdSelectorInProgramList) {
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();

    auto halResult = mBroadcastRadioHal->tune(kFmHdFreq1Sel2);

    ASSERT_TRUE(halResult.isOk());
    verifyUpdatedProgramInfo(kFmHdFreq1Sel2);
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWitFrequencyOfHdProgramInProgramList) {
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    mTunerCallback->reset();

    auto halResult = mBroadcastRadioHal->tune(
            utils::makeSelectorAmfm(utils::getHdFrequency(kFmHdFreq1Sel1)));

    ASSERT_TRUE(halResult.isOk());
    verifyUpdatedProgramInfo(kFmHdFreq1Sel1);
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWithInvalidSelector) {
    ASSERT_TRUE(mBroadcastRadioHal->setTunerCallback(mTunerCallback).isOk());
    ProgramSelector invalidSelector = {utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 0),
                                       {}};

    auto halResult = mBroadcastRadioHal->tune(invalidSelector);

    ASSERT_EQ(halResult.getServiceSpecificError(), utils::resultToInt(Result::INVALID_ARGUMENTS));
}

TEST_F(DefaultBroadcastRadioHalTest, TuneWithoutTunerCallback) {
    auto halResult = mBroadcastRadioHal->tune(kFmSel1);

    ASSERT_EQ(halResult.getServiceSpecificError(), utils::resultToInt(Result::INVALID_STATE));
}

}  // namespace aidl::android::hardware::broadcastradio