mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-10-03 22:29:30 +00:00
64 lines
1.9 KiB
Kotlin
64 lines
1.9 KiB
Kotlin
import dev.inmo.micro_utils.coroutines.asyncWeak
|
|
import dev.inmo.micro_utils.coroutines.launchWeak
|
|
import kotlinx.coroutines.*
|
|
import kotlinx.coroutines.test.runTest
|
|
import kotlin.test.Test
|
|
import kotlin.test.assertTrue
|
|
|
|
class WeakJobTests {
|
|
@Test
|
|
fun testWeakJob() = runTest {
|
|
var commonJobDone = false
|
|
var weakJobStarted = false
|
|
try {
|
|
coroutineScope {
|
|
launch {
|
|
delay(1000)
|
|
commonJobDone = true
|
|
}
|
|
asyncWeak {
|
|
weakJobStarted = true
|
|
delay(100500L)
|
|
error("This must never happen")
|
|
}
|
|
}.await()
|
|
} catch (error: Throwable) {
|
|
assertTrue(error is CancellationException)
|
|
assertTrue(commonJobDone)
|
|
assertTrue(weakJobStarted)
|
|
return@runTest
|
|
}
|
|
error("Cancellation exception has not been thrown")
|
|
}
|
|
@Test
|
|
fun testThatWeakJobsWorksCorrectly() = runTest {
|
|
val scope = CoroutineScope(Dispatchers.Default)
|
|
lateinit var weakLaunchJob: Job
|
|
lateinit var weakAsyncJob: Job
|
|
val completeDeferred = Job()
|
|
coroutineScope {
|
|
weakLaunchJob = launchWeak {
|
|
while (isActive) {
|
|
delay(100L)
|
|
}
|
|
}
|
|
weakAsyncJob = asyncWeak {
|
|
while (isActive) {
|
|
delay(100L)
|
|
}
|
|
}
|
|
|
|
coroutineContext.job.invokeOnCompletion {
|
|
scope.launch {
|
|
delay(1000L)
|
|
completeDeferred.complete()
|
|
}
|
|
}
|
|
launch { delay(1000L); cancel() }
|
|
}
|
|
completeDeferred.join()
|
|
|
|
assertTrue(!weakLaunchJob.isActive)
|
|
assertTrue(!weakAsyncJob.isActive)
|
|
}
|
|
} |