All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jvmTest.channels.ChannelsJvmTest.kt Maven / Gradle / Ivy

/*
 * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

package kotlinx.coroutines.channels

import kotlinx.coroutines.*
import org.junit.Test
import kotlin.test.*

class ChannelsJvmTest : TestBase() {

    @Test
    fun testTrySendBlocking() {
        val ch = Channel()
        val sum = GlobalScope.async {
            var sum = 0
            ch.consumeEach { sum += it }
            sum
        }
        repeat(10) {
            assertTrue(ch.trySendBlocking(it).isSuccess)
        }
        ch.close()
        assertEquals(45, runBlocking { sum.await() })
    }

    @Test
    fun testTrySendBlockingClosedChannel() {
        run {
            val channel = Channel().also { it.close() }
            channel.trySendBlocking(Unit)
                .onSuccess { expectUnreached() }
                .onFailure { assertTrue(it is ClosedSendChannelException) }
                .also { assertTrue { it.isClosed } }
        }

        run {
            val channel = Channel().also { it.close(TestException()) }
            channel.trySendBlocking(Unit)
                .onSuccess { expectUnreached() }
                .onFailure { assertTrue(it is TestException) }
                .also { assertTrue { it.isClosed } }
        }

        run {
            val channel = Channel().also { it.cancel(TestCancellationException()) }
            channel.trySendBlocking(Unit)
                .onSuccess { expectUnreached() }
                .onFailure { assertTrue(it is TestCancellationException) }
                .also { assertTrue { it.isClosed } }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy