diff --git a/app/build.gradle b/app/build.gradle index 4f9e7f3fbe..3d40f22310 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -225,6 +225,8 @@ dependencies { implementation project(':pump:virtual') implementation project(':workflow') + testImplementation project(':app-wear-shared:shared-tests') + implementation fileTree(include: ['*.jar'], dir: 'libs') /* Dagger2 - We are going to use dagger.android which includes diff --git a/app/src/test/java/info/nightscout/androidaps/HardLimitsMock.kt b/app/src/test/java/info/nightscout/androidaps/HardLimitsMock.kt deleted file mode 100644 index 288eaf084a..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/HardLimitsMock.kt +++ /dev/null @@ -1,83 +0,0 @@ -package info.nightscout.androidaps - -import info.nightscout.interfaces.utils.HardLimits -import info.nightscout.shared.interfaces.ResourceHelper -import info.nightscout.shared.sharedPreferences.SP -import javax.inject.Inject -import kotlin.math.max -import kotlin.math.min - -class HardLimitsMock @Inject constructor( - private val sp: SP, - private val rh: ResourceHelper -) : HardLimits { - - companion object { - - private const val CHILD = 0 - private const val TEENAGE = 1 - private const val ADULT = 2 - private const val RESISTANT_ADULT = 3 - private const val PREGNANT = 4 - private val MAX_BOLUS = doubleArrayOf(5.0, 10.0, 17.0, 25.0, 60.0) - - // Very Hard Limits Ranges - // First value is the Lowest and second value is the Highest a Limit can define - val VERY_HARD_LIMIT_MIN_BG = doubleArrayOf(80.0, 180.0) - val VERY_HARD_LIMIT_MAX_BG = doubleArrayOf(90.0, 200.0) - val VERY_HARD_LIMIT_TARGET_BG = doubleArrayOf(80.0, 200.0) - - // Very Hard Limits Ranges for Temp Targets - val VERY_HARD_LIMIT_TEMP_MIN_BG = intArrayOf(72, 180) - val VERY_HARD_LIMIT_TEMP_MAX_BG = intArrayOf(72, 270) - val VERY_HARD_LIMIT_TEMP_TARGET_BG = intArrayOf(72, 200) - val MIN_DIA = doubleArrayOf(5.0, 5.0, 5.0, 5.0, 5.0) - val MAX_DIA = doubleArrayOf(9.0, 9.0, 9.0, 9.0, 10.0) - val MIN_IC = doubleArrayOf(2.0, 2.0, 2.0, 2.0, 0.3) - val MAX_IC = doubleArrayOf(100.0, 100.0, 100.0, 100.0, 100.0) - const val MIN_ISF = 2.0 // mgdl - const val MAX_ISF = 1000.0 // mgdl - val MAX_IOB_AMA = doubleArrayOf(3.0, 5.0, 7.0, 12.0, 25.0) - val MAX_IOB_SMB = doubleArrayOf(7.0, 13.0, 22.0, 30.0, 70.0) - val MAX_BASAL = doubleArrayOf(2.0, 5.0, 10.0, 12.0, 25.0) - - //LGS Hard limits - //No IOB at all - const val MAX_IOB_LGS = 0.0 - - } - - private fun loadAge(): Int = when (sp.getString(info.nightscout.core.utils.R.string.key_age, "")) { - rh.gs(info.nightscout.core.utils.R.string.key_child) -> CHILD - rh.gs(info.nightscout.core.utils.R.string.key_teenage) -> TEENAGE - rh.gs(info.nightscout.core.utils.R.string.key_adult) -> ADULT - rh.gs(info.nightscout.core.utils.R.string.key_resistantadult) -> RESISTANT_ADULT - rh.gs(info.nightscout.core.utils.R.string.key_pregnant) -> PREGNANT - else -> ADULT - } - - override fun maxBolus(): Double = MAX_BOLUS[loadAge()] - override fun maxIobAMA(): Double = MAX_IOB_AMA[loadAge()] - override fun maxIobSMB(): Double = MAX_IOB_SMB[loadAge()] - override fun maxBasal(): Double = MAX_BASAL[loadAge()] - override fun minDia(): Double = MIN_DIA[loadAge()] - override fun maxDia(): Double = MAX_DIA[loadAge()] - override fun minIC(): Double = MIN_IC[loadAge()] - override fun maxIC(): Double = MAX_IC[loadAge()] - - // safety checks - override fun checkHardLimits(value: Double, valueName: Int, lowLimit: Double, highLimit: Double): Boolean = - value == verifyHardLimits(value, valueName, lowLimit, highLimit) - - override fun isInRange(value: Double, lowLimit: Double, highLimit: Double): Boolean = - value in lowLimit..highLimit - - override fun verifyHardLimits(value: Double, valueName: Int, lowLimit: Double, highLimit: Double): Double { - var newValue = value - if (newValue < lowLimit || newValue > highLimit) { - newValue = max(newValue, lowLimit) - newValue = min(newValue, highLimit) - } - return newValue - } -} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/TestBase.kt b/app/src/test/java/info/nightscout/androidaps/TestBase.kt deleted file mode 100644 index 4fd2aef548..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/TestBase.kt +++ /dev/null @@ -1,37 +0,0 @@ -package info.nightscout.androidaps - -import info.nightscout.rx.AapsSchedulers -import info.nightscout.rx.TestAapsSchedulers -import info.nightscout.rx.logging.AAPSLoggerTest -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.extension.ExtendWith -import org.mockito.Mockito -import org.mockito.junit.jupiter.MockitoExtension -import org.mockito.junit.jupiter.MockitoSettings -import org.mockito.quality.Strictness -import java.util.Locale - -@ExtendWith(MockitoExtension::class) -@MockitoSettings(strictness = Strictness.LENIENT) -open class TestBase { - - val aapsLogger = AAPSLoggerTest() - val aapsSchedulers: AapsSchedulers = TestAapsSchedulers() - - @BeforeEach - fun setupLocale() { - Locale.setDefault(Locale.ENGLISH) - System.setProperty("disableFirebase", "true") - } - - // Workaround for Kotlin nullability. - // https://medium.com/@elye.project/befriending-kotlin-and-mockito-1c2e7b0ef791 - // https://stackoverflow.com/questions/30305217/is-it-possible-to-use-mockito-in-kotlin - fun anyObject(): T { - Mockito.any() - return uninitialized() - } - - @Suppress("Unchecked_Cast") - fun uninitialized(): T = null as T -} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/TestBaseWithProfile.kt b/app/src/test/java/info/nightscout/androidaps/TestBaseWithProfile.kt deleted file mode 100644 index 194a53c0d4..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/TestBaseWithProfile.kt +++ /dev/null @@ -1,178 +0,0 @@ -package info.nightscout.androidaps - -import android.content.Context -import dagger.android.AndroidInjector -import dagger.android.HasAndroidInjector -import info.nightscout.core.extensions.pureProfileFromJson -import info.nightscout.core.profile.ProfileSealed -import info.nightscout.core.utils.fabric.FabricPrivacy -import info.nightscout.database.entities.EffectiveProfileSwitch -import info.nightscout.database.entities.embedments.InsulinConfiguration -import info.nightscout.implementation.profile.ProfileStoreObject -import info.nightscout.interfaces.Config -import info.nightscout.interfaces.iob.IobCobCalculator -import info.nightscout.interfaces.plugin.ActivePlugin -import info.nightscout.interfaces.profile.ProfileFunction -import info.nightscout.interfaces.profile.ProfileStore -import info.nightscout.rx.bus.RxBus -import info.nightscout.shared.interfaces.ResourceHelper -import info.nightscout.shared.utils.DateUtil -import org.json.JSONObject -import org.junit.jupiter.api.BeforeEach -import org.mockito.ArgumentMatchers.anyDouble -import org.mockito.ArgumentMatchers.anyInt -import org.mockito.ArgumentMatchers.anyString -import org.mockito.Mock -import org.mockito.Mockito -import org.mockito.Mockito.`when` -import org.mockito.invocation.InvocationOnMock - -@Suppress("SpellCheckingInspection") -open class TestBaseWithProfile : TestBase() { - - @Mock lateinit var activePluginProvider: ActivePlugin - @Mock lateinit var rh: ResourceHelper - @Mock lateinit var iobCobCalculator: IobCobCalculator - @Mock lateinit var fabricPrivacy: FabricPrivacy - @Mock lateinit var profileFunction: ProfileFunction - @Mock lateinit var config: Config - @Mock lateinit var context: Context - - lateinit var dateUtil: DateUtil - val rxBus = RxBus(aapsSchedulers, aapsLogger) - - val profileInjector = HasAndroidInjector { AndroidInjector { } } - - private lateinit var validProfileJSON: String - lateinit var validProfile: ProfileSealed.Pure - lateinit var effectiveProfileSwitch: EffectiveProfileSwitch - - @Suppress("PropertyName") val TESTPROFILENAME = "someProfile" - - @BeforeEach - fun prepareMock() { - validProfileJSON = "{\"dia\":\"5\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"30\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"3\"}," + - "{\"time\":\"2:00\",\"value\":\"3.4\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"4.5\"}]," + - "\"target_high\":[{\"time\":\"00:00\",\"value\":\"7\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}" - dateUtil = Mockito.spy(DateUtil(context)) - `when`(dateUtil.now()).thenReturn(1656358822000) - validProfile = ProfileSealed.Pure(pureProfileFromJson(JSONObject(validProfileJSON), dateUtil)!!) - effectiveProfileSwitch = EffectiveProfileSwitch( - timestamp = dateUtil.now(), - basalBlocks = validProfile.basalBlocks, - isfBlocks = validProfile.isfBlocks, - icBlocks = validProfile.icBlocks, - targetBlocks = validProfile.targetBlocks, - glucoseUnit = EffectiveProfileSwitch.GlucoseUnit.MMOL, - originalProfileName = "", - originalCustomizedName = "", - originalTimeshift = 0, - originalPercentage = 100, - originalDuration = 0, - originalEnd = 0, - insulinConfiguration = InsulinConfiguration("", 0, 0) - ) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - String.format(rh.gs(string), arg1) - }.`when`(rh).gs(anyInt(), anyInt()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - String.format(rh.gs(string), arg1) - }.`when`(rh).gs(anyInt(), anyDouble()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - String.format(rh.gs(string), arg1) - }.`when`(rh).gs(anyInt(), anyString()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - String.format(rh.gs(string), arg1, arg2) - }.`when`(rh).gs(anyInt(), anyString(), anyString()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - String.format(rh.gs(string), arg1, arg2) - }.`when`(rh).gs(anyInt(), anyString(), anyInt()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - String.format(rh.gs(string), arg1, arg2) - }.`when`(rh).gs(anyInt(), anyDouble(), anyString()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - String.format(rh.gs(string), arg1, arg2) - }.`when`(rh).gs(anyInt(), anyDouble(), anyInt()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - String.format(rh.gs(string), arg1, arg2) - }.`when`(rh).gs(anyInt(), anyInt(), anyInt()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - String.format(rh.gs(string), arg1, arg2) - }.`when`(rh).gs(anyInt(), anyInt(), anyString()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - val arg3 = invocation.getArgument(3) - String.format(rh.gs(string), arg1, arg2, arg3) - }.`when`(rh).gs(anyInt(), anyInt(), anyInt(), anyString()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - val arg3 = invocation.getArgument(3) - String.format(rh.gs(string), arg1, arg2, arg3) - }.`when`(rh).gs(anyInt(), anyInt(), anyString(), anyString()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - val arg3 = invocation.getArgument(3) - String.format(rh.gs(string), arg1, arg2, arg3) - }.`when`(rh).gs(anyInt(), anyDouble(), anyInt(), anyString()) - - Mockito.doAnswer { invocation: InvocationOnMock -> - val string = invocation.getArgument(0) - val arg1 = invocation.getArgument(1) - val arg2 = invocation.getArgument(2) - val arg3 = invocation.getArgument(3) - String.format(rh.gs(string), arg1, arg2, arg3) - }.`when`(rh).gs(anyInt(), anyString(), anyInt(), anyString()) - - } - - fun getValidProfileStore(): ProfileStore { - val json = JSONObject() - val store = JSONObject() - store.put(TESTPROFILENAME, JSONObject(validProfileJSON)) - json.put("defaultProfile", TESTPROFILENAME) - json.put("store", store) - return ProfileStoreObject(profileInjector, json, dateUtil) - } -} diff --git a/app/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt b/app/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt deleted file mode 100644 index af18cd7321..0000000000 --- a/app/src/test/java/info/nightscout/androidaps/TestPumpPlugin.kt +++ /dev/null @@ -1,72 +0,0 @@ -package info.nightscout.androidaps - -import dagger.android.HasAndroidInjector -import info.nightscout.interfaces.profile.Profile -import info.nightscout.interfaces.pump.DetailedBolusInfo -import info.nightscout.interfaces.pump.Pump -import info.nightscout.interfaces.pump.PumpEnactResult -import info.nightscout.interfaces.pump.PumpSync -import info.nightscout.interfaces.pump.defs.ManufacturerType -import info.nightscout.interfaces.pump.defs.PumpDescription -import info.nightscout.interfaces.pump.defs.PumpType -import info.nightscout.interfaces.utils.TimeChangeType -import org.json.JSONObject - -@Suppress("MemberVisibilityCanBePrivate") -class TestPumpPlugin(val injector: HasAndroidInjector) : Pump { - - var connected = false - var isProfileSet = true - - override fun isConnected() = connected - override fun isConnecting() = false - override fun isHandshakeInProgress() = false - val lastData = 0L - - val baseBasal = 0.0 - override val pumpDescription = PumpDescription() - - override fun isInitialized(): Boolean = true - override fun isSuspended(): Boolean = false - override fun isBusy(): Boolean = false - override fun connect(reason: String) { - connected = true - } - - override fun disconnect(reason: String) { - connected = false - } - - override fun stopConnecting() { - connected = false - } - - override fun waitForDisconnectionInSeconds(): Int = 0 - override fun getPumpStatus(reason: String) {} - override fun setNewBasalProfile(profile: Profile): PumpEnactResult = PumpEnactResult(injector) - override fun isThisProfileSet(profile: Profile): Boolean = isProfileSet - override fun lastDataTime(): Long = lastData - override val baseBasalRate: Double = baseBasal - override val reservoirLevel: Double = 0.0 - override val batteryLevel: Int = 0 - override fun deliverTreatment(detailedBolusInfo: DetailedBolusInfo): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun stopBolusDelivering() {} - override fun setTempBasalAbsolute(absoluteRate: Double, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = - PumpEnactResult(injector).success(true) - - override fun setTempBasalPercent(percent: Int, durationInMinutes: Int, profile: Profile, enforceNew: Boolean, tbrType: PumpSync.TemporaryBasalType): PumpEnactResult = - PumpEnactResult(injector).success(true) - - override fun setExtendedBolus(insulin: Double, durationInMinutes: Int): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelTempBasal(enforceNew: Boolean): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun cancelExtendedBolus(): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun getJSONStatus(profile: Profile, profileName: String, version: String): JSONObject = JSONObject() - override fun manufacturer(): ManufacturerType = ManufacturerType.AAPS - override fun model(): PumpType = PumpType.GENERIC_AAPS - override fun serialNumber(): String = "1" - override fun shortStatus(veryShort: Boolean): String = "" - override val isFakingTempsByExtendedBoluses: Boolean = false - override fun loadTDDs(): PumpEnactResult = PumpEnactResult(injector).success(true) - override fun canHandleDST(): Boolean = true - override fun timezoneOrDSTChanged(timeChangeType: TimeChangeType) {} -} \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/aps/loop/LoopPluginTest.kt b/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt similarity index 72% rename from app/src/test/java/info/nightscout/androidaps/plugins/aps/loop/LoopPluginTest.kt rename to app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt index 06d7be6bb6..b6ed18b582 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/aps/loop/LoopPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/aps/loop/LoopPluginTest.kt @@ -1,10 +1,9 @@ -package info.nightscout.androidaps.plugins.aps.loop +package info.nightscout.plugins.aps.loop import android.app.NotificationManager import android.content.Context import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.TestBase import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.ApsMode @@ -20,14 +19,13 @@ import info.nightscout.interfaces.pump.defs.PumpDescription import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.receivers.ReceiverStatusStore import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.plugins.aps.loop.LoopFragment -import info.nightscout.plugins.aps.loop.LoopPlugin import info.nightscout.pump.virtual.VirtualPumpPlugin import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP import info.nightscout.shared.utils.DateUtil -import org.junit.Assert +import info.nightscout.sharedtests.TestBase +import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -57,12 +55,14 @@ class LoopPluginTest : TestBase() { private lateinit var loopPlugin: LoopPlugin - val injector = HasAndroidInjector { AndroidInjector { } } + private val injector = HasAndroidInjector { AndroidInjector { } } @BeforeEach fun prepareMock() { - loopPlugin = LoopPlugin(injector, aapsLogger, aapsSchedulers, rxBus, sp, config, - constraintChecker, rh, profileFunction, context, commandQueue, activePlugin, virtualPumpPlugin, iobCobCalculator, receiverStatusStore, fabricPrivacy, dateUtil, uel, - repository, runningConfiguration, uiInteraction) + loopPlugin = LoopPlugin( + injector, aapsLogger, aapsSchedulers, rxBus, sp, config, + constraintChecker, rh, profileFunction, context, commandQueue, activePlugin, virtualPumpPlugin, iobCobCalculator, receiverStatusStore, fabricPrivacy, dateUtil, uel, + repository, runningConfiguration, uiInteraction + ) `when`(activePlugin.activePump).thenReturn(virtualPumpPlugin) `when`(context.getSystemService(Context.NOTIFICATION_SERVICE)).thenReturn(notificationManager) } @@ -74,28 +74,28 @@ class LoopPluginTest : TestBase() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_aps_mode, ApsMode.OPEN.name)).thenReturn(ApsMode.CLOSED.name) val pumpDescription = PumpDescription() `when`(virtualPumpPlugin.pumpDescription).thenReturn(pumpDescription) - Assert.assertEquals(LoopFragment::class.java.name, loopPlugin.pluginDescription.fragmentClass) - Assert.assertEquals(PluginType.LOOP, loopPlugin.getType()) - Assert.assertEquals("Loop", loopPlugin.name) - Assert.assertEquals("LOOP", loopPlugin.nameShort) - Assert.assertEquals(true, loopPlugin.hasFragment()) - Assert.assertEquals(true, loopPlugin.showInList(PluginType.LOOP)) - Assert.assertEquals(info.nightscout.plugins.aps.R.xml.pref_loop.toLong(), loopPlugin.preferencesId.toLong()) + Assertions.assertEquals(LoopFragment::class.java.name, loopPlugin.pluginDescription.fragmentClass) + Assertions.assertEquals(PluginType.LOOP, loopPlugin.getType()) + Assertions.assertEquals("Loop", loopPlugin.name) + Assertions.assertEquals("LOOP", loopPlugin.nameShort) + Assertions.assertEquals(true, loopPlugin.hasFragment()) + Assertions.assertEquals(true, loopPlugin.showInList(PluginType.LOOP)) + Assertions.assertEquals(info.nightscout.plugins.aps.R.xml.pref_loop.toLong(), loopPlugin.preferencesId.toLong()) // Plugin is disabled by default - Assert.assertEquals(false, loopPlugin.isEnabled()) + Assertions.assertEquals(false, loopPlugin.isEnabled()) loopPlugin.setPluginEnabled(PluginType.LOOP, true) - Assert.assertEquals(true, loopPlugin.isEnabled()) + Assertions.assertEquals(true, loopPlugin.isEnabled()) // No temp basal capable pump should disable plugin virtualPumpPlugin.pumpDescription.isTempBasalCapable = false - Assert.assertEquals(false, loopPlugin.isEnabled()) + Assertions.assertEquals(false, loopPlugin.isEnabled()) virtualPumpPlugin.pumpDescription.isTempBasalCapable = true // Fragment is hidden by default - Assert.assertEquals(false, loopPlugin.isFragmentVisible()) + Assertions.assertEquals(false, loopPlugin.isFragmentVisible()) loopPlugin.setFragmentVisible(PluginType.LOOP, true) - Assert.assertEquals(true, loopPlugin.isFragmentVisible()) + Assertions.assertEquals(true, loopPlugin.isFragmentVisible()) } /* *********** not working @@ -118,7 +118,7 @@ class LoopPluginTest : TestBase() { MockedLoopPlugin mockedLoopPlugin = new MockedLoopPlugin(); Treatment t = new Treatment(); bus.post(new EventTreatmentChange(t)); - Assert.assertEquals(true, mockedLoopPlugin.invokeCalled); + Assertions.assertEquals(true, mockedLoopPlugin.invokeCalled); } */ } \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/configBuilder/ConfigBuilderPluginTest.kt b/app/src/test/java/info/nightscout/plugins/configBuilder/ConfigBuilderPluginTest.kt similarity index 89% rename from app/src/test/java/info/nightscout/androidaps/plugins/configBuilder/ConfigBuilderPluginTest.kt rename to app/src/test/java/info/nightscout/plugins/configBuilder/ConfigBuilderPluginTest.kt index 82c4e31d90..3013ce8090 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/configBuilder/ConfigBuilderPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/configBuilder/ConfigBuilderPluginTest.kt @@ -1,8 +1,7 @@ -package info.nightscout.androidaps.plugins.configBuilder +package info.nightscout.plugins.configBuilder import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.TestBase import info.nightscout.configuration.configBuilder.ConfigBuilderPlugin import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.plugin.ActivePlugin @@ -12,6 +11,7 @@ import info.nightscout.interfaces.ui.UiInteraction import info.nightscout.rx.bus.RxBus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP +import info.nightscout.sharedtests.TestBase import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -28,7 +28,7 @@ class ConfigBuilderPluginTest : TestBase() { private lateinit var configBuilderPlugin: ConfigBuilderPlugin - val injector = HasAndroidInjector { AndroidInjector { } } + private val injector = HasAndroidInjector { AndroidInjector { } } @Test fun dummy() { diff --git a/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt b/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt similarity index 96% rename from app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt rename to app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt index 0b8852a64a..22b030152a 100644 --- a/app/src/test/java/info/nightscout/androidaps/interfaces/ConstraintsCheckerTest.kt +++ b/app/src/test/java/info/nightscout/plugins/constraints/ConstraintsCheckerTest.kt @@ -1,9 +1,7 @@ -package info.nightscout.androidaps.interfaces +package info.nightscout.plugins.constraints import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.HardLimitsMock -import info.nightscout.androidaps.TestBaseWithProfile import info.nightscout.androidaps.danar.DanaRPlugin import info.nightscout.androidaps.implementations.ConfigImpl import info.nightscout.androidaps.insight.database.InsightDatabase @@ -18,7 +16,6 @@ import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.constraints.Objectives import info.nightscout.interfaces.maintenance.PrefFileListProvider -import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profile.Instantiator @@ -31,11 +28,9 @@ import info.nightscout.interfaces.pump.defs.PumpDescription import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.stats.TddCalculator import info.nightscout.interfaces.ui.UiInteraction -import info.nightscout.interfaces.utils.HardLimits import info.nightscout.plugins.aps.openAPSAMA.OpenAPSAMAPlugin import info.nightscout.plugins.aps.openAPSSMB.OpenAPSSMBPlugin import info.nightscout.plugins.aps.openAPSSMBDynamicISF.OpenAPSSMBDynamicISFPlugin -import info.nightscout.plugins.constraints.ConstraintsImpl import info.nightscout.plugins.constraints.objectives.ObjectivesPlugin import info.nightscout.plugins.constraints.objectives.objectives.Objective import info.nightscout.plugins.constraints.safety.SafetyPlugin @@ -45,7 +40,7 @@ import info.nightscout.pump.dana.DanaPump import info.nightscout.pump.dana.R import info.nightscout.pump.dana.database.DanaHistoryDatabase import info.nightscout.pump.virtual.VirtualPumpPlugin -import info.nightscout.shared.sharedPreferences.SP +import info.nightscout.sharedtests.TestBaseWithProfile import info.nightscout.source.GlimpPlugin import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach @@ -58,9 +53,7 @@ import org.mockito.Mockito.`when` */ class ConstraintsCheckerTest : TestBaseWithProfile() { - @Mock lateinit var activePlugin: ActivePlugin @Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin - @Mock lateinit var sp: SP @Mock lateinit var commandQueue: CommandQueue @Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage @Mock lateinit var temporaryBasalStorage: TemporaryBasalStorage @@ -78,7 +71,6 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { @Mock lateinit var bgQualityCheck: BgQualityCheck @Mock lateinit var tddCalculator: TddCalculator - private lateinit var hardLimits: HardLimits private lateinit var danaPump: DanaPump private lateinit var insightDbHelper: InsightDbHelper private lateinit var constraintChecker: ConstraintsImpl @@ -141,18 +133,18 @@ class ConstraintsCheckerTest : TestBaseWithProfile() { `when`(sp.getString(R.string.key_danar_bt_name, "")).thenReturn("") //SafetyPlugin - `when`(activePlugin.activePump).thenReturn(virtualPumpPlugin) constraintChecker = ConstraintsImpl(activePlugin) val glucoseStatusProvider = GlucoseStatusProviderImpl(aapsLogger = aapsLogger, iobCobCalculator = iobCobCalculator, dateUtil = dateUtil) - hardLimits = HardLimitsMock(sp, rh) insightDbHelper = InsightDbHelper(insightDatabaseDao) danaPump = DanaPump(aapsLogger, sp, dateUtil, instantiator) objectivesPlugin = ObjectivesPlugin(injector, aapsLogger, rh, activePlugin, sp, config) comboPlugin = ComboPlugin(injector, aapsLogger, rxBus, rh, profileFunction, sp, commandQueue, pumpSync, dateUtil, ruffyScripter, uiInteraction) - danaRPlugin = DanaRPlugin(injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePlugin, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync, - uiInteraction, danaHistoryDatabase) + danaRPlugin = DanaRPlugin( + injector, aapsLogger, aapsSchedulers, rxBus, context, rh, constraintChecker, activePlugin, sp, commandQueue, danaPump, dateUtil, fabricPrivacy, pumpSync, + uiInteraction, danaHistoryDatabase + ) danaRSPlugin = info.nightscout.pump.danars.DanaRSPlugin( injector, diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenancePluginTest.kt b/app/src/test/java/info/nightscout/plugins/general/maintenance/MaintenancePluginTest.kt similarity index 79% rename from app/src/test/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenancePluginTest.kt rename to app/src/test/java/info/nightscout/plugins/general/maintenance/MaintenancePluginTest.kt index 5fd1f1f24b..473eddd5e3 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/general/maintenance/MaintenancePluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/general/maintenance/MaintenancePluginTest.kt @@ -1,8 +1,7 @@ -package info.nightscout.androidaps.plugins.general.maintenance +package info.nightscout.plugins.general.maintenance import android.content.Context import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.TestBase import info.nightscout.configuration.maintenance.MaintenancePlugin import info.nightscout.interfaces.Config import info.nightscout.interfaces.logging.LoggerUtils @@ -10,7 +9,8 @@ import info.nightscout.interfaces.maintenance.PrefFileListProvider import info.nightscout.interfaces.nsclient.NSSettingsStatus import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP -import org.junit.Assert +import info.nightscout.sharedtests.TestBase +import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -40,11 +40,11 @@ class MaintenancePluginTest : TestBase() { @Test fun logFilesTest() { var logs = sut.getLogFiles(2) - Assert.assertEquals(2, logs.size) - Assert.assertEquals("AndroidAPS.log", logs[0].name) - Assert.assertEquals("AndroidAPS.2018-01-03_01-01-00.1.zip", logs[1].name) + Assertions.assertEquals(2, logs.size) + Assertions.assertEquals("AndroidAPS.log", logs[0].name) + Assertions.assertEquals("AndroidAPS.2018-01-03_01-01-00.1.zip", logs[1].name) logs = sut.getLogFiles(10) - Assert.assertEquals(4, logs.size) + Assertions.assertEquals(4, logs.size) } @Test @@ -53,7 +53,7 @@ class MaintenancePluginTest : TestBase() { val name = "AndroidAPS.log.zip" var zipFile = File("build/$name") zipFile = sut.zipLogs(zipFile, logs) - Assert.assertTrue(zipFile.exists()) - Assert.assertTrue(zipFile.isFile) + Assertions.assertTrue(zipFile.exists()) + Assertions.assertTrue(zipFile.isFile) } } \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/safety/SafetyPluginTest.kt b/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt similarity index 97% rename from app/src/test/java/info/nightscout/androidaps/plugins/safety/SafetyPluginTest.kt rename to app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt index 6ce0cd1929..73071d01ec 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/safety/SafetyPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/safety/SafetyPluginTest.kt @@ -1,9 +1,7 @@ -package info.nightscout.androidaps.plugins.safety +package info.nightscout.plugins.safety import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.HardLimitsMock -import info.nightscout.androidaps.TestBaseWithProfile import info.nightscout.database.impl.AppRepository import info.nightscout.interfaces.ApsMode import info.nightscout.interfaces.Constants @@ -11,7 +9,6 @@ import info.nightscout.interfaces.bgQualityCheck.BgQualityCheck import info.nightscout.interfaces.constraints.Constraint import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.iob.GlucoseStatusProvider -import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.PluginType import info.nightscout.interfaces.profiling.Profiler import info.nightscout.interfaces.pump.defs.PumpDescription @@ -22,7 +19,7 @@ import info.nightscout.plugins.aps.openAPSAMA.OpenAPSAMAPlugin import info.nightscout.plugins.aps.openAPSSMB.OpenAPSSMBPlugin import info.nightscout.plugins.constraints.safety.SafetyPlugin import info.nightscout.pump.virtual.VirtualPumpPlugin -import info.nightscout.shared.sharedPreferences.SP +import info.nightscout.sharedtests.TestBaseWithProfile import info.nightscout.source.GlimpPlugin import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach @@ -32,9 +29,7 @@ import org.mockito.Mockito.`when` class SafetyPluginTest : TestBaseWithProfile() { - @Mock lateinit var sp: SP @Mock lateinit var constraintChecker: Constraints - @Mock lateinit var activePlugin: ActivePlugin @Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin @Mock lateinit var glimpPlugin: GlimpPlugin @Mock lateinit var profiler: Profiler @@ -44,7 +39,6 @@ class SafetyPluginTest : TestBaseWithProfile() { @Mock lateinit var uiInteraction: UiInteraction @Mock lateinit var tddCalculator: TddCalculator - private lateinit var hardLimits: HardLimits private lateinit var safetyPlugin: SafetyPlugin private lateinit var openAPSAMAPlugin: OpenAPSAMAPlugin private lateinit var openAPSSMBPlugin: OpenAPSSMBPlugin @@ -78,7 +72,6 @@ class SafetyPluginTest : TestBaseWithProfile() { `when`(activePlugin.activePump).thenReturn(virtualPumpPlugin) `when`(virtualPumpPlugin.pumpDescription).thenReturn(pumpDescription) `when`(config.APS).thenReturn(true) - hardLimits = HardLimitsMock(sp, rh) safetyPlugin = SafetyPlugin(injector, aapsLogger, rh, sp, rxBus, constraintChecker, activePlugin, hardLimits, config, iobCobCalculator, dateUtil, uiInteraction) openAPSAMAPlugin = OpenAPSAMAPlugin( injector, aapsLogger, rxBus, constraintChecker, rh, profileFunction, context, activePlugin, iobCobCalculator, hardLimits, profiler, fabricPrivacy, diff --git a/app/src/test/java/info/nightscout/androidaps/plugins/sensitivity/AbstractSensitivityPluginTest.kt b/app/src/test/java/info/nightscout/plugins/sensitivity/AbstractSensitivityPluginTest.kt similarity index 67% rename from app/src/test/java/info/nightscout/androidaps/plugins/sensitivity/AbstractSensitivityPluginTest.kt rename to app/src/test/java/info/nightscout/plugins/sensitivity/AbstractSensitivityPluginTest.kt index f44cc5b90f..250d142408 100644 --- a/app/src/test/java/info/nightscout/androidaps/plugins/sensitivity/AbstractSensitivityPluginTest.kt +++ b/app/src/test/java/info/nightscout/plugins/sensitivity/AbstractSensitivityPluginTest.kt @@ -1,8 +1,7 @@ -package info.nightscout.androidaps.plugins.sensitivity +package info.nightscout.plugins.sensitivity import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.TestBase import info.nightscout.interfaces.aps.AutosensDataStore import info.nightscout.interfaces.aps.AutosensResult import info.nightscout.interfaces.aps.Sensitivity @@ -11,8 +10,9 @@ import info.nightscout.rx.logging.AAPSLogger import info.nightscout.sensitivity.AbstractSensitivityPlugin import info.nightscout.shared.interfaces.ResourceHelper import info.nightscout.shared.sharedPreferences.SP +import info.nightscout.sharedtests.TestBase import org.json.JSONObject -import org.junit.Assert +import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.mockito.Mock @@ -22,7 +22,8 @@ class AbstractSensitivityPluginTest : TestBase() { @Mock lateinit var rh: ResourceHelper @Mock lateinit var sp: SP - private inner class SensitivityTestClass(pluginDescription: PluginDescription, aapsLogger: AAPSLogger, rh: ResourceHelper, sp: SP) : AbstractSensitivityPlugin(pluginDescription, HasAndroidInjector { AndroidInjector { } }, aapsLogger, rh, sp) { + private inner class SensitivityTestClass(pluginDescription: PluginDescription, aapsLogger: AAPSLogger, rh: ResourceHelper, sp: SP) : + AbstractSensitivityPlugin(pluginDescription, HasAndroidInjector { AndroidInjector { } }, aapsLogger, rh, sp) { override fun detectSensitivity(ads: AutosensDataStore, fromTime: Long, toTime: Long): AutosensResult { return AutosensResult() @@ -43,17 +44,13 @@ class AbstractSensitivityPluginTest : TestBase() { @Test fun fillResultTest() { val sut = SensitivityTestClass(pluginDescription, aapsLogger, rh, sp) - var ar = sut.fillResult(1.0, 1.0, "1", - "1.2", "1", 12, 0.7, 1.2) - Assert.assertEquals(1.0, ar.ratio, 0.01) - ar = sut.fillResult(1.2, 1.0, "1", - "1.2", "1", 40, 0.7, 1.2) - Assert.assertEquals(1.16, ar.ratio, 0.01) - ar = sut.fillResult(1.2, 1.0, "1", - "1.2", "1", 50, 0.7, 1.2) - Assert.assertEquals(1.2, ar.ratio, 0.01) - ar = sut.fillResult(1.2, 1.0, "1", - "1.2", "1", 50, 0.7, 1.1) - Assert.assertEquals(1.1, ar.ratio, 0.01) + var ar = sut.fillResult(1.0, 1.0, "1", "1.2", "1", 12, 0.7, 1.2) + Assertions.assertEquals(1.0, ar.ratio, 0.01) + ar = sut.fillResult(1.2, 1.0, "1", "1.2", "1", 40, 0.7, 1.2) + Assertions.assertEquals(1.16, ar.ratio, 0.01) + ar = sut.fillResult(1.2, 1.0, "1", "1.2", "1", 50, 0.7, 1.2) + Assertions.assertEquals(1.2, ar.ratio, 0.01) + ar = sut.fillResult(1.2, 1.0, "1", "1.2", "1", 50, 0.7, 1.1) + Assertions.assertEquals(1.1, ar.ratio, 0.01) } } \ No newline at end of file diff --git a/app/src/test/java/info/nightscout/androidaps/pump/PumpEnactResultTest.kt b/app/src/test/java/info/nightscout/pump/PumpEnactResultTest.kt similarity index 98% rename from app/src/test/java/info/nightscout/androidaps/pump/PumpEnactResultTest.kt rename to app/src/test/java/info/nightscout/pump/PumpEnactResultTest.kt index e34b5b96e1..7a0de59162 100644 --- a/app/src/test/java/info/nightscout/androidaps/pump/PumpEnactResultTest.kt +++ b/app/src/test/java/info/nightscout/pump/PumpEnactResultTest.kt @@ -1,12 +1,12 @@ -package info.nightscout.androidaps.pump +package info.nightscout.pump import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector -import info.nightscout.androidaps.TestBaseWithProfile import info.nightscout.core.pump.toHtml import info.nightscout.interfaces.pump.PumpEnactResult import info.nightscout.plugins.aps.loop.extensions.json import info.nightscout.pump.virtual.extensions.toText +import info.nightscout.sharedtests.TestBaseWithProfile import org.json.JSONObject import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach diff --git a/app/src/test/java/info/nightscout/androidaps/data/QuickWizardTest.kt b/core/main/src/test/java/info/nightscout/core/wizard/QuickWizardTest.kt similarity index 73% rename from app/src/test/java/info/nightscout/androidaps/data/QuickWizardTest.kt rename to core/main/src/test/java/info/nightscout/core/wizard/QuickWizardTest.kt index f6a15cb1fd..a9c606d04c 100644 --- a/app/src/test/java/info/nightscout/androidaps/data/QuickWizardTest.kt +++ b/core/main/src/test/java/info/nightscout/core/wizard/QuickWizardTest.kt @@ -1,15 +1,13 @@ -package info.nightscout.androidaps.data +package info.nightscout.core.wizard import dagger.android.AndroidInjector import dagger.android.HasAndroidInjector import info.nightscout.androidaps.TestBase -import info.nightscout.core.wizard.QuickWizard -import info.nightscout.core.wizard.QuickWizardEntry import info.nightscout.interfaces.aps.Loop import info.nightscout.interfaces.profile.ProfileFunction import info.nightscout.shared.sharedPreferences.SP import org.json.JSONArray -import org.junit.Assert +import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.mockito.Mock @@ -28,8 +26,10 @@ class QuickWizardTest : TestBase() { private var array: JSONArray = JSONArray("[$data1,$data2]") class MockedTime : QuickWizardEntry.Time() { + override fun secondsFromMidnight() = 0 } + private val mockedTime = MockedTime() private val injector = HasAndroidInjector { @@ -47,49 +47,54 @@ class QuickWizardTest : TestBase() { private lateinit var quickWizard: QuickWizard @BeforeEach - fun mock() { - + fun setup() { `when`(sp.getString(info.nightscout.core.utils.R.string.key_quickwizard, "[]")).thenReturn("[]") quickWizard = QuickWizard(sp, injector) } - @Test fun setDataTest() { + @Test + fun setDataTest() { quickWizard.setData(array) - Assert.assertEquals(2, quickWizard.size()) + Assertions.assertEquals(2, quickWizard.size()) } - @Test fun test() { + @Test + fun test() { quickWizard.setData(array) - Assert.assertEquals("Lunch", quickWizard[1].buttonText()) + Assertions.assertEquals("Lunch", quickWizard[1].buttonText()) } - @Test fun active() { + @Test + fun active() { quickWizard.setData(array) val e: QuickWizardEntry = quickWizard.getActive()!! - Assert.assertEquals(36.0, e.carbs().toDouble(), 0.01) + Assertions.assertEquals(36.0, e.carbs().toDouble(), 0.01) quickWizard.remove(0) quickWizard.remove(0) - Assert.assertNull(quickWizard.getActive()) + Assertions.assertNull(quickWizard.getActive()) } - @Test fun newEmptyItemTest() { - Assert.assertNotNull(quickWizard.newEmptyItem()) + @Test + fun newEmptyItemTest() { + Assertions.assertNotNull(quickWizard.newEmptyItem()) } - @Test fun addOrUpdate() { + @Test + fun addOrUpdate() { quickWizard.setData(array) - Assert.assertEquals(2, quickWizard.size()) + Assertions.assertEquals(2, quickWizard.size()) quickWizard.addOrUpdate(quickWizard.newEmptyItem()) - Assert.assertEquals(3, quickWizard.size()) + Assertions.assertEquals(3, quickWizard.size()) val q: QuickWizardEntry = quickWizard.newEmptyItem() q.position = 0 quickWizard.addOrUpdate(q) - Assert.assertEquals(3, quickWizard.size()) + Assertions.assertEquals(3, quickWizard.size()) } - @Test fun remove() { + @Test + fun remove() { quickWizard.setData(array) quickWizard.remove(0) - Assert.assertEquals(1, quickWizard.size()) + Assertions.assertEquals(1, quickWizard.size()) } } \ No newline at end of file diff --git a/plugins/constraints/build.gradle b/plugins/constraints/build.gradle index c668052c88..749665a0bb 100644 --- a/plugins/constraints/build.gradle +++ b/plugins/constraints/build.gradle @@ -10,6 +10,7 @@ apply from: "${project.rootDir}/core/main/android_module_dependencies.gradle" apply from: "${project.rootDir}/core/main/test_dependencies.gradle" apply from: "${project.rootDir}/core/main/allopen_dependencies.gradle" apply from: "${project.rootDir}/core/main/jacoco_global.gradle" + android { namespace 'info.nightscout.plugins.constraints' } @@ -24,5 +25,4 @@ dependencies { // Phone checker api 'com.scottyab:rootbeer-lib:0.1.0' - } \ No newline at end of file