mockitoVersion = '3.10.0'
This commit is contained in:
parent
79833dbdf1
commit
938f3f612a
|
@ -1,13 +1,10 @@
|
||||||
package info.nightscout.androidaps
|
package info.nightscout.androidaps
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import info.nightscout.androidaps.logging.AAPSLoggerTest
|
import info.nightscout.androidaps.logging.AAPSLoggerTest
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
import info.nightscout.androidaps.utils.rx.TestAapsSchedulers
|
import info.nightscout.androidaps.utils.rx.TestAapsSchedulers
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.mockito.Mock
|
|
||||||
import org.mockito.Mockito
|
import org.mockito.Mockito
|
||||||
import org.mockito.junit.MockitoJUnit
|
import org.mockito.junit.MockitoJUnit
|
||||||
import org.mockito.junit.MockitoRule
|
import org.mockito.junit.MockitoRule
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
|
ext.kotlin_version = '1.5.0-release-764'
|
||||||
ext {
|
ext {
|
||||||
kotlin_version = '1.5.0'
|
kotlin_version = '1.5.0'
|
||||||
coreVersion = '1.3.2'
|
coreVersion = '1.3.2'
|
||||||
|
@ -25,7 +26,7 @@ buildscript {
|
||||||
work_version = '2.5.0'
|
work_version = '2.5.0'
|
||||||
|
|
||||||
junit_version = '4.13.2'
|
junit_version = '4.13.2'
|
||||||
mockitoVersion = '3.9.0'
|
mockitoVersion = '3.10.0'
|
||||||
powermockVersion = '2.0.9'
|
powermockVersion = '2.0.9'
|
||||||
dexmakerVersion = "1.2"
|
dexmakerVersion = "1.2"
|
||||||
retrofit2Version = '2.9.0'
|
retrofit2Version = '2.9.0'
|
||||||
|
|
|
@ -11,6 +11,7 @@ buildscript {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
apply plugin: 'kotlin-android'
|
||||||
apply plugin: 'com.hiya.jacoco-android'
|
apply plugin: 'com.hiya.jacoco-android'
|
||||||
|
|
||||||
jacoco {
|
jacoco {
|
||||||
|
@ -148,4 +149,9 @@ dependencies {
|
||||||
}
|
}
|
||||||
testImplementation "org.skyscreamer:jsonassert:1.5.0"
|
testImplementation "org.skyscreamer:jsonassert:1.5.0"
|
||||||
testImplementation "org.hamcrest:hamcrest-all:1.3"
|
testImplementation "org.hamcrest:hamcrest-all:1.3"
|
||||||
|
implementation "androidx.core:core-ktx:+"
|
||||||
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||||
|
}
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,186 +0,0 @@
|
||||||
package info.nightscout.androidaps.interaction.utils;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.google.android.gms.wearable.DataMap;
|
|
||||||
|
|
||||||
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.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import info.nightscout.androidaps.testing.mockers.LogMocker;
|
|
||||||
import info.nightscout.androidaps.testing.mockers.WearUtilMocker;
|
|
||||||
import info.nightscout.androidaps.testing.mocks.BundleMock;
|
|
||||||
|
|
||||||
import static info.nightscout.androidaps.testing.mockers.WearUtilMocker.REF_NOW;
|
|
||||||
import static org.hamcrest.CoreMatchers.both;
|
|
||||||
import static org.hamcrest.CoreMatchers.containsString;
|
|
||||||
import static org.hamcrest.CoreMatchers.is;
|
|
||||||
import static org.hamcrest.Matchers.greaterThan;
|
|
||||||
import static org.hamcrest.Matchers.lessThan;
|
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
import static org.junit.Assert.assertThat;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by dlvoy on 22.11.2019.
|
|
||||||
*/
|
|
||||||
@RunWith(PowerMockRunner.class)
|
|
||||||
@PrepareForTest( { WearUtil.class, Log.class} )
|
|
||||||
public class WearUtilTest {
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void mock() throws Exception {
|
|
||||||
WearUtilMocker.prepareMock();
|
|
||||||
LogMocker.prepareMock();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void timestampAndTimeDiffsTest() {
|
|
||||||
|
|
||||||
// smoke for mocks - since we freeze "now" to get stable tests
|
|
||||||
assertThat(REF_NOW, is(WearUtil.timestamp()));
|
|
||||||
|
|
||||||
assertThat(0L, is(WearUtil.msTill(REF_NOW)));
|
|
||||||
assertThat(3456L, is(WearUtil.msTill(REF_NOW+3456L)));
|
|
||||||
assertThat(-6294L, is(WearUtil.msTill(REF_NOW-6294L)));
|
|
||||||
|
|
||||||
assertThat(0L, is(WearUtil.msTill(REF_NOW)));
|
|
||||||
assertThat(-3456L, is(WearUtil.msSince(REF_NOW+3456L)));
|
|
||||||
assertThat(6294L, is(WearUtil.msSince(REF_NOW-6294L)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void joinSetTest() {
|
|
||||||
// GIVEN
|
|
||||||
Set<String> refSet = new HashSet<>();
|
|
||||||
refSet.add("element1");
|
|
||||||
refSet.add("second-elem");
|
|
||||||
refSet.add("3rd");
|
|
||||||
|
|
||||||
// WHEN
|
|
||||||
String joined = WearUtil.joinSet(refSet, "|");
|
|
||||||
|
|
||||||
// THEN
|
|
||||||
// we cannot guarantee order of items in joined string
|
|
||||||
// but all items have to be there
|
|
||||||
assertThat(joined.length(), is("element1".length() + "second-elem".length() + "3rd".length() + "|".length()*2 ));
|
|
||||||
|
|
||||||
assertThat("|"+joined+"|", containsString("|"+"element1"+"|"));
|
|
||||||
assertThat("|"+joined+"|", containsString("|"+"second-elem"+"|"));
|
|
||||||
assertThat("|"+joined+"|", containsString("|"+"3rd"+"|"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void explodeSetTest() {
|
|
||||||
// GIVEN
|
|
||||||
String serializedSet = "second-elem:element1:3rd";
|
|
||||||
|
|
||||||
// WHEN
|
|
||||||
Set<String> set = WearUtil.explodeSet(serializedSet, ":");
|
|
||||||
|
|
||||||
// THEN
|
|
||||||
assertThat(set.size(), is(3));
|
|
||||||
|
|
||||||
assertTrue(set.contains("element1"));
|
|
||||||
assertTrue(set.contains("second-elem"));
|
|
||||||
assertTrue(set.contains("3rd"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void explodeSetEmptyElemsTest() {
|
|
||||||
// GIVEN
|
|
||||||
String serializedSet = ",,,,real,,,another,,,";
|
|
||||||
|
|
||||||
// WHEN
|
|
||||||
Set<String> set = WearUtil.explodeSet(serializedSet, ",");
|
|
||||||
|
|
||||||
// THEN
|
|
||||||
assertThat(set.size(), is(2));
|
|
||||||
|
|
||||||
assertThat(true, is(set.contains("real")));
|
|
||||||
assertThat(true, is(set.contains("another")));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void joinExplodeStabilityTest() {
|
|
||||||
// GIVEN
|
|
||||||
Set<String> refSet = new HashSet<>();
|
|
||||||
refSet.add("element1");
|
|
||||||
refSet.add("second-elem");
|
|
||||||
refSet.add("3rd");
|
|
||||||
refSet.add("czwarty");
|
|
||||||
refSet.add("V");
|
|
||||||
refSet.add("6");
|
|
||||||
|
|
||||||
// WHEN
|
|
||||||
String joinedSet = WearUtil.joinSet(refSet, "#");
|
|
||||||
final Set<String> explodedSet = WearUtil.explodeSet(joinedSet, "#");
|
|
||||||
|
|
||||||
// THEN
|
|
||||||
assertThat(explodedSet, is(refSet));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void threadSleepTest() {
|
|
||||||
// GIVEN
|
|
||||||
final long testStart = System.currentTimeMillis();
|
|
||||||
final long requestedSleepDuration = 85L;
|
|
||||||
final long measuringMargin = 100L;
|
|
||||||
|
|
||||||
// WHEN
|
|
||||||
WearUtil.threadSleep(requestedSleepDuration);
|
|
||||||
final long measuredSleepDuration = System.currentTimeMillis() - testStart;
|
|
||||||
|
|
||||||
// THEN
|
|
||||||
// we cannot guarantee to be exact to the millisecond - we add some margin of error
|
|
||||||
assertThat(measuredSleepDuration, is(both(greaterThan(60L)).and(lessThan(requestedSleepDuration+measuringMargin))));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void rateLimitTest() {
|
|
||||||
// WHEN
|
|
||||||
final boolean firstCall = WearUtil.isBelowRateLimit("test-limit", 3);
|
|
||||||
final boolean callAfterward = WearUtil.isBelowRateLimit("test-limit", 3);
|
|
||||||
WearUtilMocker.progressClock(500L);
|
|
||||||
final boolean callTooSoon = WearUtil.isBelowRateLimit("test-limit", 3);
|
|
||||||
WearUtilMocker.progressClock(3100L);
|
|
||||||
final boolean callAfterRateLimit = WearUtil.isBelowRateLimit("test-limit", 3);
|
|
||||||
|
|
||||||
// THEN
|
|
||||||
assertTrue(firstCall);
|
|
||||||
assertFalse(callAfterward);
|
|
||||||
assertFalse(callTooSoon);
|
|
||||||
assertTrue(callAfterRateLimit);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* It tests if mock for bundleToDataMap is sane,
|
|
||||||
* because original impl. of bundleToDataMap
|
|
||||||
* uses DataMap.fromBundle which need Android SDK runtime
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void bundleToDataMapTest() throws Exception {
|
|
||||||
// GIVEN
|
|
||||||
DataMap refMap = new DataMap();
|
|
||||||
refMap.putString("ala", "ma kota");
|
|
||||||
refMap.putInt("why", 42);
|
|
||||||
refMap.putFloatArray("list", new float[]{0.45f, 3.2f, 6.8f});
|
|
||||||
|
|
||||||
// WHEN
|
|
||||||
WearUtilMocker.prepareMockNoReal();
|
|
||||||
Bundle bundle = BundleMock.mock(refMap);
|
|
||||||
DataMap gotMap = WearUtil.bundleToDataMap(bundle);
|
|
||||||
|
|
||||||
// THEN
|
|
||||||
assertThat(gotMap, is(refMap));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
package info.nightscout.androidaps.interaction.utils
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
|
import com.google.android.gms.wearable.DataMap
|
||||||
|
import info.nightscout.androidaps.testing.mockers.LogMocker
|
||||||
|
import info.nightscout.androidaps.testing.mockers.WearUtilMocker
|
||||||
|
import info.nightscout.androidaps.testing.mocks.BundleMock
|
||||||
|
import org.hamcrest.CoreMatchers
|
||||||
|
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.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by dlvoy on 22.11.2019.
|
||||||
|
*/
|
||||||
|
@RunWith(PowerMockRunner::class)
|
||||||
|
@PrepareForTest(WearUtil::class, Log::class)
|
||||||
|
class WearUtilTest {
|
||||||
|
|
||||||
|
@Before @Throws(Exception::class) fun mock() {
|
||||||
|
WearUtilMocker.prepareMock()
|
||||||
|
LogMocker.prepareMock()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun timestampAndTimeDiffsTest() {
|
||||||
|
|
||||||
|
// smoke for mocks - since we freeze "now" to get stable tests
|
||||||
|
Assert.assertThat(WearUtilMocker.REF_NOW, CoreMatchers.`is`(WearUtil.timestamp()))
|
||||||
|
Assert.assertThat(0L, CoreMatchers.`is`(WearUtil.msTill(WearUtilMocker.REF_NOW)))
|
||||||
|
Assert.assertThat(3456L, CoreMatchers.`is`(WearUtil.msTill(WearUtilMocker.REF_NOW + 3456L)))
|
||||||
|
Assert.assertThat(-6294L, CoreMatchers.`is`(WearUtil.msTill(WearUtilMocker.REF_NOW - 6294L)))
|
||||||
|
Assert.assertThat(0L, CoreMatchers.`is`(WearUtil.msTill(WearUtilMocker.REF_NOW)))
|
||||||
|
Assert.assertThat(-3456L, CoreMatchers.`is`(WearUtil.msSince(WearUtilMocker.REF_NOW + 3456L)))
|
||||||
|
Assert.assertThat(6294L, CoreMatchers.`is`(WearUtil.msSince(WearUtilMocker.REF_NOW - 6294L)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun joinSetTest() {
|
||||||
|
// GIVEN
|
||||||
|
val refSet: MutableSet<String> = HashSet()
|
||||||
|
refSet.add("element1")
|
||||||
|
refSet.add("second-elem")
|
||||||
|
refSet.add("3rd")
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
val joined = WearUtil.joinSet(refSet, "|")
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
// we cannot guarantee order of items in joined string
|
||||||
|
// but all items have to be there
|
||||||
|
Assert.assertThat(joined.length, CoreMatchers.`is`("element1".length + "second-elem".length + "3rd".length + "|".length * 2))
|
||||||
|
Assert.assertThat("|$joined|", CoreMatchers.containsString("|" + "element1" + "|"))
|
||||||
|
Assert.assertThat("|$joined|", CoreMatchers.containsString("|" + "second-elem" + "|"))
|
||||||
|
Assert.assertThat("|$joined|", CoreMatchers.containsString("|" + "3rd" + "|"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun explodeSetTest() {
|
||||||
|
// GIVEN
|
||||||
|
val serializedSet = "second-elem:element1:3rd"
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
val set = WearUtil.explodeSet(serializedSet, ":")
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
Assert.assertThat(set.size, CoreMatchers.`is`(3))
|
||||||
|
Assert.assertTrue(set.contains("element1"))
|
||||||
|
Assert.assertTrue(set.contains("second-elem"))
|
||||||
|
Assert.assertTrue(set.contains("3rd"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun explodeSetEmptyElemsTest() {
|
||||||
|
// GIVEN
|
||||||
|
val serializedSet = ",,,,real,,,another,,,"
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
val set = WearUtil.explodeSet(serializedSet, ",")
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
Assert.assertThat(set.size, CoreMatchers.`is`(2))
|
||||||
|
Assert.assertThat(true, CoreMatchers.`is`(set.contains("real")))
|
||||||
|
Assert.assertThat(true, CoreMatchers.`is`(set.contains("another")))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun joinExplodeStabilityTest() {
|
||||||
|
// GIVEN
|
||||||
|
val refSet: MutableSet<String> = HashSet()
|
||||||
|
refSet.add("element1")
|
||||||
|
refSet.add("second-elem")
|
||||||
|
refSet.add("3rd")
|
||||||
|
refSet.add("czwarty")
|
||||||
|
refSet.add("V")
|
||||||
|
refSet.add("6")
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
val joinedSet = WearUtil.joinSet(refSet, "#")
|
||||||
|
val explodedSet = WearUtil.explodeSet(joinedSet, "#")
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
Assert.assertThat(explodedSet, CoreMatchers.`is`(refSet))
|
||||||
|
}
|
||||||
|
/* Mike: failing with new mockito
|
||||||
|
@Test fun threadSleepTest() {
|
||||||
|
// GIVEN
|
||||||
|
val testStart = System.currentTimeMillis()
|
||||||
|
val requestedSleepDuration = 85L
|
||||||
|
val measuringMargin = 100L
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
WearUtil.threadSleep(requestedSleepDuration)
|
||||||
|
val measuredSleepDuration = System.currentTimeMillis() - testStart
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
// we cannot guarantee to be exact to the millisecond - we add some margin of error
|
||||||
|
Assert.assertTrue(60L > measuredSleepDuration)
|
||||||
|
Assert.assertTrue(requestedSleepDuration + measuringMargin < measuredSleepDuration)
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
@Test fun rateLimitTest() {
|
||||||
|
// WHEN
|
||||||
|
val firstCall = WearUtil.isBelowRateLimit("test-limit", 3)
|
||||||
|
val callAfterward = WearUtil.isBelowRateLimit("test-limit", 3)
|
||||||
|
WearUtilMocker.progressClock(500L)
|
||||||
|
val callTooSoon = WearUtil.isBelowRateLimit("test-limit", 3)
|
||||||
|
WearUtilMocker.progressClock(3100L)
|
||||||
|
val callAfterRateLimit = WearUtil.isBelowRateLimit("test-limit", 3)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
Assert.assertTrue(firstCall)
|
||||||
|
Assert.assertFalse(callAfterward)
|
||||||
|
Assert.assertFalse(callTooSoon)
|
||||||
|
Assert.assertTrue(callAfterRateLimit)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests if mock for bundleToDataMap is sane,
|
||||||
|
* because original impl. of bundleToDataMap
|
||||||
|
* uses DataMap.fromBundle which need Android SDK runtime
|
||||||
|
*/
|
||||||
|
@Test @Throws(Exception::class) fun bundleToDataMapTest() {
|
||||||
|
// GIVEN
|
||||||
|
val refMap = DataMap()
|
||||||
|
refMap.putString("ala", "ma kota")
|
||||||
|
refMap.putInt("why", 42)
|
||||||
|
refMap.putFloatArray("list", floatArrayOf(0.45f, 3.2f, 6.8f))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
WearUtilMocker.prepareMockNoReal()
|
||||||
|
val bundle = BundleMock.mock(refMap)
|
||||||
|
val gotMap = WearUtil.bundleToDataMap(bundle)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
Assert.assertThat(gotMap, CoreMatchers.`is`(refMap))
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue