-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathTickerFlowTest.kt
111 lines (83 loc) · 2.37 KB
/
TickerFlowTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package flow
import kotlinx.coroutines.TestBase
import kotlinx.coroutines.cancelAndJoin
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.tickerFlow
import java.util.concurrent.CancellationException
import kotlin.test.Test
import kotlin.test.assertEquals
class TickerFlowTest : TestBase() {
@Test(expected = IllegalArgumentException::class)
fun testNegativePeriod() = runTest {
// WHEN
tickerFlow(-1).launchIn(this)
}
@Test(expected = IllegalArgumentException::class)
fun testZeroPeriod() = runTest {
// WHEN
tickerFlow(0).launchIn(this)
}
@Test(expected = IllegalArgumentException::class)
fun testNegativeInitialDelay() = runTest {
// WHEN
tickerFlow(100, -1).launchIn(this)
}
@Test
fun testInitialDelay() = runTest {
// GIVEN
val inbox = mutableListOf<Unit>()
// WHEN
val periodicTicker =
tickerFlow(100, 100).onEach {
inbox.add(Unit)
}.launchIn(this)
delay(500)
// THEN
assertEquals(4, inbox.size)
periodicTicker.cancelAndJoin()
}
@Test
fun testZeroInitialDelay() = runTest {
// GIVEN
val inbox = mutableListOf<Unit>()
// WHEN
val periodicTicker =
tickerFlow(100, 0).onEach {
inbox.add(Unit)
}.launchIn(this)
delay(500)
// THEN
assertEquals(5, inbox.size)
periodicTicker.cancelAndJoin()
}
@Test
fun testReceive() = runTest {
// GIVEN
val inbox = mutableListOf<Unit>()
// WHEN
val periodicTicker =
tickerFlow(100).onEach {
inbox.add(Unit)
}.launchIn(this)
delay(500)
// THEN
assertEquals(4, inbox.size)
periodicTicker.cancelAndJoin()
}
@Test
fun testDoNotReceiveAfterCancel() = runTest {
// GIVEN
val inbox = mutableListOf<Unit>()
// WHEN
val periodicTicker =
tickerFlow(100).onEach {
inbox.add(Unit)
}.launchIn(this)
delay(50)
periodicTicker.cancel(CancellationException())
// THEN
assertEquals(0, inbox.size)
}
}