fix MidnightTime crash + tests

This commit is contained in:
Milos Kozak 2019-03-05 23:12:35 +01:00
parent 6c19e91abc
commit 02db9b681d
2 changed files with 79 additions and 14 deletions

View file

@ -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,7 +20,9 @@ public class MidnightTime {
}
public static long calc(long time) {
Long m = (Long) times.get(time);
Long m;
synchronized (times) {
m = times.get(time);
if (m != null) {
++hits;
return m;
@ -34,6 +36,7 @@ public class MidnightTime {
m = c.getTimeInMillis();
times.append(time, m);
++misses;
}
return m;
}

View file

@ -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");
}
}