blob: 00abc7c9f4e4ea64e708af0ee25fc235355e75c1 [file] [log] [blame]
Sergey Mashkovfc84a632017-08-23 12:11:55 +03001package kotlinx.coroutines.experimental.io
2
Sergey Mashkov2c3a0dc2017-09-06 22:58:08 +03003import kotlinx.coroutines.experimental.*
Roman Elizarov9fe5f462018-02-21 19:05:52 +03004import kotlinx.coroutines.experimental.io.internal.*
5import org.junit.*
Roman Elizarov75675e62017-11-30 15:14:44 +03006import org.junit.Test
Roman Elizarov9fe5f462018-02-21 19:05:52 +03007import java.io.*
8import kotlin.coroutines.experimental.*
9import kotlin.test.*
Sergey Mashkovfc84a632017-08-23 12:11:55 +030010
11class CopyAndCloseTest : TestBase() {
12 private val from = ByteChannel(true)
13 private val to = ByteChannel(true)
14
Sergey Mashkov2c3a0dc2017-09-06 22:58:08 +030015 @After
16 fun tearDown() {
17 from.close(CancellationException())
18 to.close(CancellationException())
19 }
20
Sergey Mashkovfc84a632017-08-23 12:11:55 +030021 @Test
22 fun smokeTest() = runBlocking {
23 expect(1)
24
25 launch(coroutineContext) {
26 expect(2)
27 val copied = from.copyAndClose(to) // should suspend
28
29 expect(7)
30
31 assertEquals(8, copied)
32 }
33
34 yield()
35
36 expect(3)
37 from.writeInt(1)
38 expect(4)
39 from.writeInt(2)
40 expect(5)
41
42 yield()
43 expect(6)
44
45 from.close()
46 yield()
47
48 finish(8)
49 }
50
51 @Test
Sergey Mashkov72e91502017-09-03 00:17:14 +030052 fun copyLimitedTest() = runBlocking {
53 expect(1)
54
55 launch(coroutineContext) {
56 expect(2)
57 val copied = from.copyTo(to, 3) // should suspend
58
59 expect(5)
60
61 assertEquals(3, copied)
62 }
63
64 yield()
65
66 expect(3)
67 from.writeByte(1)
68 yield()
69
70 expect(4)
71 from.writeInt(2)
72 yield()
73
74 finish(6)
75 }
Sergey Mashkov2c3a0dc2017-09-06 22:58:08 +030076
77 @Test
78 fun readRemaining() = runBlocking {
79 expect(1)
80
81 launch(coroutineContext) {
82 expect(2)
83 from.writeFully("123".toByteArray())
84
85 yield()
86 expect(3)
87 from.writeFully("456".toByteArray().asByteBuffer())
88
89 yield()
90 expect(4)
91 from.close()
92 }
93
94 yield()
95 assertEquals("123456", from.readRemaining().readText().toString())
96
97 yield()
98
99 finish(5)
100 }
101
102 @Test
103 fun readRemainingLimitFailed() = runBlocking {
104 expect(1)
105
106 launch(coroutineContext) {
107 expect(2)
108 from.writeFully("123".toByteArray())
109
110 yield()
111 expect(3)
112 from.writeFully("456".toByteArray().asByteBuffer())
113 }
114
115 yield()
116 assertEquals("12345", from.readRemaining(5).readText().toString())
117
118 finish(4)
119 }
120
121
Sergey Mashkovfc84a632017-08-23 12:11:55 +0300122}