blob: 49e48ee031d58f1af550ff5bbedc234f7da156ec [file] [log] [blame]
Roman Elizarovebc88662018-01-24 23:58:56 +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 Elizarovebc88662018-01-24 23:58:56 +03003 */
4
5package kotlinx.coroutines.experimental
6
Roman Elizarov9fe5f462018-02-21 19:05:52 +03007import kotlin.coroutines.experimental.*
Roman Elizarovebc88662018-01-24 23:58:56 +03008import kotlin.test.*
9
10class AbstractCoroutineTest : TestBase() {
11 @Test
12 fun testNotifications() = runTest {
13 expect(1)
Roman Elizarov9fe5f462018-02-21 19:05:52 +030014 val coroutineContext = coroutineContext // workaround for KT-22984
Roman Elizarovebc88662018-01-24 23:58:56 +030015 val coroutine = object : AbstractCoroutine<String>(coroutineContext, false) {
16 override fun onStart() {
17 expect(3)
18 }
19
20 override fun onCancellation(cause: Throwable?) {
21 assertTrue(cause == null)
22 expect(5)
23 }
24
25 override fun onCompleted(value: String) {
26 assertEquals("OK", value)
27 expect(6)
28 }
29
30 override fun onCompletedExceptionally(exception: Throwable) {
31 expectUnreached()
32 }
33 }
Roman Elizarov9da9e352018-01-25 10:06:39 +030034 coroutine.invokeOnCompletion(onCancelling = true) {
Roman Elizarovebc88662018-01-24 23:58:56 +030035 assertTrue(it == null)
36 expect(7)
37 }
Roman Elizarov9da9e352018-01-25 10:06:39 +030038 coroutine.invokeOnCompletion {
39 assertTrue(it == null)
40 expect(8)
41 }
Roman Elizarovebc88662018-01-24 23:58:56 +030042 expect(2)
43 coroutine.start()
44 expect(4)
45 coroutine.resume("OK")
Roman Elizarov9da9e352018-01-25 10:06:39 +030046 finish(9)
Roman Elizarovebc88662018-01-24 23:58:56 +030047 }
48
49 @Test
50 fun testNotificationsWithException() = runTest {
51 expect(1)
Roman Elizarov9fe5f462018-02-21 19:05:52 +030052 val coroutineContext = coroutineContext // workaround for KT-22984
Roman Elizarovebc88662018-01-24 23:58:56 +030053 val coroutine = object : AbstractCoroutine<String>(coroutineContext, false) {
54 override fun onStart() {
55 expect(3)
56 }
57
58 override fun onCancellation(cause: Throwable?) {
59 assertTrue(cause is TestException0)
60 expect(5)
61 }
62
63 override fun onCompleted(value: String) {
64 expectUnreached()
65 }
66
67 override fun onCompletedExceptionally(exception: Throwable) {
68 assertTrue(exception is TestException1)
Roman Elizarov9da9e352018-01-25 10:06:39 +030069 expect(8)
Roman Elizarovebc88662018-01-24 23:58:56 +030070 }
71 }
Roman Elizarov9da9e352018-01-25 10:06:39 +030072 coroutine.invokeOnCompletion(onCancelling = true) {
73 assertTrue(it is TestException0)
74 expect(6)
75 }
Roman Elizarovebc88662018-01-24 23:58:56 +030076 coroutine.invokeOnCompletion {
77 assertTrue(it is TestException1)
Roman Elizarov9da9e352018-01-25 10:06:39 +030078 expect(9)
Roman Elizarovebc88662018-01-24 23:58:56 +030079 }
80 expect(2)
81 coroutine.start()
82 expect(4)
83 coroutine.cancel(TestException0())
Roman Elizarov9da9e352018-01-25 10:06:39 +030084 expect(7)
Roman Elizarovebc88662018-01-24 23:58:56 +030085 coroutine.resumeWithException(TestException1())
Roman Elizarov9da9e352018-01-25 10:06:39 +030086 finish(10)
Roman Elizarovebc88662018-01-24 23:58:56 +030087 }
88
89 private class TestException0 : Throwable()
90 private class TestException1 : Throwable()
91}