Merge "Adjuest battery saver component test for new logic" into sc-dev

This commit is contained in:
Syaoran Kuo
2021-06-03 09:42:43 +00:00
committed by Android (Google) Code Review

View File

@@ -19,24 +19,26 @@ package com.android.settings.fuelgauge.batterysaver;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assert_; import static com.google.common.truth.Truth.assert_;
import android.app.Activity;
import android.app.Instrumentation; import android.app.Instrumentation;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.PowerManager; import android.os.PowerManager;
import android.provider.Settings; import android.provider.Settings;
import android.util.Log; import android.util.Log;
import android.widget.Button;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.test.core.app.ActivityScenario; import androidx.test.core.app.ActivityScenario;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.rules.ActivityScenarioRule; import androidx.test.ext.junit.rules.ActivityScenarioRule;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.platform.app.InstrumentationRegistry;
import com.android.settings.R;
import com.android.settings.Settings.BatterySaverSettingsActivity; import com.android.settings.Settings.BatterySaverSettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.testutils.AdbUtils; import com.android.settings.testutils.AdbUtils;
import com.android.settings.testutils.UiUtils;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -49,11 +51,10 @@ import org.junit.runner.RunWith;
public class BatterySaverButtonPreferenceControllerComponentTest { public class BatterySaverButtonPreferenceControllerComponentTest {
private static final String TAG = private static final String TAG =
BatterySaverButtonPreferenceControllerComponentTest.class.getSimpleName(); BatterySaverButtonPreferenceControllerComponentTest.class.getSimpleName();
private Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation(); private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
private PowerManager mManager = private final PowerManager mManager =
(PowerManager) mInstrumentation.getTargetContext().getSystemService( (PowerManager) mInstrumentation.getTargetContext().getSystemService(
Context.POWER_SERVICE); Context.POWER_SERVICE);
@Rule @Rule
public ActivityScenarioRule<BatterySaverSettingsActivity> rule = new ActivityScenarioRule<>( public ActivityScenarioRule<BatterySaverSettingsActivity> rule = new ActivityScenarioRule<>(
new Intent( new Intent(
@@ -66,55 +67,28 @@ public class BatterySaverButtonPreferenceControllerComponentTest {
mInstrumentation.getUiAutomation().executeShellCommand("settings get global low_power 0"); mInstrumentation.getUiAutomation().executeShellCommand("settings get global low_power 0");
} }
private BatterySaverButtonPreferenceController get_battery_saver_controller(Activity activity) {
BatterySaverButtonPreferenceController controller =
new BatterySaverButtonPreferenceController(
ApplicationProvider.getApplicationContext(), "battery_saver");
Fragment f =
((FragmentActivity) activity).getSupportFragmentManager().getFragments().get(0);
controller.displayPreference(((SettingsPreferenceFragment) f).getPreferenceScreen());
return controller;
}
@Test @Test
public void test_check_battery_saver_button() throws Exception { public void test_check_battery_saver_button() throws Exception {
ActivityScenario scenario = rule.getScenario(); ActivityScenario scenario = rule.getScenario();
scenario.onActivity(activity -> { scenario.onActivity(activity -> {
final Button button = activity.findViewById(R.id.state_on_button); BatterySaverButtonPreferenceController controller =
UiUtils.waitUntilCondition(3000, () -> button.isEnabled()); get_battery_saver_controller(activity);
button.callOnClick(); controller.setChecked(true);
checkPowerSaverMode(true); checkPowerSaverMode(true);
Button offButton = activity.findViewById(R.id.state_off_button); controller.setChecked(false);
offButton.callOnClick();
checkPowerSaverMode(false); checkPowerSaverMode(false);
}); });
//Ideally, we should be able to also create BatteryTipPreferenceController and verify that
//it is showing battery saver on. Unfortunately, that part of code is tightly coupled with
//UI, and it's not possible to retrieve that string without reaching very deep into the
//codes and become very tightly coupled with any future changes. That is not what component
//tests should do, so either we'll need to do this through UI with another ActivityScenario,
//or the code needs to be refactored to be less coupled with UI.
}
@Test
public void test_battery_saver_button_changes_when_framework_setting_change() throws Exception {
ActivityScenario scenario = rule.getScenario();
scenario.onActivity(activity -> {
Button buttonOn = activity.findViewById(R.id.state_on_button);
Button buttonOff = activity.findViewById(R.id.state_off_button);
assertThat(buttonOn.isVisibleToUser()).isEqualTo(true);
assertThat(buttonOff.isVisibleToUser()).isEqualTo(false);
});
mManager.setPowerSaveModeEnabled(true);
scenario.recreate();
scenario.onActivity(activity -> {
Button buttonOn = activity.findViewById(R.id.state_on_button);
Button buttonOff = activity.findViewById(R.id.state_off_button);
assertThat(buttonOn.isVisibleToUser()).isEqualTo(false);
assertThat(buttonOff.isVisibleToUser()).isEqualTo(true);
});
mManager.setPowerSaveModeEnabled(false);
scenario.recreate();
scenario.onActivity(activity -> {
Button buttonOn = activity.findViewById(R.id.state_on_button);
Button buttonOff = activity.findViewById(R.id.state_off_button);
assertThat(buttonOn.isVisibleToUser()).isEqualTo(true);
assertThat(buttonOff.isVisibleToUser()).isEqualTo(false);
});
} }
@After @After
@@ -140,4 +114,5 @@ public class BatterySaverButtonPreferenceControllerComponentTest {
//Check through manager //Check through manager
assertThat(mManager.isPowerSaveMode() == enabled).isTrue(); assertThat(mManager.isPowerSaveMode() == enabled).isTrue();
} }
} }