blob: dfa2827447a708c36b79554a7274232c8710f04c [file] [log] [blame]
/*
* Copyright 2016-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package kotlinx.coroutines.flow
import kotlinx.coroutines.*
import kotlin.test.*
class DropTest : TestBase() {
@Test
fun testDrop() = runTest {
val flow = flow {
emit(1)
emit(2)
emit(3)
}
assertEquals(5, flow.drop(1).sum())
assertEquals(0, flow.drop(Int.MAX_VALUE).sum())
assertNull(flow.drop(Int.MAX_VALUE).singleOrNull())
assertEquals(3, flow.drop(1).take(2).drop(1).single())
}
@Test
fun testEmptyFlow() = runTest {
assertEquals(0, flowOf<Int>().drop(1).sum())
}
@Test
fun testNegativeCount() {
assertFailsWith<IllegalArgumentException> {
emptyFlow<Int>().drop(-1)
}
}
@Test
fun testErrorCancelsUpstream() = runTest {
val flow = flow {
coroutineScope {
launch(start = CoroutineStart.ATOMIC) {
hang { expect(5) }
}
expect(2)
emit(1)
expect(3)
emit(2)
expectUnreached()
}
}.drop(1)
.map<Int, Int> {
expect(4)
throw TestException()
}.catch { emit(42) }
expect(1)
assertEquals(42, flow.single())
finish(6)
}
}