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;
|
import java.util.Calendar;
|
||||||
|
|
||||||
public class MidnightTime {
|
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 hits = 0;
|
||||||
private static long misses = 0;
|
private static long misses = 0;
|
||||||
|
@ -20,20 +20,23 @@ public class MidnightTime {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long calc(long time) {
|
public static long calc(long time) {
|
||||||
Long m = (Long) times.get(time);
|
Long m;
|
||||||
if (m != null) {
|
synchronized (times) {
|
||||||
++hits;
|
m = times.get(time);
|
||||||
return m;
|
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;
|
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