kotlin-allopen, fixed tests

This commit is contained in:
Milos Kozak 2021-08-16 13:47:14 +02:00
parent 0af345e340
commit 4761a1a5ba
22 changed files with 89 additions and 21 deletions

2
.gitignore vendored
View file

@ -11,8 +11,6 @@ build/
.idea/*
!.idea/codeStyles/
full/
debug/
release/
app/com.crashlytics.settings.json
app/session_analytics.tap
.project

View file

@ -1,6 +1,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-allopen'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.hiya.jacoco-android'
apply plugin: 'com.google.firebase.crashlytics'
@ -13,6 +14,11 @@ repositories {
google()
}
allOpen {
// allows mocking for classes w/o directly opening them for release builds
annotation 'info.nightscout.androidaps.annotations.OpenForTesting'
}
def generateGitBuild = { ->
StringBuilder stringBuilder = new StringBuilder()
try {

View file

@ -12,6 +12,7 @@ import androidx.core.app.NotificationCompat
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.*
import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.data.DetailedBolusInfo
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.data.PumpEnactResult
@ -65,8 +66,9 @@ import javax.inject.Inject
import javax.inject.Singleton
import kotlin.math.abs
@OpenForTesting
@Singleton
open class LoopPlugin @Inject constructor(
class LoopPlugin @Inject constructor(
injector: HasAndroidInjector,
aapsLogger: AAPSLogger,
private val aapsSchedulers: AapsSchedulers,

View file

@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.aps.openAPSAMA
import android.content.Context
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.interfaces.Profile
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.ValueWrapper
@ -27,8 +28,9 @@ import org.json.JSONException
import javax.inject.Inject
import javax.inject.Singleton
@OpenForTesting
@Singleton
open class OpenAPSAMAPlugin @Inject constructor(
class OpenAPSAMAPlugin @Inject constructor(
injector: HasAndroidInjector,
aapsLogger: AAPSLogger,
private val rxBus: RxBusWrapper,

View file

@ -5,6 +5,7 @@ import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.ValueWrapper
import info.nightscout.androidaps.extensions.target
@ -27,8 +28,9 @@ import info.nightscout.androidaps.utils.sharedPreferences.SP
import javax.inject.Inject
import javax.inject.Singleton
@OpenForTesting
@Singleton
open class OpenAPSSMBPlugin @Inject constructor(
class OpenAPSSMBPlugin @Inject constructor(
injector: HasAndroidInjector,
aapsLogger: AAPSLogger,
private val rxBus: RxBusWrapper,

View file

@ -5,6 +5,7 @@ import android.os.StatFs
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.interfaces.Constraint
import info.nightscout.androidaps.interfaces.Constraints
import info.nightscout.androidaps.interfaces.PluginBase
@ -20,8 +21,9 @@ import info.nightscout.androidaps.utils.resources.ResourceHelper
import javax.inject.Inject
import javax.inject.Singleton
@OpenForTesting
@Singleton
open class StorageConstraintPlugin @Inject constructor(
class StorageConstraintPlugin @Inject constructor(
injector: HasAndroidInjector,
aapsLogger: AAPSLogger,
resourceHelper: ResourceHelper,

View file

@ -5,6 +5,7 @@ import androidx.collection.LongSparseArray
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.data.IobTotal
import info.nightscout.androidaps.data.MealData
import info.nightscout.androidaps.database.AppRepository
@ -42,8 +43,9 @@ import kotlin.math.floor
import kotlin.math.max
import kotlin.math.min
@OpenForTesting
@Singleton
open class IobCobCalculatorPlugin @Inject constructor(
class IobCobCalculatorPlugin @Inject constructor(
injector: HasAndroidInjector,
aapsLogger: AAPSLogger,
private val aapsSchedulers: AapsSchedulers,

View file

@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.sensitivity
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.extensions.isEPSEvent5minBack
@ -27,8 +28,9 @@ import javax.inject.Inject
import javax.inject.Singleton
import kotlin.math.roundToInt
@OpenForTesting
@Singleton
open class SensitivityAAPSPlugin @Inject constructor(
class SensitivityAAPSPlugin @Inject constructor(
injector: HasAndroidInjector,
aapsLogger: AAPSLogger,
resourceHelper: ResourceHelper,

View file

@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.sensitivity
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.extensions.isEPSEvent5minBack
@ -28,8 +29,9 @@ import javax.inject.Inject
import javax.inject.Singleton
import kotlin.math.roundToInt
@OpenForTesting
@Singleton
open class SensitivityOref1Plugin @Inject constructor(
class SensitivityOref1Plugin @Inject constructor(
injector: HasAndroidInjector,
aapsLogger: AAPSLogger,
resourceHelper: ResourceHelper,

View file

@ -4,6 +4,7 @@ import androidx.collection.LongSparseArray
import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.database.AppRepository
import info.nightscout.androidaps.database.entities.TherapyEvent
import info.nightscout.androidaps.extensions.isEPSEvent5minBack
@ -26,8 +27,9 @@ import javax.inject.Inject
import javax.inject.Singleton
import kotlin.math.roundToInt
@OpenForTesting
@Singleton
open class SensitivityWeightedAveragePlugin @Inject constructor(
class SensitivityWeightedAveragePlugin @Inject constructor(
injector: HasAndroidInjector,
aapsLogger: AAPSLogger,
resourceHelper: ResourceHelper,

View file

@ -9,6 +9,7 @@ import dagger.android.HasAndroidInjector
import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.BolusProgressHelperActivity
import info.nightscout.androidaps.activities.ErrorHelperActivity
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.data.DetailedBolusInfo
import info.nightscout.androidaps.data.ProfileSealed
import info.nightscout.androidaps.data.PumpEnactResult
@ -47,8 +48,9 @@ import java.util.*
import javax.inject.Inject
import javax.inject.Singleton
@OpenForTesting
@Singleton
open class CommandQueue @Inject constructor(
class CommandQueue @Inject constructor(
private val injector: HasAndroidInjector,
private val aapsLogger: AAPSLogger,
private val rxBus: RxBusWrapper,

View file

@ -49,6 +49,7 @@ buildscript {
// in the individual module build.gradle files
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
classpath 'com.hiya:jacoco-android:0.2'
modules {
module("org.jetbrains.trove4j:trove4j") {

View file

@ -2,6 +2,7 @@ apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlin-allopen'
apply plugin: 'com.hiya.jacoco-android'
apply from: 'core_dependencies.gradle'
@ -14,3 +15,7 @@ dependencies {
implementation project(':database')
}
allOpen {
// allows mocking for classes w/o directly opening them for release builds
annotation 'info.nightscout.androidaps.annotations.OpenForTesting'
}

View file

@ -0,0 +1,15 @@
package info.nightscout.androidaps.annotations
/**
* This is the actual annotation that makes the class open. Don't use it directly, only through [OpenForTesting]
* which has a NOOP replacement in production.
*/
@Target(AnnotationTarget.ANNOTATION_CLASS)
annotation class OpenClass
/**
* Annotate a class with [OpenForTesting] if it should be extendable for testing.
*/
@OpenClass
@Target(AnnotationTarget.CLASS)
annotation class OpenForTesting

