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()
         }
     }
 }