blob: 18a915a60293e29484632092eb4e87f3f87c051e [file] [log] [blame]
Roman Elizarov98b7a6e2017-06-07 08:43:43 +03001/*
Roman Elizarov1f74a2d2018-06-29 19:19:45 +03002 * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
Roman Elizarov98b7a6e2017-06-07 08:43:43 +03003 */
4
5package kotlinx.coroutines.experimental.channels
6
Roman Elizarovf2bdf602018-04-26 11:29:47 +03007import kotlinx.coroutines.experimental.*
Vsevolod Tolstopyatov96191342018-04-20 18:13:33 +03008import kotlin.test.*
Roman Elizarov98b7a6e2017-06-07 08:43:43 +03009
10class LinkedListChannelTest : TestBase() {
11 @Test
Vsevolod Tolstopyatov96191342018-04-20 18:13:33 +030012 fun testBasic() = runTest {
Roman Elizarov98b7a6e2017-06-07 08:43:43 +030013 val c = LinkedListChannel<Int>()
14 c.send(1)
Roman Elizaroveab2cff2017-07-21 19:07:17 +030015 check(c.offer(2))
Roman Elizarov98b7a6e2017-06-07 08:43:43 +030016 c.send(3)
Roman Elizaroveab2cff2017-07-21 19:07:17 +030017 check(c.close())
18 check(!c.close())
Vsevolod Tolstopyatov96191342018-04-20 18:13:33 +030019 assertEquals(1, c.receive())
20 assertEquals(2, c.poll())
21 assertEquals(3, c.receiveOrNull())
22 assertNull(c.receiveOrNull())
Roman Elizarov98b7a6e2017-06-07 08:43:43 +030023 }
Roman Elizarovb555d912017-08-17 21:01:33 +030024
25 @Test
Vsevolod Tolstopyatov96191342018-04-20 18:13:33 +030026 fun testConsumeAll() = runTest {
Roman Elizarovb555d912017-08-17 21:01:33 +030027 val q = LinkedListChannel<Int>()
28 for (i in 1..10) {
29 q.send(i) // buffers
30 }
31 q.cancel()
32 check(q.isClosedForSend)
33 check(q.isClosedForReceive)
34 check(q.receiveOrNull() == null)
35 }
Vsevolod Tolstopyatov4b9a5592018-04-11 13:17:14 +030036
Roman Elizarovf2bdf602018-04-26 11:29:47 +030037 @Test
38 fun testCancelWithCause() = runTest({ it is TestException }) {
Vsevolod Tolstopyatov4b9a5592018-04-11 13:17:14 +030039 val channel = LinkedListChannel<Int>()
Roman Elizarovf2bdf602018-04-26 11:29:47 +030040 channel.cancel(TestException())
Vsevolod Tolstopyatov4b9a5592018-04-11 13:17:14 +030041 channel.receiveOrNull()
42 }
Roman Elizarovf2bdf602018-04-26 11:29:47 +030043
44 private class TestException : Exception()
Vsevolod Tolstopyatov4b9a5592018-04-11 13:17:14 +030045}