From 9e24cc1607391e2714f9c031a1a497673d27fc0c Mon Sep 17 00:00:00 2001 From: Ryan Haining Date: Sun, 10 Sep 2023 13:36:30 -0700 Subject: [PATCH] Uses Fake instead of incomplete Mock for WearUtil Unblocks #2732 and #2733 --- .../nightscout/androidaps/WearTestBase.kt | 38 ++++--- .../interaction/utils/DisplayFormatTest.kt | 101 +++++++++--------- .../interaction/utils/WearUtilTest.kt | 36 +++---- .../testing/mockers/RawDataMocker.kt | 12 +-- .../testing/mockers/WearUtilMocker.kt | 43 -------- 5 files changed, 98 insertions(+), 132 deletions(-) delete mode 100644 wear/src/test/java/info/nightscout/androidaps/testing/mockers/WearUtilMocker.kt diff --git a/wear/src/test/java/info/nightscout/androidaps/WearTestBase.kt b/wear/src/test/java/info/nightscout/androidaps/WearTestBase.kt index 61b662d5b6..3b9c6ed7c9 100644 --- a/wear/src/test/java/info/nightscout/androidaps/WearTestBase.kt +++ b/wear/src/test/java/info/nightscout/androidaps/WearTestBase.kt @@ -2,10 +2,11 @@ package info.nightscout.androidaps import android.content.Context import android.content.SharedPreferences +import info.nightscout.androidaps.interaction.utils.Constants import info.nightscout.androidaps.interaction.utils.Persistence import info.nightscout.androidaps.interaction.utils.WearUtil -import info.nightscout.androidaps.testing.mockers.WearUtilMocker import info.nightscout.androidaps.testing.mocks.SharedPreferencesMock +import info.nightscout.rx.logging.AAPSLogger import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil import info.nightscout.sharedtests.TestBase @@ -13,24 +14,36 @@ import org.junit.jupiter.api.BeforeEach import org.mockito.ArgumentMatchers import org.mockito.Mock import org.mockito.Mockito -import org.mockito.Mockito.`when` + +class FakeWearUtil(context: Context, aapsLogger: AAPSLogger) : WearUtil(context, aapsLogger) { + private var clockMsDiff = 0L + + override fun timestamp(): Long = REF_NOW + clockMsDiff + + fun progressClock(byMilliseconds: Long) { + clockMsDiff += byMilliseconds + } + + companion object { + const val REF_NOW = 1572610530000L + } +} open class WearTestBase : TestBase() { @Mock lateinit var context: Context @Mock lateinit var sp: SP @Mock lateinit var dateUtil: DateUtil - @Mock lateinit var wearUtil: WearUtil + lateinit var fakeWearUtil: FakeWearUtil - //val wearUtil: WearUtil = Mockito.mock(WearUtil::class.java) - lateinit var wearUtilMocker: WearUtilMocker lateinit var persistence: Persistence private val mockedSharedPrefs: HashMap = HashMap() + @BeforeEach fun setup() { - wearUtilMocker = WearUtilMocker(wearUtil) + fakeWearUtil = FakeWearUtil(context, aapsLogger) Mockito.doAnswer { invocation -> val key = invocation.getArgument(0) if (mockedSharedPrefs.containsKey(key)) { @@ -42,12 +55,11 @@ open class WearTestBase : TestBase() { } }.`when`(context).getSharedPreferences(ArgumentMatchers.anyString(), ArgumentMatchers.anyInt()) - wearUtilMocker.prepareMockNoReal() - `when`(wearUtil.aapsLogger).thenReturn(aapsLogger) - `when`(wearUtil.context).thenReturn(context) - val rateLimits: MutableMap = HashMap() - `when`(wearUtil.rateLimits).thenReturn(rateLimits) persistence = Mockito.spy(Persistence(aapsLogger, dateUtil, sp)) - } -} \ No newline at end of file + + companion object { + fun backInTime(d: Int, h: Int, m: Int, s: Int): Long = + FakeWearUtil.REF_NOW - (Constants.DAY_IN_MS * d + Constants.HOUR_IN_MS * h + Constants.MINUTE_IN_MS * m + Constants.SECOND_IN_MS * s) + } +} diff --git a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt index bf21f9a3fa..6ce2cce75f 100644 --- a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt +++ b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/DisplayFormatTest.kt @@ -20,10 +20,9 @@ class DisplayFormatTest : WearTestBase() { @BeforeEach fun mock() { - rawDataMocker = RawDataMocker(wearUtil) - wearUtilMocker.prepareMock() + rawDataMocker = RawDataMocker() displayFormat = DisplayFormat() - displayFormat.wearUtil = wearUtil + displayFormat.wearUtil = fakeWearUtil displayFormat.sp = sp displayFormat.context = context Mockito.`when`(sp.getBoolean("complication_unicode", true)).thenReturn(true) @@ -33,58 +32,58 @@ class DisplayFormatTest : WearTestBase() { } @Test fun shortTimeSinceTest() { - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 0, 0)), "0'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 0, 5)), "0'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 0, 55)), "0'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 1, 0)), "1'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 1, 59)), "1'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 2, 0)), "2'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 3, 0)), "3'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 4, 0)), "4'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 10, 0)), "10'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 30, 0)), "30'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 59, 0)), "59'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 0, 59, 59)), "59'") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 1, 0, 0)), "1h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 1, 30, 0)), "1h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 1, 59, 59)), "1h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 2, 0, 0)), "2h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 3, 0, 0)), "3h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 4, 0, 0)), "4h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 5, 0, 0)), "5h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 12, 0, 0)), "12h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 18, 0, 0)), "18h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(0, 23, 59, 59)), "23h") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(1, 0, 0, 0)), "1d") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(1, 12, 0, 0)), "1d") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(1, 23, 59, 59)), "1d") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(2, 0, 0, 0)), "2d") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(3, 0, 0, 0)), "3d") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(4, 0, 0, 0)), "4d") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(5, 0, 0, 0)), "5d") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(6, 0, 0, 0)), "6d") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(6, 23, 59, 59)), "6d") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(7, 0, 0, 0)), "1w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(8, 0, 0, 0)), "1w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(9, 0, 0, 0)), "1w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(13, 23, 59, 59)), "1w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(14, 0, 0, 0)), "2w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(21, 0, 0, 0)), "3w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(28, 0, 0, 0)), "4w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(31, 0, 0, 0)), "4w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(32, 0, 0, 0)), "4w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(35, 0, 0, 0)), "5w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(100, 0, 0, 0)), "14w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(200, 0, 0, 0)), "28w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(365, 0, 0, 0)), "52w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(366, 0, 0, 0)), "52w") - Assertions.assertEquals(displayFormat.shortTimeSince(wearUtilMocker.backInTime(367, 0, 0, 0)), "52w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 0, 0)), "0'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 0, 5)), "0'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 0, 55)), "0'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 1, 0)), "1'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 1, 59)), "1'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 2, 0)), "2'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 3, 0)), "3'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 4, 0)), "4'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 10, 0)), "10'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 30, 0)), "30'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 59, 0)), "59'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 0, 59, 59)), "59'") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 1, 0, 0)), "1h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 1, 30, 0)), "1h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 1, 59, 59)), "1h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 2, 0, 0)), "2h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 3, 0, 0)), "3h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 4, 0, 0)), "4h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 5, 0, 0)), "5h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 12, 0, 0)), "12h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 18, 0, 0)), "18h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(0, 23, 59, 59)), "23h") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(1, 0, 0, 0)), "1d") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(1, 12, 0, 0)), "1d") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(1, 23, 59, 59)), "1d") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(2, 0, 0, 0)), "2d") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(3, 0, 0, 0)), "3d") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(4, 0, 0, 0)), "4d") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(5, 0, 0, 0)), "5d") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(6, 0, 0, 0)), "6d") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(6, 23, 59, 59)), "6d") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(7, 0, 0, 0)), "1w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(8, 0, 0, 0)), "1w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(9, 0, 0, 0)), "1w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(13, 23, 59, 59)), "1w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(14, 0, 0, 0)), "2w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(21, 0, 0, 0)), "3w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(28, 0, 0, 0)), "4w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(31, 0, 0, 0)), "4w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(32, 0, 0, 0)), "4w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(35, 0, 0, 0)), "5w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(100, 0, 0, 0)), "14w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(200, 0, 0, 0)), "28w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(365, 0, 0, 0)), "52w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(366, 0, 0, 0)), "52w") + Assertions.assertEquals(displayFormat.shortTimeSince(backInTime(367, 0, 0, 0)), "52w") } @Test fun shortTrendTest() { val raw = RawDisplayData() Assertions.assertEquals(displayFormat.shortTrend(raw), "-- Δ--") - raw.singleBg.timeStamp = wearUtilMocker.backInTime(0, 0, 2, 0) + raw.singleBg.timeStamp = backInTime(0, 0, 2, 0) Assertions.assertEquals(displayFormat.shortTrend(raw), "2' Δ--") Mockito.`when`(sp.getBoolean("complication_unicode", true)).thenReturn(true) @@ -171,4 +170,4 @@ class DisplayFormatTest : WearTestBase() { Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("19(38)g")), Pair.create("19g", "38g")) Assertions.assertEquals(displayFormat.detailedCob(rawDataMocker.rawCob("100(1)g")), Pair.create("100g", "1g")) } -} \ No newline at end of file +} diff --git a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/WearUtilTest.kt b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/WearUtilTest.kt index 2afd43d7b2..3c88639184 100644 --- a/wear/src/test/java/info/nightscout/androidaps/interaction/utils/WearUtilTest.kt +++ b/wear/src/test/java/info/nightscout/androidaps/interaction/utils/WearUtilTest.kt @@ -1,8 +1,8 @@ package info.nightscout.androidaps.interaction.utils import com.google.common.truth.Truth.assertThat +import info.nightscout.androidaps.FakeWearUtil import info.nightscout.androidaps.WearTestBase -import info.nightscout.androidaps.testing.mockers.WearUtilMocker import org.junit.jupiter.api.Test /** @@ -14,13 +14,13 @@ class WearUtilTest : WearTestBase() { @Test fun timestampAndTimeDiffsTest() { // smoke for mocks - since we freeze "now" to get stable tests - assertThat(wearUtil.timestamp()).isEqualTo(WearUtilMocker.REF_NOW) - assertThat(wearUtil.msTill(WearUtilMocker.REF_NOW)).isEqualTo(0L) - assertThat(wearUtil.msTill(WearUtilMocker.REF_NOW + 3456L)).isEqualTo(3456L) - assertThat(wearUtil.msTill(WearUtilMocker.REF_NOW - 6294L)).isEqualTo(-6294L) - assertThat(wearUtil.msTill(WearUtilMocker.REF_NOW)).isEqualTo(0L) - assertThat(wearUtil.msSince(WearUtilMocker.REF_NOW + 3456L)).isEqualTo(-3456L) - assertThat(wearUtil.msSince(WearUtilMocker.REF_NOW - 6294L)).isEqualTo(6294L) + assertThat(fakeWearUtil.timestamp()).isEqualTo(FakeWearUtil.REF_NOW) + assertThat(fakeWearUtil.msTill(FakeWearUtil.REF_NOW)).isEqualTo(0L) + assertThat(fakeWearUtil.msTill(FakeWearUtil.REF_NOW + 3456L)).isEqualTo(3456L) + assertThat(fakeWearUtil.msTill(FakeWearUtil.REF_NOW - 6294L)).isEqualTo(-6294L) + assertThat(fakeWearUtil.msTill(FakeWearUtil.REF_NOW)).isEqualTo(0L) + assertThat(fakeWearUtil.msSince(FakeWearUtil.REF_NOW + 3456L)).isEqualTo(-3456L) + assertThat(fakeWearUtil.msSince(FakeWearUtil.REF_NOW - 6294L)).isEqualTo(6294L) } @Test fun joinSetTest() { @@ -33,7 +33,7 @@ class WearUtilTest : WearTestBase() { // THEN // we cannot guarantee order of items in joined string // but all items have to be there - assertThat(joined).hasLength(refSet.sumOf { it.length } + (refSet.size-1)) + assertThat(joined).hasLength(refSet.sumOf { it.length } + (refSet.size - 1)) assertThat("|$joined|").contains("|element1|") assertThat("|$joined|").contains("|second-elem|") assertThat("|$joined|").contains("|3rd|") @@ -47,7 +47,7 @@ class WearUtilTest : WearTestBase() { val set = persistence.explodeSet(serializedSet, ":") // THEN - assertThat(set).containsExactly( "element1", "second-elem", "3rd") + assertThat(set).containsExactly("element1", "second-elem", "3rd") } @Test fun explodeSetEmptyElemsTest() { @@ -69,7 +69,8 @@ class WearUtilTest : WearTestBase() { "3rd", "czwarty", "V", - "6") + "6" + ) // WHEN val joinedSet = persistence.joinSet(refSet, "#") @@ -97,14 +98,13 @@ class WearUtilTest : WearTestBase() { } */ @Test fun rateLimitTest() { - wearUtilMocker.prepareMockNoReal() // 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) + val firstCall = fakeWearUtil.isBelowRateLimit("test-limit", 3) + val callAfterward = fakeWearUtil.isBelowRateLimit("test-limit", 3) + fakeWearUtil.progressClock(500L) + val callTooSoon = fakeWearUtil.isBelowRateLimit("test-limit", 3) + fakeWearUtil.progressClock(3100L) + val callAfterRateLimit = fakeWearUtil.isBelowRateLimit("test-limit", 3) // THEN assertThat(firstCall).isTrue() diff --git a/wear/src/test/java/info/nightscout/androidaps/testing/mockers/RawDataMocker.kt b/wear/src/test/java/info/nightscout/androidaps/testing/mockers/RawDataMocker.kt index 057d0614e3..b04cd1ad39 100644 --- a/wear/src/test/java/info/nightscout/androidaps/testing/mockers/RawDataMocker.kt +++ b/wear/src/test/java/info/nightscout/androidaps/testing/mockers/RawDataMocker.kt @@ -1,14 +1,12 @@ package info.nightscout.androidaps.testing.mockers import info.nightscout.androidaps.data.RawDisplayData -import info.nightscout.androidaps.interaction.utils.WearUtil +import info.nightscout.androidaps.WearTestBase import info.nightscout.shared.SafeParse.stringToDouble import info.nightscout.rx.weardata.EventData import info.nightscout.rx.weardata.EventData.SingleBg -class RawDataMocker(wearUtil: WearUtil) { - - private val wearUtilMocker: WearUtilMocker = WearUtilMocker(wearUtil) +class RawDataMocker() { fun rawSgv(sgv: String?, m: Int, deltaString: String): RawDisplayData { val raw = RawDisplayData() @@ -25,7 +23,7 @@ class RawDataMocker(wearUtil: WearUtil) { } raw.singleBg = SingleBg( - wearUtilMocker.backInTime(0, 0, m, 0), + WearTestBase.backInTime(0, 0, m, 0), sgv!!, "", d, @@ -45,7 +43,7 @@ class RawDataMocker(wearUtil: WearUtil) { fun rawDelta(m: Int, delta: String): RawDisplayData { val raw = RawDisplayData() raw.singleBg = SingleBg( - wearUtilMocker.backInTime(0, 0, m, 0), + WearTestBase.backInTime(0, 0, m, 0), "", "", "", @@ -113,4 +111,4 @@ class RawDataMocker(wearUtil: WearUtil) { return raw } -} \ No newline at end of file +} diff --git a/wear/src/test/java/info/nightscout/androidaps/testing/mockers/WearUtilMocker.kt b/wear/src/test/java/info/nightscout/androidaps/testing/mockers/WearUtilMocker.kt deleted file mode 100644 index 4884c60e19..0000000000 --- a/wear/src/test/java/info/nightscout/androidaps/testing/mockers/WearUtilMocker.kt +++ /dev/null @@ -1,43 +0,0 @@ -package info.nightscout.androidaps.testing.mockers - -import info.nightscout.androidaps.interaction.utils.Constants -import info.nightscout.androidaps.interaction.utils.WearUtil -import info.nightscout.annotations.OpenForTesting -import org.mockito.ArgumentMatchers -import org.mockito.Mockito - -@OpenForTesting -class WearUtilMocker(private val wearUtil: WearUtil) { - - private var clockMsDiff = 0L - fun prepareMock() { - resetClock() - - // because we cleverly used timestamp() by implementation, we can mock it - // and control the time in tests - Mockito.`when`(wearUtil.timestamp()).thenReturn(REF_NOW + clockMsDiff) - } - - fun prepareMockNoReal() { - resetClock() - Mockito.doAnswer { REF_NOW + clockMsDiff }.`when`(wearUtil).timestamp() - Mockito.doReturn(null).`when`(wearUtil).getWakeLock(ArgumentMatchers.anyString(), ArgumentMatchers.anyInt()) - } - - private fun resetClock() { - clockMsDiff = 0L - } - - fun progressClock(byMilliseconds: Long) { - clockMsDiff += byMilliseconds - } - - fun backInTime(d: Int, h: Int, m: Int, s: Int): Long { - return REF_NOW - (Constants.DAY_IN_MS * d + Constants.HOUR_IN_MS * h + Constants.MINUTE_IN_MS * m + Constants.SECOND_IN_MS * s) - } - - companion object { - - const val REF_NOW = 1572610530000L - } -} \ No newline at end of file