Make logger mockable

This commit is contained in:
Sylwester Zieliński
2023-06-16 16:21:05 +02:00
parent 2a66654c33
commit 19c18382aa
9 changed files with 61 additions and 13 deletions

View File

@@ -43,7 +43,7 @@ import kotlinx.coroutines.flow.onEach
import no.nordicsemi.android.analytics.AppAnalytics
import no.nordicsemi.android.analytics.ProfileOpenEvent
import no.nordicsemi.android.cgms.repository.CGMRepository
import no.nordicsemi.android.common.logger.NordicLogger
import no.nordicsemi.android.common.logger.LoggerLauncher
import no.nordicsemi.android.common.navigation.DestinationId
import no.nordicsemi.android.common.navigation.Navigator
import no.nordicsemi.android.csc.repository.CSCRepository
@@ -114,7 +114,7 @@ class HomeViewModel @Inject constructor(
}
fun openLogger() {
NordicLogger.launch(context, logger = null)
LoggerLauncher.launch(context)
}
fun logEvent(event: ProfileOpenEvent) {

View File

@@ -0,0 +1,10 @@
package no.nordicsemi.android.ui.view
import android.content.Context
import no.nordicsemi.android.common.logger.BlekLogger
import no.nordicsemi.android.common.logger.BlekLoggerAndLauncher
interface NordicLoggerFactory {
fun createNordicLogger(context: Context, profile: String?, key: String, name: String?): BlekLoggerAndLauncher
}

View File

@@ -0,0 +1,28 @@
package no.nordicsemi.android.ui.view
import android.content.Context
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import no.nordicsemi.android.common.logger.NordicBlekLogger
import no.nordicsemi.android.common.logger.BlekLogger
@Module
@InstallIn(SingletonComponent::class)
class UiModule {
@Provides
fun createLogger(): NordicLoggerFactory {
return object : NordicLoggerFactory {
override fun createNordicLogger(
context: Context,
profile: String?,
key: String,
name: String?,
): BlekLogger {
return NordicBlekLogger.create(context, profile, key, name)
}
}
}
}

View File

@@ -48,7 +48,6 @@ import no.nordicsemi.android.kotlin.ble.profile.csc.data.CSCData
import no.nordicsemi.android.kotlin.ble.profile.csc.data.WheelSize
import no.nordicsemi.android.kotlin.ble.profile.csc.data.WheelSizes
import no.nordicsemi.android.service.DisconnectAndStopEvent
import no.nordicsemi.android.service.OpenLoggerEvent
import no.nordicsemi.android.service.ServiceManager
import no.nordicsemi.android.ui.view.StringConst
import javax.inject.Inject

View File

@@ -41,7 +41,6 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import no.nordicsemi.android.common.logger.NordicBlekLogger
import no.nordicsemi.android.kotlin.ble.client.main.callback.BleGattClient
import no.nordicsemi.android.kotlin.ble.client.main.connect
import no.nordicsemi.android.kotlin.ble.client.main.service.BleGattServices
@@ -52,7 +51,7 @@ import no.nordicsemi.android.kotlin.ble.profile.battery.BatteryLevelParser
import no.nordicsemi.android.kotlin.ble.profile.csc.CSCDataParser
import no.nordicsemi.android.service.DEVICE_DATA
import no.nordicsemi.android.service.NotificationService
import no.nordicsemi.android.ui.view.StringConst
import no.nordicsemi.android.ui.view.NordicLoggerFactory
import java.util.*
import javax.inject.Inject

View File

@@ -49,7 +49,6 @@ import kotlinx.coroutines.launch
import no.nordicsemi.android.analytics.AppAnalytics
import no.nordicsemi.android.analytics.Profile
import no.nordicsemi.android.analytics.ProfileConnectedEvent
import no.nordicsemi.android.common.logger.NordicBlekLogger
import no.nordicsemi.android.common.navigation.NavigationResult
import no.nordicsemi.android.common.navigation.Navigator
import no.nordicsemi.android.gls.GlsDetailsDestinationId
@@ -68,6 +67,8 @@ import no.nordicsemi.android.kotlin.ble.client.main.service.BleGattServices
import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.common.logger.BlekLogger
import no.nordicsemi.android.common.logger.BlekLoggerAndLauncher
import no.nordicsemi.android.kotlin.ble.profile.battery.BatteryLevelParser
import no.nordicsemi.android.kotlin.ble.profile.gls.GlucoseMeasurementContextParser
import no.nordicsemi.android.kotlin.ble.profile.gls.GlucoseMeasurementParser
@@ -81,6 +82,7 @@ import no.nordicsemi.android.kotlin.ble.profile.gls.data.ResponseData
import no.nordicsemi.android.kotlin.ble.profile.racp.RACPOpCode
import no.nordicsemi.android.kotlin.ble.profile.racp.RACPResponseCode
import no.nordicsemi.android.toolbox.scanner.ScannerDestinationId
import no.nordicsemi.android.ui.view.NordicLoggerFactory
import no.nordicsemi.android.ui.view.StringConst
import java.util.*
import javax.inject.Inject
@@ -102,11 +104,12 @@ internal class GLSViewModel @Inject constructor(
private val context: Context,
private val navigationManager: Navigator,
private val analytics: AppAnalytics,
private val stringConst: StringConst
private val stringConst: StringConst,
private val loggerFactory: NordicLoggerFactory
) : ViewModel() {
internal lateinit var client: BleGattClient
private lateinit var logger: NordicBlekLogger
private lateinit var logger: BlekLoggerAndLauncher
internal lateinit var glucoseMeasurementCharacteristic: BleGattCharacteristic
internal lateinit var recordAccessControlPointCharacteristic: BleGattCharacteristic
@@ -168,7 +171,7 @@ internal class GLSViewModel @Inject constructor(
private fun startGattClient(device: ServerDevice) = viewModelScope.launch {
_state.value = _state.value.copy(deviceName = device.name)
logger = NordicBlekLogger.create(context, stringConst.APP_NAME, "GLS", device.address)
logger = loggerFactory.createNordicLogger(context, stringConst.APP_NAME, "GLS", device.address)
client = device.connect(context, logger = logger)

View File

@@ -33,6 +33,7 @@ import no.nordicsemi.android.kotlin.ble.core.data.BleGattConnectionStatus
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.gls.data.RequestStatus
import no.nordicsemi.android.ui.view.NordicLoggerFactory
import no.nordicsemi.android.ui.view.StringConst
import org.junit.After
import org.junit.Assert.assertEquals
@@ -41,7 +42,6 @@ import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.shadows.ShadowBluetoothGatt
/**
* Example local unit test, which will execute on the development machine (host).
@@ -94,7 +94,18 @@ internal class GLSViewModelTest {
@Before
fun before() {
runBlocking {
viewModel = spyk(GLSViewModel(context, navigator, analytics, stringConst))
viewModel = spyk(GLSViewModel(context, navigator, analytics, stringConst, object :
NordicLoggerFactory {
override fun createNordicLogger(
context: Context,
profile: String?,
key: String,
name: String?,
): NordicBlekLogger {
return logger
}
}))
glsServer = GlsServer(CoroutineScope(UnconfinedTestDispatcher()))
glsServer.start(spyk(), device)
}

View File

@@ -45,7 +45,6 @@ import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.kotlin.ble.profile.hrs.data.HRSData
import no.nordicsemi.android.service.DisconnectAndStopEvent
import no.nordicsemi.android.service.OpenLoggerEvent
import no.nordicsemi.android.service.ServiceManager
import no.nordicsemi.android.ui.view.StringConst
import javax.inject.Inject

View File

@@ -43,7 +43,6 @@ import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionState
import no.nordicsemi.android.kotlin.ble.core.data.GattConnectionStateWithStatus
import no.nordicsemi.android.service.DisconnectAndStopEvent
import no.nordicsemi.android.service.OpenLoggerEvent
import no.nordicsemi.android.service.ServiceManager
import no.nordicsemi.android.uart.data.ConfigurationDataSource
import no.nordicsemi.android.uart.data.MacroEol