Merge "Support battery usage chart start index label is the detailed last full charge time" into udc-dev
This commit is contained in:
@@ -150,11 +150,12 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
// Ignore fast refresh ui from the data processor callback.
|
||||
verify(mHourlyChartView, atLeast(0)).setViewModel(null);
|
||||
verify(mHourlyChartView, atLeastOnce()).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 97, 95, 66),
|
||||
List.of(1619251200000L /* 8 AM */,
|
||||
List.of(100, 99, 97, 95, 66),
|
||||
List.of(1619247660000L /* 7:01 AM */,
|
||||
1619251200000L /* 8 AM */,
|
||||
1619258400000L /* 10 AM */,
|
||||
1619265600000L /* 12 PM */,
|
||||
1619272800000L /* 2 PM */),
|
||||
1619265720000L /* now (12:02 PM) */),
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
|
||||
mBatteryChartPreferenceController.mHourlyChartLabelTextGenerator));
|
||||
}
|
||||
@@ -168,10 +169,10 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
BatteryChartViewModel expectedDailyViewModel = new BatteryChartViewModel(
|
||||
List.of(100, 83, 59, 66),
|
||||
// "Sat", "Sun", "Mon", "Mon"
|
||||
List.of(1619251200000L /* Sat */,
|
||||
List.of(1619247660000L /* Sat */,
|
||||
1619308800000L /* Sun */,
|
||||
1619395200000L /* Mon */,
|
||||
1619467200000L /* Mon */),
|
||||
1619460120000L /* Mon */),
|
||||
BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS,
|
||||
mBatteryChartPreferenceController.mDailyChartLabelTextGenerator);
|
||||
|
||||
@@ -194,8 +195,9 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
expectedDailyViewModel.setSelectedIndex(0);
|
||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
||||
List.of(100, 97, 95, 93, 91, 89, 87, 85, 83),
|
||||
List.of(1619251200000L /* 8 AM */,
|
||||
List.of(100, 99, 97, 95, 93, 91, 89, 87, 85, 83),
|
||||
List.of(1619247660000L /* 7:01 AM */,
|
||||
1619251200000L /* 8 AM */,
|
||||
1619258400000L /* 10 AM */,
|
||||
1619265600000L /* 12 PM */,
|
||||
1619272800000L /* 2 PM */,
|
||||
@@ -262,7 +264,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
1619445600000L /* 2 PM */,
|
||||
1619452800000L /* 4 PM */,
|
||||
1619460000000L /* 6 PM */,
|
||||
1619467200000L /* 8 PM */),
|
||||
1619460120000L /* now (6:02 PM) */),
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
|
||||
mBatteryChartPreferenceController.mHourlyChartLabelTextGenerator));
|
||||
|
||||
@@ -327,7 +329,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
public void selectedSlotText_onlyOneDayDataSelectAnHour_onlyHourText() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
|
||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 1;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 2;
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
||||
"10 AM - 12 PM");
|
||||
@@ -343,6 +345,36 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
"Sunday 4 PM - 6 PM");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selectedSlotText_selectFirstSlot_withMinuteText() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
|
||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
||||
"7:01 AM - 8 AM");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selectedSlotText_selectLastSlot_withNowText() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
|
||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 3;
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
||||
"12 PM - now");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selectedSlotText_selectOnlySlot_withMinuteAndNowText() {
|
||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(1));
|
||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
||||
"7:01 AM - now");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onSaveInstanceState_restoreSelectedIndexAndExpandState() {
|
||||
final int expectedDailyIndex = 1;
|
||||
@@ -373,7 +405,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
final int totalHour = BatteryChartPreferenceController.getTotalHours(batteryLevelData);
|
||||
|
||||
// Only calculate the even hours.
|
||||
assertThat(totalHour).isEqualTo(60);
|
||||
assertThat(totalHour).isEqualTo(59);
|
||||
}
|
||||
|
||||
private static Long generateTimestamp(int index) {
|
||||
@@ -403,10 +435,14 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
final BatteryHistEntry entry = new BatteryHistEntry(values);
|
||||
final Map<String, BatteryHistEntry> entryMap = new HashMap<>();
|
||||
entryMap.put("fake_entry_key" + index, entry);
|
||||
batteryHistoryMap.put(generateTimestamp(index), entryMap);
|
||||
long timestamp = generateTimestamp(index);
|
||||
if (index == 0) {
|
||||
timestamp += DateUtils.MINUTE_IN_MILLIS;
|
||||
}
|
||||
batteryHistoryMap.put(timestamp, entryMap);
|
||||
}
|
||||
DataProcessor.sTestCurrentTimeMillis =
|
||||
generateTimestamp(numOfHours - 1) + DateUtils.MINUTE_IN_MILLIS;
|
||||
generateTimestamp(numOfHours - 1) + DateUtils.MINUTE_IN_MILLIS * 2;
|
||||
return batteryHistoryMap;
|
||||
}
|
||||
|
||||
|
@@ -263,7 +263,7 @@ public final class DataProcessManagerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getBatteryLevelData_notEnoughData_returnNull() {
|
||||
public void getBatteryLevelData_allDataInOneHour_returnExpectedResult() {
|
||||
// The timestamps and the current time are within half hour before an even hour.
|
||||
final long[] timestamps = {
|
||||
DateUtils.HOUR_IN_MILLIS * 2 - 300L,
|
||||
@@ -274,9 +274,26 @@ public final class DataProcessManagerTest {
|
||||
createHistoryMap(timestamps, levels);
|
||||
DataProcessor.sTestCurrentTimeMillis = timestamps[timestamps.length - 1];
|
||||
|
||||
assertThat(DataProcessManager.getBatteryLevelData(
|
||||
mContext, /*handler=*/ null, batteryHistoryMap, /*asyncResponseDelegate=*/ null))
|
||||
.isNull();
|
||||
final BatteryLevelData resultData =
|
||||
DataProcessManager.getBatteryLevelData(
|
||||
mContext,
|
||||
/*handler=*/ null,
|
||||
batteryHistoryMap,
|
||||
/*asyncResponseDelegate=*/ null);
|
||||
|
||||
|
||||
final List<Long> expectedDailyTimestamps = List.of(
|
||||
DateUtils.HOUR_IN_MILLIS * 2 - 300L,
|
||||
DateUtils.HOUR_IN_MILLIS * 2 - 100L);
|
||||
final List<Integer> expectedDailyLevels = List.of(100, 66);
|
||||
final List<List<Long>> expectedHourlyTimestamps = List.of(expectedDailyTimestamps);
|
||||
final List<List<Integer>> expectedHourlyLevels = List.of(expectedDailyLevels);
|
||||
verifyExpectedBatteryLevelData(
|
||||
resultData,
|
||||
expectedDailyTimestamps,
|
||||
expectedDailyLevels,
|
||||
expectedHourlyTimestamps,
|
||||
expectedHourlyLevels);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -297,7 +314,7 @@ public final class DataProcessManagerTest {
|
||||
|
||||
final List<Long> expectedDailyTimestamps = List.of(
|
||||
1640966400000L, // 2022-01-01 00:00:00
|
||||
1640973600000L); // 2022-01-01 02:00:00
|
||||
1640970000000L); // 2022-01-01 01:00:00
|
||||
final List<Integer> expectedDailyLevels = List.of(100, 66);
|
||||
final List<List<Long>> expectedHourlyTimestamps = List.of(expectedDailyTimestamps);
|
||||
final List<List<Integer>> expectedHourlyLevels = List.of(expectedDailyLevels);
|
||||
|
@@ -42,7 +42,6 @@ import android.os.BatteryUsageStats;
|
||||
import android.os.Parcel;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserManager;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
@@ -409,24 +408,21 @@ public final class DataProcessorTest {
|
||||
|
||||
// Timezone GMT+8
|
||||
final long[] expectedTimestamps = {
|
||||
1640966400000L, // 2022-01-01 00:00:00
|
||||
1640966700000L, // 2022-01-01 00:05:00
|
||||
1640970000000L, // 2022-01-01 01:00:00
|
||||
1640973600000L, // 2022-01-01 02:00:00
|
||||
1640977200000L, // 2022-01-01 03:00:00
|
||||
1640980800000L, // 2022-01-01 04:00:00
|
||||
1640984400000L, // 2022-01-01 05:00:00
|
||||
1640988000000L // 2022-01-01 06:00:00
|
||||
1640981400000L // 2022-01-01 04:10:00
|
||||
};
|
||||
final int[] expectedLevels = {100, 94, 90, 84, 56, 98, 98};
|
||||
final int[] expectedLevels = {100, 94, 90, 84, 56, 98};
|
||||
assertThat(resultMap).hasSize(expectedLevels.length);
|
||||
for (int index = 0; index < 5; index++) {
|
||||
for (int index = 0; index < expectedLevels.length - 1; index++) {
|
||||
assertThat(resultMap.get(expectedTimestamps[index]).get(FAKE_ENTRY_KEY).mBatteryLevel)
|
||||
.isEqualTo(expectedLevels[index]);
|
||||
}
|
||||
for (int index = 5; index < 7; index++) {
|
||||
assertThat(resultMap.get(expectedTimestamps[index]).containsKey(
|
||||
DataProcessor.CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER)).isTrue();
|
||||
}
|
||||
assertThat(resultMap.get(expectedTimestamps[expectedLevels.length - 1]).containsKey(
|
||||
DataProcessor.CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -589,7 +585,8 @@ public final class DataProcessorTest {
|
||||
1667782800000L, // 2022-11-06 17:00:00
|
||||
1667790000000L, // 2022-11-06 19:00:00
|
||||
1667797200000L, // 2022-11-06 21:00:00
|
||||
1667804400000L // 2022-11-06 23:00:00
|
||||
1667804400000L, // 2022-11-06 23:00:00
|
||||
1667808000000L // 2022-11-07 00:00:00
|
||||
),
|
||||
List.of(
|
||||
1667808000000L, // 2022-11-07 00:00:00
|
||||
@@ -621,6 +618,7 @@ public final class DataProcessorTest {
|
||||
expectedHourlyLevels2.add(null);
|
||||
expectedHourlyLevels2.add(null);
|
||||
expectedHourlyLevels2.add(null);
|
||||
expectedHourlyLevels2.add(null);
|
||||
final List<Integer> expectedHourlyLevels3 = new ArrayList<>();
|
||||
expectedHourlyLevels3.add(null);
|
||||
expectedHourlyLevels3.add(null);
|
||||
@@ -683,7 +681,8 @@ public final class DataProcessorTest {
|
||||
1647216000000L, // 2022-03-13 17:00:00
|
||||
1647223200000L, // 2022-03-13 19:00:00
|
||||
1647230400000L, // 2022-03-13 21:00:00
|
||||
1647237600000L // 2022-03-13 23:00:00
|
||||
1647237600000L, // 2022-03-13 23:00:00
|
||||
1647241200000L // 2022-03-14 00:00:00
|
||||
),
|
||||
List.of(
|
||||
1647241200000L, // 2022-03-14 00:00:00
|
||||
@@ -708,6 +707,7 @@ public final class DataProcessorTest {
|
||||
expectedHourlyLevels2.add(null);
|
||||
expectedHourlyLevels2.add(null);
|
||||
expectedHourlyLevels2.add(null);
|
||||
expectedHourlyLevels2.add(null);
|
||||
final List<Integer> expectedHourlyLevels3 = new ArrayList<>();
|
||||
expectedHourlyLevels3.add(null);
|
||||
expectedHourlyLevels3.add(null);
|
||||
@@ -736,49 +736,95 @@ public final class DataProcessorTest {
|
||||
@Test
|
||||
public void getTimestampSlots_startWithEvenHour_returnExpectedResult() {
|
||||
final Calendar startCalendar = Calendar.getInstance();
|
||||
startCalendar.clear();
|
||||
startCalendar.set(2022, 6, 5, 6, 30, 50); // 2022-07-05 06:30:50
|
||||
final long startTimestamp = startCalendar.getTimeInMillis();
|
||||
final Calendar endCalendar = Calendar.getInstance();
|
||||
endCalendar.clear();
|
||||
endCalendar.set(2022, 6, 5, 22, 30, 50); // 2022-07-05 22:30:50
|
||||
final long endTimestamp = endCalendar.getTimeInMillis();
|
||||
|
||||
final Calendar expectedStartCalendar = Calendar.getInstance();
|
||||
expectedStartCalendar.set(2022, 6, 5, 6, 0, 0); // 2022-07-05 06:00:00
|
||||
final Calendar expectedEndCalendar = Calendar.getInstance();
|
||||
expectedEndCalendar.set(2022, 6, 6, 0, 0, 0); // 2022-07-05 22:00:00
|
||||
verifyExpectedTimestampSlots(
|
||||
startCalendar, endCalendar, expectedStartCalendar, expectedEndCalendar);
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
List<Long> expectedTimestamps = new ArrayList<>();
|
||||
calendar.clear();
|
||||
calendar.set(2022, 6, 5, 6, 30, 50); // 2022-07-05 06:30:50
|
||||
expectedTimestamps.add(calendar.getTimeInMillis());
|
||||
for (int hour = 7; hour <= 22; hour++) {
|
||||
calendar.clear();
|
||||
calendar.set(2022, 6, 5, hour, 0, 0); // 2022-07-05 <hour>:00:00
|
||||
expectedTimestamps.add(calendar.getTimeInMillis());
|
||||
}
|
||||
calendar.clear();
|
||||
calendar.set(2022, 6, 5, 22, 30, 50); // 2022-07-05 22:30:50
|
||||
expectedTimestamps.add(calendar.getTimeInMillis());
|
||||
|
||||
verifyExpectedTimestampSlots(startTimestamp, endTimestamp, expectedTimestamps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTimestampSlots_startWithOddHour_returnExpectedResult() {
|
||||
final Calendar startCalendar = Calendar.getInstance();
|
||||
startCalendar.clear();
|
||||
startCalendar.set(2022, 6, 5, 5, 0, 50); // 2022-07-05 05:00:50
|
||||
final long startTimestamp = startCalendar.getTimeInMillis();
|
||||
final Calendar endCalendar = Calendar.getInstance();
|
||||
endCalendar.set(2022, 6, 6, 21, 0, 50); // 2022-07-06 21:00:50
|
||||
endCalendar.clear();
|
||||
endCalendar.set(2022, 6, 5, 21, 0, 50); // 2022-07-05 21:00:50
|
||||
final long endTimestamp = endCalendar.getTimeInMillis();
|
||||
|
||||
final Calendar expectedStartCalendar = Calendar.getInstance();
|
||||
expectedStartCalendar.set(2022, 6, 5, 6, 0, 0); // 2022-07-05 06:00:00
|
||||
final Calendar expectedEndCalendar = Calendar.getInstance();
|
||||
expectedEndCalendar.set(2022, 6, 6, 22, 0, 0); // 2022-07-06 20:00:00
|
||||
verifyExpectedTimestampSlots(
|
||||
startCalendar, endCalendar, expectedStartCalendar, expectedEndCalendar);
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
List<Long> expectedTimestamps = new ArrayList<>();
|
||||
calendar.clear();
|
||||
calendar.set(2022, 6, 5, 5, 0, 50); // 2022-07-05 05:00:50
|
||||
expectedTimestamps.add(calendar.getTimeInMillis());
|
||||
for (int hour = 6; hour <= 21; hour++) {
|
||||
calendar.clear();
|
||||
calendar.set(2022, 6, 5, hour, 0, 0); // 2022-07-05 <hour>:00:00
|
||||
expectedTimestamps.add(calendar.getTimeInMillis());
|
||||
}
|
||||
calendar.clear();
|
||||
calendar.set(2022, 6, 5, 21, 0, 50); // 2022-07-05 21:00:50
|
||||
expectedTimestamps.add(calendar.getTimeInMillis());
|
||||
|
||||
verifyExpectedTimestampSlots(startTimestamp, endTimestamp, expectedTimestamps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDailyTimestamps_notEnoughData_returnEmptyList() {
|
||||
assertThat(DataProcessor.getDailyTimestamps(new ArrayList<>())).isEmpty();
|
||||
assertThat(DataProcessor.getDailyTimestamps(List.of(100L))).isEmpty();
|
||||
assertThat(DataProcessor.getDailyTimestamps(List.of(100L, 5400000L))).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDailyTimestamps_OneHourDataPerDay_returnEmptyList() {
|
||||
public void getDailyTimestamps_allDataInOneHour_returnExpectedList() {
|
||||
// Timezone GMT+8
|
||||
final List<Long> timestamps = List.of(
|
||||
1640970006000L, // 2022-01-01 01:00:06
|
||||
1640973608000L // 2022-01-01 01:00:08
|
||||
);
|
||||
|
||||
final List<Long> expectedTimestamps = List.of(
|
||||
1640970006000L, // 2022-01-01 01:00:06
|
||||
1640973608000L // 2022-01-01 01:00:08
|
||||
);
|
||||
assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDailyTimestamps_OneHourDataPerDay_returnExpectedList() {
|
||||
// Timezone GMT+8
|
||||
final List<Long> timestamps = List.of(
|
||||
1641049200000L, // 2022-01-01 23:00:00
|
||||
1641052800000L, // 2022-01-02 00:00:00
|
||||
1641056400000L // 2022-01-02 01:00:00
|
||||
);
|
||||
assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEmpty();
|
||||
|
||||
final List<Long> expectedTimestamps = List.of(
|
||||
1641049200000L, // 2022-01-01 23:00:00
|
||||
1641052800000L, // 2022-01-02 00:00:00
|
||||
1641056400000L // 2022-01-02 01:00:00
|
||||
);
|
||||
assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -830,6 +876,7 @@ public final class DataProcessorTest {
|
||||
);
|
||||
|
||||
final List<Long> expectedTimestamps = List.of(
|
||||
1641049200000L, // 2022-01-01 23:00:00
|
||||
1641052800000L, // 2022-01-02 00:00:00
|
||||
1641139200000L, // 2022-01-03 00:00:00
|
||||
1641225600000L, // 2022-01-04 00:00:00
|
||||
@@ -871,7 +918,8 @@ public final class DataProcessorTest {
|
||||
1640988000000L, // 2022-01-01 06:00:00
|
||||
1641052800000L, // 2022-01-02 00:00:00
|
||||
1641139200000L, // 2022-01-03 00:00:00
|
||||
1641225600000L // 2022-01-04 00:00:00
|
||||
1641225600000L, // 2022-01-04 00:00:00
|
||||
1641229200000L // 2022-01-04 01:00:00
|
||||
);
|
||||
assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
|
||||
}
|
||||
@@ -922,27 +970,6 @@ public final class DataProcessorTest {
|
||||
assertThat(results).isEqualTo(new long[] {40L, 0L});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTimestampOfNextDay_returnExpectedResult() {
|
||||
// 2021-02-28 06:00:00 => 2021-03-01 00:00:00
|
||||
assertThat(DataProcessor.getTimestampOfNextDay(1614463200000L))
|
||||
.isEqualTo(1614528000000L);
|
||||
// 2021-12-31 16:00:00 => 2022-01-01 00:00:00
|
||||
assertThat(DataProcessor.getTimestampOfNextDay(1640937600000L))
|
||||
.isEqualTo(1640966400000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isForDailyChart_returnExpectedResult() {
|
||||
assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ true, 0L)).isTrue();
|
||||
// 2022-01-01 00:00:00
|
||||
assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ false, 1640966400000L))
|
||||
.isTrue();
|
||||
// 2022-01-01 01:00:05
|
||||
assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ false, 1640970005000L))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getBatteryUsageMap_emptyHistoryMap_returnNull() {
|
||||
final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay =
|
||||
@@ -2046,24 +2073,16 @@ public final class DataProcessorTest {
|
||||
}
|
||||
|
||||
private static void verifyExpectedTimestampSlots(
|
||||
final Calendar start,
|
||||
final Calendar current,
|
||||
final Calendar expectedStart,
|
||||
final Calendar expectedEnd) {
|
||||
expectedStart.set(Calendar.MILLISECOND, 0);
|
||||
expectedEnd.set(Calendar.MILLISECOND, 0);
|
||||
final long startTimestamp,
|
||||
final long currentTimestamp,
|
||||
final List<Long> expectedTimestamps) {
|
||||
final ArrayList<Long> timestampSlots = new ArrayList<>();
|
||||
timestampSlots.add(start.getTimeInMillis());
|
||||
final List<Long> resultList =
|
||||
DataProcessor.getTimestampSlots(timestampSlots, current.getTimeInMillis());
|
||||
timestampSlots.add(startTimestamp);
|
||||
|
||||
for (int index = 0; index < resultList.size(); index++) {
|
||||
final long expectedTimestamp =
|
||||
expectedStart.getTimeInMillis() + index * DateUtils.HOUR_IN_MILLIS;
|
||||
assertThat(resultList.get(index)).isEqualTo(expectedTimestamp);
|
||||
}
|
||||
assertThat(resultList.get(resultList.size() - 1))
|
||||
.isEqualTo(expectedEnd.getTimeInMillis());
|
||||
final List<Long> resultList =
|
||||
DataProcessor.getTimestampSlots(timestampSlots, currentTimestamp);
|
||||
|
||||
assertThat(resultList).isEqualTo(expectedTimestamps);
|
||||
}
|
||||
|
||||
private static void assertBatteryDiffEntry(
|
||||
|
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 com.android.settings.fuelgauge.batteryusage;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
import java.util.TimeZone;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class TimestampUtilsTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getNextHourTimestamp_returnExpectedResult() {
|
||||
// 2021-02-28 06:00:00 => 2021-02-28 07:00:00
|
||||
assertThat(TimestampUtils.getNextHourTimestamp(1614463200000L))
|
||||
.isEqualTo(1614466800000L);
|
||||
// 2021-12-31 23:59:59 => 2022-01-01 00:00:00
|
||||
assertThat(TimestampUtils.getNextHourTimestamp(16409663999999L))
|
||||
.isEqualTo(16409664000000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getNextEvenHourTimestamp_returnExpectedResult() {
|
||||
// 2021-02-28 06:00:00 => 2021-02-28 08:00:00
|
||||
assertThat(TimestampUtils.getNextEvenHourTimestamp(1614463200000L))
|
||||
.isEqualTo(1614470400000L);
|
||||
// 2021-12-31 23:59:59 => 2022-01-01 00:00:00
|
||||
assertThat(TimestampUtils.getNextEvenHourTimestamp(16409663999999L))
|
||||
.isEqualTo(16409664000000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLastEvenHourTimestamp_returnExpectedResult() {
|
||||
// 2021-02-28 06:00:06 => 2021-02-28 06:00:00
|
||||
assertThat(TimestampUtils.getLastEvenHourTimestamp(1614463206000L))
|
||||
.isEqualTo(1614463200000L);
|
||||
// 2021-12-31 23:59:59 => 2021-12-31 22:00:00
|
||||
assertThat(TimestampUtils.getLastEvenHourTimestamp(16409663999999L))
|
||||
.isEqualTo(16409656800000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTimestampOfNextDay_returnExpectedResult() {
|
||||
// 2021-02-28 06:00:00 => 2021-03-01 00:00:00
|
||||
assertThat(TimestampUtils.getNextDayTimestamp(1614463200000L))
|
||||
.isEqualTo(1614528000000L);
|
||||
// 2021-12-31 16:00:00 => 2022-01-01 00:00:00
|
||||
assertThat(TimestampUtils.getNextDayTimestamp(1640937600000L))
|
||||
.isEqualTo(1640966400000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isMidnight_returnExpectedResult() {
|
||||
// 2022-01-01 00:00:00
|
||||
assertThat(TimestampUtils.isMidnight(1640966400000L)).isTrue();
|
||||
// 2022-01-01 01:00:05
|
||||
assertThat(TimestampUtils.isMidnight(1640970005000L)).isFalse();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user