Coverage Summary for Class: CoroutineExtensionsKt (cloud.mindbox.mobile_sdk.utils)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| CoroutineExtensionsKt |
100%
(2/2)
|
100%
(4/4)
|
100%
(4/4)
|
100%
(52/52)
|
| CoroutineExtensionsKt$awaitAllWithTimeout$1 |
|
| CoroutineExtensionsKt$awaitAllWithTimeout$2 |
100%
(1/1)
|
|
100%
(1/1)
|
100%
(11/11)
|
| CoroutineExtensionsKt$launchWithLock$1 |
100%
(1/1)
|
|
100%
(3/3)
|
100%
(45/45)
|
| Total |
100%
(4/4)
|
100%
(4/4)
|
100%
(8/8)
|
100%
(108/108)
|
package cloud.mindbox.mobile_sdk.utils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withTimeoutOrNull
@OptIn(ExperimentalCoroutinesApi::class)
internal suspend fun <T> Collection<Deferred<T>>.awaitAllWithTimeout(timeMillis: Long): List<T> =
withTimeoutOrNull(timeMillis) {
awaitAll()
} ?: filter { it.isCompleted && !it.isCancelled }
.map { it.getCompleted() }
internal inline fun CoroutineScope.launchWithLock(
mutex: Mutex,
crossinline block: suspend CoroutineScope.() -> Unit
): Job {
return launch {
mutex.withLock {
block()
}
}
}