PowerUtilTest.java revision ba499efa7a139daf6d9c1b20b326fa762a081818
1/* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.settingslib.utils; 18 19import static com.google.common.truth.Truth.assertThat; 20import static org.mockito.Mockito.spy; 21 22import android.content.Context; 23 24import com.android.settingslib.SettingsLibRobolectricTestRunner; 25 26import org.junit.Before; 27import org.junit.Test; 28import org.junit.runner.RunWith; 29import org.mockito.MockitoAnnotations; 30import org.robolectric.RuntimeEnvironment; 31 32import java.time.Duration; 33import java.util.regex.Pattern; 34 35@RunWith(SettingsLibRobolectricTestRunner.class) 36public class PowerUtilTest { 37 public static final String TEST_BATTERY_LEVEL_10 = "10%"; 38 public static final long SEVENTEEN_MIN_MILLIS = Duration.ofMinutes(17).toMillis(); 39 public static final long FIVE_MINUTES_MILLIS = Duration.ofMinutes(5).toMillis(); 40 public static final long TEN_MINUTES_MILLIS = Duration.ofMinutes(10).toMillis(); 41 public static final long THREE_DAYS_MILLIS = Duration.ofDays(3).toMillis(); 42 public static final long THIRTY_HOURS_MILLIS = Duration.ofHours(30).toMillis(); 43 public static final String NORMAL_CASE_EXPECTED_PREFIX = "Should last until about"; 44 public static final String ENHANCED_SUFFIX = " based on your usage"; 45 // matches a time (ex: '1:15 PM', '2 AM') 46 public static final String TIME_OF_DAY_REGEX = " (\\d)+:?(\\d)* (AM)|(PM)"; 47 // matches a percentage with parenthesis (ex: '(10%)') 48 public static final String PERCENTAGE_REGEX = " \\(\\d?\\d%\\)"; 49 50 private Context mContext; 51 52 @Before 53 public void setup() { 54 MockitoAnnotations.initMocks(this); 55 mContext = spy(RuntimeEnvironment.application); 56 } 57 58 @Test 59 public void testGetBatteryRemainingStringFormatted_moreThanFifteenMinutes_withPercentage() { 60 String info = PowerUtil.getBatteryRemainingStringFormatted(mContext, 61 SEVENTEEN_MIN_MILLIS, 62 TEST_BATTERY_LEVEL_10, 63 true /* basedOnUsage */); 64 String info2 = PowerUtil.getBatteryRemainingStringFormatted(mContext, 65 SEVENTEEN_MIN_MILLIS, 66 TEST_BATTERY_LEVEL_10, 67 false /* basedOnUsage */); 68 69 // We only add special mention for the long string 70 // ex: Will last about 1:15 PM based on your usage (10%) 71 assertThat(info).containsMatch(Pattern.compile( 72 NORMAL_CASE_EXPECTED_PREFIX 73 + TIME_OF_DAY_REGEX 74 + ENHANCED_SUFFIX 75 + PERCENTAGE_REGEX)); 76 // shortened string should not have extra text 77 // ex: Will last about 1:15 PM (10%) 78 assertThat(info2).containsMatch(Pattern.compile( 79 NORMAL_CASE_EXPECTED_PREFIX 80 + TIME_OF_DAY_REGEX 81 + PERCENTAGE_REGEX)); 82 } 83 84 @Test 85 public void testGetBatteryRemainingStringFormatted_moreThanFifteenMinutes_noPercentage() { 86 String info = PowerUtil.getBatteryRemainingStringFormatted(mContext, 87 SEVENTEEN_MIN_MILLIS, 88 null /* percentageString */, 89 true /* basedOnUsage */); 90 String info2 = PowerUtil.getBatteryRemainingStringFormatted(mContext, 91 SEVENTEEN_MIN_MILLIS, 92 null /* percentageString */, 93 false /* basedOnUsage */); 94 95 // We only have % when it is provided 96 // ex: Will last about 1:15 PM based on your usage 97 assertThat(info).containsMatch(Pattern.compile( 98 NORMAL_CASE_EXPECTED_PREFIX 99 + TIME_OF_DAY_REGEX 100 + ENHANCED_SUFFIX 101 + "(" + PERCENTAGE_REGEX + "){0}")); // no percentage 102 // shortened string should not have extra text 103 // ex: Will last about 1:15 PM 104 assertThat(info2).containsMatch(Pattern.compile( 105 NORMAL_CASE_EXPECTED_PREFIX 106 + TIME_OF_DAY_REGEX 107 + "(" + PERCENTAGE_REGEX + "){0}")); // no percentage 108 } 109 110 111 @Test 112 public void testGetBatteryRemainingStringFormatted_lessThanSevenMinutes_usesCorrectString() { 113 String info = PowerUtil.getBatteryRemainingStringFormatted(mContext, 114 FIVE_MINUTES_MILLIS, 115 TEST_BATTERY_LEVEL_10 /* percentageString */, 116 true /* basedOnUsage */); 117 String info2 = PowerUtil.getBatteryRemainingStringFormatted(mContext, 118 FIVE_MINUTES_MILLIS, 119 null /* percentageString */, 120 true /* basedOnUsage */); 121 122 // additional battery percentage in this string 123 assertThat(info).isEqualTo("Phone may shutdown soon (10%)"); 124 // shortened string should not have percentage 125 assertThat(info2).isEqualTo("Phone may shutdown soon"); 126 } 127 128 @Test 129 public void testGetBatteryRemainingStringFormatted_betweenSevenAndFifteenMinutes_usesCorrectString() { 130 String info = PowerUtil.getBatteryRemainingStringFormatted(mContext, 131 TEN_MINUTES_MILLIS, 132 null /* percentageString */, 133 true /* basedOnUsage */); 134 String info2 = PowerUtil.getBatteryRemainingStringFormatted(mContext, 135 TEN_MINUTES_MILLIS, 136 TEST_BATTERY_LEVEL_10 /* percentageString */, 137 true /* basedOnUsage */); 138 139 // shortened string should not have percentage 140 assertThat(info).isEqualTo("Less than 15m remaining"); 141 // Add percentage to string when provided 142 assertThat(info2).isEqualTo("Less than 15m remaining (10%)"); 143 } 144 145 @Test 146 public void testGetBatteryRemainingStringFormatted_betweenOneAndTwoDays_usesCorrectString() { 147 String info = PowerUtil.getBatteryRemainingStringFormatted(mContext, 148 THIRTY_HOURS_MILLIS, 149 null /* percentageString */, 150 true /* basedOnUsage */); 151 String info2 = PowerUtil.getBatteryRemainingStringFormatted(mContext, 152 THIRTY_HOURS_MILLIS, 153 TEST_BATTERY_LEVEL_10 /* percentageString */, 154 false /* basedOnUsage */); 155 156 // We only add special mention for the long string 157 assertThat(info).isEqualTo("About 1d 6h left based on your usage"); 158 // shortened string should not have extra text 159 assertThat(info2).isEqualTo("About 1d 6h left (10%)"); 160 } 161 162 @Test 163 public void testGetBatteryRemainingStringFormatted_moreThanTwoDays_usesCorrectString() { 164 String info = PowerUtil.getBatteryRemainingStringFormatted(mContext, 165 THREE_DAYS_MILLIS, 166 null /* percentageString */, 167 true /* basedOnUsage */); 168 String info2 = PowerUtil.getBatteryRemainingStringFormatted(mContext, 169 THREE_DAYS_MILLIS, 170 TEST_BATTERY_LEVEL_10 /* percentageString */, 171 true /* basedOnUsage */); 172 173 // shortened string should not have percentage 174 assertThat(info).isEqualTo("More than 2 days remaining"); 175 // Add percentage to string when provided 176 assertThat(info2).isEqualTo("More than 2 days remaining (10%)"); 177 } 178} 179