View file

@ -1,6 +1,9 @@
package info.nightscout.androidaps.interfaces
open class PluginDescription {
import info.nightscout.androidaps.annotations.OpenForTesting
@OpenForTesting
class PluginDescription {
var mainType = PluginType.GENERAL
var fragmentClass: String? = null

View file

@ -1,5 +1,6 @@
package info.nightscout.androidaps.plugins.bus
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.events.Event
import info.nightscout.androidaps.utils.rx.AapsSchedulers
import io.reactivex.Observable
@ -7,8 +8,9 @@ import io.reactivex.subjects.PublishSubject
import javax.inject.Inject
import javax.inject.Singleton
@OpenForTesting
@Singleton
open class RxBusWrapper @Inject constructor(
class RxBusWrapper @Inject constructor(
val aapsSchedulers: AapsSchedulers
) {

View file

@ -1,5 +1,6 @@
package info.nightscout.androidaps.receivers
import info.nightscout.androidaps.annotations.OpenForTesting
import android.content.Context
import android.content.Intent
import info.nightscout.androidaps.events.EventChargingState
@ -8,6 +9,7 @@ import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import javax.inject.Inject
import javax.inject.Singleton
@OpenForTesting
@Singleton
class ReceiverStatusStore @Inject constructor(val context: Context, val rxBus: RxBusWrapper) {

View file

@ -2,6 +2,7 @@ package info.nightscout.androidaps.utils
import android.content.Context
import androidx.collection.LongSparseArray
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.utils.resources.ResourceHelper
import org.joda.time.DateTime
@ -26,8 +27,9 @@ import kotlin.math.abs
* The Class DateUtil. A simple wrapper around SimpleDateFormat to ease the handling of iso date string <-> date obj
* with TZ
*/
@OpenForTesting
@Singleton
open class DateUtil @Inject constructor(private val context: Context) {
class DateUtil @Inject constructor(private val context: Context) {
/**
* The date format in iso.

View file

@ -1,6 +1,7 @@
package info.nightscout.androidaps.utils
import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.interfaces.GlucoseUnit
import info.nightscout.androidaps.interfaces.Profile
@ -9,8 +10,9 @@ import info.nightscout.androidaps.utils.sharedPreferences.SP
import javax.inject.Inject
import javax.inject.Singleton
@OpenForTesting
@Singleton
open class DefaultValueHelper @Inject constructor(
class DefaultValueHelper @Inject constructor(
private val sp: SP,
private val profileFunction: ProfileFunction
) {

View file

@ -5,6 +5,7 @@ import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.google.firebase.ktx.Firebase
import info.nightscout.androidaps.annotations.OpenForTesting
import info.nightscout.androidaps.core.R
import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.LTag
@ -17,8 +18,9 @@ import javax.inject.Singleton
* to disable them and make calls from a potentially invalid singleton reference. This wrapper
* emulates the methods but ignores the request if the instance is null or invalid.
*/
@OpenForTesting
@Singleton
open class FabricPrivacy @Inject constructor(
class FabricPrivacy @Inject constructor(
private val aapsLogger: AAPSLogger,
private val sp: SP
) {

View file

@ -0,0 +1,8 @@
package info.nightscout.androidaps.annotations
/**
* Annotate a class with [OpenForTesting] if it should be extendable for testing.
* In production the class remains final.
*/
@Target(AnnotationTarget.CLASS)
annotation class OpenForTesting

View file

@ -1,9 +1,11 @@
package info.nightscout.androidaps.plugins.constraints.versionChecker
package info.nightscout.androidaps.plugins.contraints.versionChecker
import android.content.Context
import info.nightscout.androidaps.utils.buildHelper.ConfigImpl
import info.nightscout.androidaps.TestBase
import info.nightscout.androidaps.interfaces.Config
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtils
import info.nightscout.androidaps.receivers.ReceiverStatusStore
import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP
import org.junit.Assert.assertArrayEquals
@ -14,17 +16,18 @@ import org.mockito.Mock
class VersionCheckerUtilsKtTest : TestBase() {
lateinit var versionCheckerUtils: VersionCheckerUtils
private lateinit var versionCheckerUtils: VersionCheckerUtils
@Mock lateinit var sp: SP
@Mock lateinit var resourceHelper: ResourceHelper
@Mock lateinit var context: Context
val config = ConfigImpl()
@Mock lateinit var receiverStatusStore: ReceiverStatusStore
@Mock lateinit var config: Config
private val rxBus = RxBusWrapper(aapsSchedulers)
@Before fun setup() {
versionCheckerUtils = VersionCheckerUtils(aapsLogger, sp, resourceHelper, rxBus, config, context)
versionCheckerUtils = VersionCheckerUtils(aapsLogger, sp, resourceHelper, rxBus, config, context, receiverStatusStore)
}
@Test
@ -124,6 +127,7 @@ class VersionCheckerUtilsKtTest : TestBase() {
}
*/
@Suppress("SpellCheckingInspection")
@Test
fun findVersionMatchesRegularVersion() {
val buildGradle = """blabla