Browse Source

Code clarity: use withTimeout with combination of runCatching instead of withTimeoutOrNull

pull/2596/head
Benoit Marty 6 months ago committed by Benoit Marty
parent
commit
4f320fd4f8
  1. 38
      libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt
  2. 36
      libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt

38
libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt

@ -29,7 +29,7 @@ import kotlinx.coroutines.CoroutineScope @@ -29,7 +29,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withTimeoutOrNull
import kotlinx.coroutines.withTimeout
import timber.log.Timber
import javax.inject.Inject
import kotlin.time.Duration.Companion.seconds
@ -72,22 +72,26 @@ class NotificationTest @Inject constructor( @@ -72,22 +72,26 @@ class NotificationTest @Inject constructor(
notificationClickHandler.state.first()
Timber.d("Notification clicked!")
}
val s = withTimeoutOrNull(30.seconds) {
job.join()
}
job.cancel()
if (s == null) {
notificationDisplayer.dismissDiagnosticNotification()
delegate.updateState(
description = stringProvider.getString(R.string.troubleshoot_notifications_test_display_notification_failure),
status = NotificationTroubleshootTestState.Status.Failure(false)
)
} else {
delegate.updateState(
description = stringProvider.getString(R.string.troubleshoot_notifications_test_display_notification_success),
status = NotificationTroubleshootTestState.Status.Success
)
}
runCatching {
withTimeout(30.seconds) {
job.join()
}
}.fold(
onSuccess = {
delegate.updateState(
description = stringProvider.getString(R.string.troubleshoot_notifications_test_display_notification_success),
status = NotificationTroubleshootTestState.Status.Success
)
},
onFailure = {
job.cancel()
notificationDisplayer.dismissDiagnosticNotification()
delegate.updateState(
description = stringProvider.getString(R.string.troubleshoot_notifications_test_display_notification_failure),
status = NotificationTroubleshootTestState.Status.Failure(false)
)
}
)
}.invokeOnCompletion {
// Ensure that the notification is cancelled when the screen is left
notificationDisplayer.dismissDiagnosticNotification()

36
libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt

@ -31,7 +31,7 @@ import kotlinx.coroutines.CoroutineScope @@ -31,7 +31,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withTimeoutOrNull
import kotlinx.coroutines.withTimeout
import timber.log.Timber
import javax.inject.Inject
import kotlin.time.Duration.Companion.seconds
@ -84,21 +84,25 @@ class PushLoopbackTest @Inject constructor( @@ -84,21 +84,25 @@ class PushLoopbackTest @Inject constructor(
job.cancel()
return
}
val result = withTimeoutOrNull(10.seconds) {
completable.await()
}
job.cancel()
if (result == null) {
delegate.updateState(
description = stringProvider.getString(R.string.troubleshoot_notifications_test_push_loop_back_failure_4),
status = NotificationTroubleshootTestState.Status.Failure(false)
)
} else {
delegate.updateState(
description = stringProvider.getString(R.string.troubleshoot_notifications_test_push_loop_back_success, result),
status = NotificationTroubleshootTestState.Status.Success
)
}
runCatching {
withTimeout(10.seconds) {
completable.await()
}
}.fold(
onSuccess = { duration ->
delegate.updateState(
description = stringProvider.getString(R.string.troubleshoot_notifications_test_push_loop_back_success, duration),
status = NotificationTroubleshootTestState.Status.Success
)
},
onFailure = {
job.cancel()
delegate.updateState(
description = stringProvider.getString(R.string.troubleshoot_notifications_test_push_loop_back_failure_4),
status = NotificationTroubleshootTestState.Status.Failure(false)
)
}
)
}
override suspend fun reset() = delegate.reset()

Loading…
Cancel
Save