fix MidnightTime crash + tests
This commit is contained in:
parent
6c19e91abc
commit
02db9b681d
2 changed files with 79 additions and 14 deletions
|
@ -5,7 +5,7 @@ import android.util.LongSparseArray;
|
|||
import java.util.Calendar;
|
||||
|
||||
public class MidnightTime {
|
||||
private static LongSparseArray times = new LongSparseArray();
|
||||
private static final LongSparseArray<Long> times = new LongSparseArray<>();
|
||||
|
||||
private static long hits = 0;
|
||||
private static long misses = 0;
|
||||
|
@ -20,20 +20,23 @@ public class MidnightTime {
|
|||
}
|
||||
|
||||
public static long calc(long time) {
|
||||
Long m = (Long) times.get(time);
|
||||
if (m != null) {
|
||||
++hits;
|
||||
return m;
|
||||
Long m;
|
||||
synchronized (times) {
|
||||
m = times.get(time);
|
||||
if (m != null) {
|
||||
++hits;
|
||||
return m;
|
||||
}
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTimeInMillis(time);
|
||||
c.set(Calendar.HOUR_OF_DAY, 0);
|
||||
c.set(Calendar.MINUTE, 0);
|
||||
c.set(Calendar.SECOND, 0);
|
||||
c.set(Calendar.MILLISECOND, 0);
|
||||
m = c.getTimeInMillis();
|
||||
times.append(time, m);
|
||||
++misses;
|
||||
}
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTimeInMillis(time);
|
||||
c.set(Calendar.HOUR_OF_DAY, 0);
|
||||
c.set(Calendar.MINUTE, 0);
|
||||
c.set(Calendar.SECOND, 0);
|
||||
c.set(Calendar.MILLISECOND, 0);
|
||||
m = c.getTimeInMillis();
|
||||
times.append(time, m);
|
||||
++misses;
|
||||
return m;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package info.nightscout.androidaps.utils;
|
||||
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.modules.junit4.PowerMockRunner;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
import info.AAPSMocker;
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* Created by mike on 20.11.2017.
|
||||
*/
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest({Calendar.class})
|
||||
public class MidnightTimeTest {
|
||||
|
||||
@Test
|
||||
public void calc() {
|
||||
// We get real midnight
|
||||
long now = DateUtil.now();
|
||||
Assert.assertTrue(now >= MidnightTime.calc());
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTimeInMillis(MidnightTime.calc());
|
||||
Assert.assertEquals(c.get(Calendar.HOUR_OF_DAY), 0);
|
||||
Assert.assertEquals(c.get(Calendar.MINUTE), 0);
|
||||
Assert.assertEquals(c.get(Calendar.SECOND), 0);
|
||||
Assert.assertEquals(c.get(Calendar.MILLISECOND), 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void calc_time() {
|
||||
// We get real midnight
|
||||
long now = DateUtil.now();
|
||||
long midnight = MidnightTime.calc(now);
|
||||
Assert.assertTrue(now >= midnight);
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTimeInMillis(MidnightTime.calc(now));
|
||||
Assert.assertEquals(c.get(Calendar.HOUR_OF_DAY), 0);
|
||||
Assert.assertEquals(c.get(Calendar.MINUTE), 0);
|
||||
Assert.assertEquals(c.get(Calendar.SECOND), 0);
|
||||
Assert.assertEquals(c.get(Calendar.MILLISECOND), 0);
|
||||
// Assure we get the same time from cache
|
||||
Assert.assertEquals(midnight, MidnightTime.calc(now));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void log() {
|
||||
long now = DateUtil.now();
|
||||
MidnightTime.calc(now);
|
||||
Assert.assertEquals(MidnightTime.log(), "Hits: 0 misses: 1 stored: 0");
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue