Fix failed test case for BatteryTip in Settings

- Replace the deprecated mocktio rule with MockitoJUnit.rule
- Fix the failed test cases
- Update the testing convention

Bug: 323627875
Test: atest SettingsRoboTests:com.android.settings.fuelgauge.batterytip
Change-Id: I25a39c8e7ad07482352c1e2152d8e16555429ab1
This commit is contained in:
Pajace Chen
2024-02-03 15:43:20 +08:00
parent 32587dbdcf
commit 4af6ae88a4
4 changed files with 49 additions and 72 deletions

View File

@@ -20,30 +20,29 @@ import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType.
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.text.format.DateUtils;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.widget.CardPreference; import com.android.settings.widget.CardPreference;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -53,8 +52,8 @@ public class BatteryTipPreferenceControllerTest {
private static final String KEY_PREF = "battery_tip"; private static final String KEY_PREF = "battery_tip";
private static final String KEY_TIP = "key_battery_tip"; private static final String KEY_TIP = "key_battery_tip";
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
@Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
@Mock private BatteryTipPreferenceController.BatteryTipListener mBatteryTipListener; @Mock private BatteryTipPreferenceController.BatteryTipListener mBatteryTipListener;
@Mock private PreferenceScreen mPreferenceScreen; @Mock private PreferenceScreen mPreferenceScreen;
@Mock private BatteryTip mBatteryTip; @Mock private BatteryTip mBatteryTip;
@@ -64,21 +63,16 @@ public class BatteryTipPreferenceControllerTest {
private Context mContext; private Context mContext;
private CardPreference mCardPreference; private CardPreference mCardPreference;
private BatteryTipPreferenceController mBatteryTipPreferenceController; private BatteryTipPreferenceController mBatteryTipPreferenceController;
private List<BatteryTip> mOldBatteryTips;
private List<BatteryTip> mNewBatteryTips; private List<BatteryTip> mNewBatteryTips;
private FakeFeatureFactory mFeatureFactory;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); mContext = ApplicationProvider.getApplicationContext();
mContext = RuntimeEnvironment.application;
mCardPreference = spy(new CardPreference(mContext)); mCardPreference = new CardPreference(mContext);
when(mPreferenceScreen.getContext()).thenReturn(mContext); when(mPreferenceScreen.getContext()).thenReturn(mContext);
doReturn(mCardPreference).when(mPreferenceScreen).findPreference(KEY_PREF); doReturn(mCardPreference).when(mPreferenceScreen).findPreference(KEY_PREF);
mFeatureFactory = FakeFeatureFactory.setupForTest();
mOldBatteryTips = new ArrayList<>();
mNewBatteryTips = new ArrayList<>(); mNewBatteryTips = new ArrayList<>();
mBatteryTipPreferenceController = buildBatteryTipPreferenceController(); mBatteryTipPreferenceController = buildBatteryTipPreferenceController();
@@ -87,32 +81,32 @@ public class BatteryTipPreferenceControllerTest {
} }
@Test @Test
public void testDisplayPreference_isInvisible() { public void displayPreference_isInvisible() {
mBatteryTipPreferenceController.displayPreference(mPreferenceScreen); mBatteryTipPreferenceController.displayPreference(mPreferenceScreen);
assertThat(mCardPreference.isVisible()).isFalse(); assertThat(mCardPreference.isVisible()).isFalse();
} }
@Test @Test
public void testUpdateBatteryTips_tipsStateInvisible_isInvisible() { public void updateBatteryTips_tipsStateInvisible_isInvisible() {
mBatteryTipPreferenceController.updateBatteryTips(mNewBatteryTips); mBatteryTipPreferenceController.updateBatteryTips(mNewBatteryTips);
assertThat(mCardPreference.isVisible()).isFalse(); assertThat(mCardPreference.isVisible()).isFalse();
} }
@Test @Test
public void testGetCurrentBatteryTip_noTips_isNull() { public void getCurrentBatteryTip_noTips_isNull() {
assertThat(mBatteryTipPreferenceController.getCurrentBatteryTip()).isNull(); assertThat(mBatteryTipPreferenceController.getCurrentBatteryTip()).isNull();
} }
@Test @Test
public void testGetCurrentBatteryTip_tipsInvisible_isNull() { public void getCurrentBatteryTip_tipsInvisible_isNull() {
mBatteryTipPreferenceController.updateBatteryTips(mNewBatteryTips); mBatteryTipPreferenceController.updateBatteryTips(mNewBatteryTips);
assertThat(mBatteryTipPreferenceController.getCurrentBatteryTip()).isNull(); assertThat(mBatteryTipPreferenceController.getCurrentBatteryTip()).isNull();
} }
@Test @Test
public void testRestoreFromNull_shouldNotCrash() { public void restoreFromNull_shouldNotCrash() {
final Bundle bundle = new Bundle(); final Bundle bundle = new Bundle();
// Battery tip list is null at this time // Battery tip list is null at this time
mBatteryTipPreferenceController.saveInstanceState(bundle); mBatteryTipPreferenceController.saveInstanceState(bundle);
@@ -124,7 +118,7 @@ public class BatteryTipPreferenceControllerTest {
} }
@Test @Test
public void testHandlePreferenceTreeClick_noDialog_invokeCallback() { public void handlePreferenceTreeClick_noDialog_invokeCallback() {
when(mBatteryTip.getType()).thenReturn(SMART_BATTERY_MANAGER); when(mBatteryTip.getType()).thenReturn(SMART_BATTERY_MANAGER);
List<BatteryTip> batteryTips = new ArrayList<>(); List<BatteryTip> batteryTips = new ArrayList<>();
batteryTips.add(mBatteryTip); batteryTips.add(mBatteryTip);

View File

@@ -17,8 +17,6 @@ package com.android.settings.fuelgauge.batterytip.tips;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -27,6 +25,7 @@ import android.content.Context;
import android.util.Log; import android.util.Log;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
@@ -34,12 +33,13 @@ import com.android.settings.widget.CardPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowLog; import org.robolectric.shadows.ShadowLog;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@@ -49,23 +49,22 @@ public class BatteryDefenderTipTest {
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
private BatteryDefenderTip mBatteryDefenderTip; private BatteryDefenderTip mBatteryDefenderTip;
private MetricsFeatureProvider mMetricsFeatureProvider; private MetricsFeatureProvider mMetricsFeatureProvider;
private CardPreference mCardPreference;
@Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
@Mock private BatteryTip mBatteryTip; @Mock private BatteryTip mBatteryTip;
@Mock private Preference mPreference; @Mock private Preference mPreference;
@Mock private CardPreference mCardPreference;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); mContext = ApplicationProvider.getApplicationContext();
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider; mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
mContext = RuntimeEnvironment.application;
mBatteryDefenderTip = mBatteryDefenderTip =
new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */); new BatteryDefenderTip(BatteryTip.StateType.NEW, /* isPluggedIn= */ false);
mCardPreference = new CardPreference(mContext);
when(mPreference.getContext()).thenReturn(mContext); when(mPreference.getContext()).thenReturn(mContext);
when(mCardPreference.getContext()).thenReturn(mContext);
} }
@Test @Test
@@ -87,7 +86,7 @@ public class BatteryDefenderTipTest {
} }
@Test @Test
public void testLog_logMetric() { public void log_logMetric() {
mBatteryDefenderTip.updateState(mBatteryTip); mBatteryDefenderTip.updateState(mBatteryTip);
mBatteryDefenderTip.log(mContext, mMetricsFeatureProvider); mBatteryDefenderTip.log(mContext, mMetricsFeatureProvider);
@@ -108,7 +107,7 @@ public class BatteryDefenderTipTest {
mBatteryDefenderTip.updatePreference(mCardPreference); mBatteryDefenderTip.updatePreference(mCardPreference);
verify(mCardPreference).setPrimaryButtonText(expectedText); assertThat(mCardPreference.getPrimaryButtonText()).isEqualTo(expectedText);
} }
@Test @Test
@@ -117,46 +116,31 @@ public class BatteryDefenderTipTest {
mBatteryDefenderTip.updatePreference(mCardPreference); mBatteryDefenderTip.updatePreference(mCardPreference);
verify(mCardPreference).setSecondaryButtonText(expected); assertThat(mCardPreference.getSecondaryButtonText()).isEqualTo(expected);
} }
@Test @Test
public void updatePreference_shouldSetPrimaryButtonVisible() { public void updatePreference_shouldSetPrimaryButtonVisible() {
mBatteryDefenderTip.updatePreference(mCardPreference); mBatteryDefenderTip.updatePreference(mCardPreference);
verify(mCardPreference).setPrimaryButtonVisibility(true); assertThat(mCardPreference.getPrimaryButtonVisibility()).isTrue();
} }
@Test @Test
public void updatePreference_whenCharging_setPrimaryButtonVisibleToBeTrue() { public void updatePreference_whenCharging_setPrimaryButtonVisibleToBeTrue() {
mBatteryDefenderTip = mBatteryDefenderTip =
new BatteryDefenderTip(BatteryTip.StateType.NEW, true /* isPluggedIn */); new BatteryDefenderTip(BatteryTip.StateType.NEW, /* isPluggedIn= */ true);
mBatteryDefenderTip.updatePreference(mCardPreference); mBatteryDefenderTip.updatePreference(mCardPreference);
verify(mCardPreference).setPrimaryButtonVisibility(true); assertThat(mCardPreference.getPrimaryButtonVisibility()).isTrue();
} }
@Test @Test
public void updatePreference_whenNotCharging_setSecondaryButtonVisibleToBeFalse() { public void updatePreference_whenNotCharging_setSecondaryButtonVisibleToBeFalse() {
mBatteryDefenderTip.updatePreference(mCardPreference); mBatteryDefenderTip.updatePreference(mCardPreference);
verify(mCardPreference).setSecondaryButtonVisibility(false); assertThat(mCardPreference.getSecondaryButtonVisibility()).isFalse();
}
@Test
public void updatePreference_whenGetChargingStatusFailed_setSecondaryButtonVisibleToBeFalse() {
fakeGetChargingStatusFailed();
mBatteryDefenderTip.updatePreference(mCardPreference);
verify(mCardPreference).setSecondaryButtonVisibility(false);
}
private void fakeGetChargingStatusFailed() {
Context mockContext = mock(Context.class);
when(mockContext.getString(anyInt())).thenReturn("fake_string");
when(mCardPreference.getContext()).thenReturn(mockContext);
} }
private String getLastErrorLog() { private String getLastErrorLog() {

View File

@@ -20,11 +20,10 @@ import static com.google.common.truth.Truth.assertThat;
import android.content.Context; import android.content.Context;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.view.View;
import androidx.annotation.DrawableRes; import androidx.annotation.DrawableRes;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.widget.CardPreference; import com.android.settings.widget.CardPreference;
@@ -32,10 +31,12 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.testutils.DrawableTestHelper; import com.android.settingslib.testutils.DrawableTestHelper;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -47,13 +48,15 @@ public class BatteryTipTest {
private static final String SUMMARY = "summary"; private static final String SUMMARY = "summary";
@DrawableRes private static final int ICON_ID = R.drawable.ic_fingerprint; @DrawableRes private static final int ICON_ID = R.drawable.ic_fingerprint;
@Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
private Context mContext; private Context mContext;
private TestBatteryTip mBatteryTip; private TestBatteryTip mBatteryTip;
@Before @Before
public void setUp() { public void setUp() {
mContext = RuntimeEnvironment.application;
mBatteryTip = new TestBatteryTip(); mBatteryTip = new TestBatteryTip();
mContext = ApplicationProvider.getApplicationContext();
} }
@Test @Test
@@ -84,19 +87,14 @@ public class BatteryTipTest {
@Test @Test
public void updatePreference_resetLayoutState() { public void updatePreference_resetLayoutState() {
mContext.setTheme(R.style.Theme_Settings);
PreferenceViewHolder holder =
PreferenceViewHolder.createInstanceForTests(
View.inflate(
mContext, R.layout.card_preference_layout, /* parent= */ null));
CardPreference cardPreference = new CardPreference(mContext); CardPreference cardPreference = new CardPreference(mContext);
cardPreference.onBindViewHolder(holder);
cardPreference.setPrimaryButtonVisibility(true); cardPreference.setPrimaryButtonVisibility(true);
cardPreference.setSecondaryButtonVisibility(true);
mBatteryTip.updatePreference(cardPreference); mBatteryTip.updatePreference(cardPreference);
View view = holder.findViewById(R.id.card_preference_buttons); assertThat(cardPreference.getPrimaryButtonVisibility()).isFalse();
assertThat(view.getVisibility()).isEqualTo(View.GONE); assertThat(cardPreference.getSecondaryButtonVisibility()).isFalse();
} }
@Test @Test

View File

@@ -25,6 +25,7 @@ import android.content.Context;
import android.util.Log; import android.util.Log;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
@@ -32,12 +33,13 @@ import com.android.settings.widget.CardPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowLog; import org.robolectric.shadows.ShadowLog;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@@ -47,22 +49,21 @@ public final class IncompatibleChargerTipTest {
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
private IncompatibleChargerTip mIncompatibleChargerTip; private IncompatibleChargerTip mIncompatibleChargerTip;
private MetricsFeatureProvider mMetricsFeatureProvider; private MetricsFeatureProvider mMetricsFeatureProvider;
private CardPreference mCardPreference;
@Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
@Mock private BatteryTip mBatteryTip; @Mock private BatteryTip mBatteryTip;
@Mock private Preference mPreference; @Mock private Preference mPreference;
@Mock private CardPreference mCardPreference;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this);
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider; mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
mContext = RuntimeEnvironment.application; mContext = ApplicationProvider.getApplicationContext();
mIncompatibleChargerTip = new IncompatibleChargerTip(BatteryTip.StateType.NEW); mIncompatibleChargerTip = new IncompatibleChargerTip(BatteryTip.StateType.NEW);
mCardPreference = new CardPreference(mContext);
when(mPreference.getContext()).thenReturn(mContext); when(mPreference.getContext()).thenReturn(mContext);
when(mCardPreference.getContext()).thenReturn(mContext);
} }
@Test @Test
@@ -107,13 +108,13 @@ public final class IncompatibleChargerTipTest {
mIncompatibleChargerTip.updatePreference(mCardPreference); mIncompatibleChargerTip.updatePreference(mCardPreference);
verify(mCardPreference).setPrimaryButtonText(expected); assertThat(mCardPreference.getPrimaryButtonText()).isEqualTo(expected);
} }
@Test @Test
public void updatePreference_shouldSetSecondaryButtonVisible() { public void updatePreference_shouldSetSecondaryButtonVisible() {
mIncompatibleChargerTip.updatePreference(mCardPreference); mIncompatibleChargerTip.updatePreference(mCardPreference);
verify(mCardPreference).setPrimaryButtonVisibility(true); assertThat(mCardPreference.getPrimaryButtonVisibility()).isTrue();
} }
private String getLastErrorLog() { private String getLastErrorLog() {