Skip to content

Commit 8948c5c

Browse files
committed
Small refactoring
1 parent 78abad7 commit 8948c5c

File tree

5 files changed

+41
-35
lines changed

5 files changed

+41
-35
lines changed

kotlinx-coroutines-test/api/kotlinx-coroutines-test.api

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,14 @@ public final class kotlinx/coroutines/test/TestCoroutineDispatcher : kotlinx/cor
2323
public fun advanceTimeBy (J)J
2424
public fun advanceUntilIdle ()J
2525
public fun cleanupTestCoroutines ()V
26-
public fun delay (JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
2726
public fun dispatch (Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
2827
public fun dispatchYield (Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
2928
public fun getCurrentTime ()J
3029
public fun getScheduler ()Lkotlinx/coroutines/test/TestCoroutineScheduler;
31-
public fun invokeOnTimeout (JLjava/lang/Runnable;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/DisposableHandle;
3230
public fun pauseDispatcher ()V
3331
public fun pauseDispatcher (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
3432
public fun resumeDispatcher ()V
3533
public fun runCurrent ()V
36-
public fun scheduleResumeAfterDelay (JLkotlinx/coroutines/CancellableContinuation;)V
3734
public fun toString ()Ljava/lang/String;
3835
}
3936

@@ -77,9 +74,12 @@ public final class kotlinx/coroutines/test/TestCoroutineScopeKt {
7774
public static final fun runCurrent (Lkotlinx/coroutines/test/TestCoroutineScope;)V
7875
}
7976

80-
public abstract class kotlinx/coroutines/test/TestDispatcher : kotlinx/coroutines/CoroutineDispatcher {
77+
public abstract class kotlinx/coroutines/test/TestDispatcher : kotlinx/coroutines/CoroutineDispatcher, kotlinx/coroutines/Delay {
8178
public fun <init> ()V
79+
public fun delay (JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
8280
public abstract fun getScheduler ()Lkotlinx/coroutines/test/TestCoroutineScheduler;
81+
public fun invokeOnTimeout (JLjava/lang/Runnable;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/DisposableHandle;
82+
public fun scheduleResumeAfterDelay (JLkotlinx/coroutines/CancellableContinuation;)V
8383
}
8484

8585
public final class kotlinx/coroutines/test/TestDispatchers {

kotlinx-coroutines-test/common/src/TestCoroutineDispatcher.kt

+1-29
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package kotlinx.coroutines.test
66

77
import kotlinx.coroutines.*
88
import kotlin.coroutines.*
9-
import kotlin.jvm.*
109

1110
/**
1211
* [CoroutineDispatcher] that performs both immediate and lazy execution of coroutines in tests
@@ -35,6 +34,7 @@ public class TestCoroutineDispatcher(public override val scheduler: TestCoroutin
3534
}
3635
}
3736

37+
/** @suppress */
3838
override fun processEvent(time: Long, marker: Any) {
3939
check(marker is Runnable)
4040
marker.run()
@@ -51,25 +51,11 @@ public class TestCoroutineDispatcher(public override val scheduler: TestCoroutin
5151
}
5252

5353
/** @suppress */
54-
@InternalCoroutinesApi
5554
override fun dispatchYield(context: CoroutineContext, block: Runnable) {
5655
checkSchedulerInContext(scheduler, context)
5756
post(block)
5857
}
5958

60-
/** @suppress */
61-
override fun scheduleResumeAfterDelay(timeMillis: Long, continuation: CancellableContinuation<Unit>) {
62-
checkSchedulerInContext(scheduler, continuation.context)
63-
val timedRunnable = CancellableContinuationRunnable(continuation, this)
64-
scheduler.registerEvent(this, timeMillis, timedRunnable, ::cancellableRunnableIsCancelled)
65-
}
66-
67-
/** @suppress */
68-
override fun invokeOnTimeout(timeMillis: Long, block: Runnable, context: CoroutineContext): DisposableHandle {
69-
checkSchedulerInContext(scheduler, context)
70-
return scheduler.registerEvent(this, timeMillis, block) { false }
71-
}
72-
7359
/** @suppress */
7460
override fun toString(): String = "TestCoroutineDispatcher[scheduler=$scheduler]"
7561

@@ -97,17 +83,3 @@ public class TestCoroutineDispatcher(public override val scheduler: TestCoroutin
9783
dispatchImmediately = true
9884
}
9985
}
100-
101-
/**
102-
* This class exists to allow cleanup code to avoid throwing for cancelled continuations scheduled
103-
* in the future.
104-
*/
105-
private class CancellableContinuationRunnable(
106-
@JvmField val continuation: CancellableContinuation<Unit>,
107-
private val dispatcher: CoroutineDispatcher
108-
) : Runnable {
109-
override fun run() = with(dispatcher) { with(continuation) { resumeUndispatched(Unit) } }
110-
}
111-
112-
private fun cancellableRunnableIsCancelled(runnable: CancellableContinuationRunnable): Boolean =
113-
!runnable.continuation.isActive

kotlinx-coroutines-test/common/src/TestCoroutineScheduler.kt

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class TestCoroutineScheduler: AbstractCoroutineContextElement(TestCorouti
3939
private val count = atomic(0L)
4040

4141
/** The current virtual time. */
42+
@ExperimentalCoroutinesApi
4243
public var currentTime: Long = 0
4344
private set
4445

kotlinx-coroutines-test/common/src/TestCoroutineScope.kt

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public interface TestCoroutineScope: CoroutineScope, UncaughtExceptionCaptor {
2020
* @throws UncompletedCoroutinesError if any pending tasks are active, however it will not throw for suspended
2121
* coroutines.
2222
*/
23+
@ExperimentalCoroutinesApi
2324
public fun cleanupTestCoroutines()
2425

2526
/**

kotlinx-coroutines-test/common/src/TestDispatcher.kt

+34-2
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,46 @@
55
package kotlinx.coroutines.test
66

77
import kotlinx.coroutines.*
8+
import kotlin.coroutines.*
9+
import kotlin.jvm.*
810

911
/**
1012
* A test dispatcher that can interface with a [TestCoroutineScheduler].
1113
*/
12-
public abstract class TestDispatcher: CoroutineDispatcher() {
14+
@ExperimentalCoroutinesApi
15+
public abstract class TestDispatcher: CoroutineDispatcher(), Delay {
1316
/** The scheduler that this dispatcher is linked to. */
17+
@ExperimentalCoroutinesApi
1418
public abstract val scheduler: TestCoroutineScheduler
1519

1620
/** Notifies the dispatcher that it should process a single event marked with [marker] happening at time [time]. */
21+
@ExperimentalCoroutinesApi
1722
internal abstract fun processEvent(time: Long, marker: Any)
18-
}
23+
24+
/** @suppress */
25+
override fun scheduleResumeAfterDelay(timeMillis: Long, continuation: CancellableContinuation<Unit>) {
26+
checkSchedulerInContext(scheduler, continuation.context)
27+
val timedRunnable = CancellableContinuationRunnable(continuation, this)
28+
scheduler.registerEvent(this, timeMillis, timedRunnable, ::cancellableRunnableIsCancelled)
29+
}
30+
31+
/** @suppress */
32+
override fun invokeOnTimeout(timeMillis: Long, block: Runnable, context: CoroutineContext): DisposableHandle {
33+
checkSchedulerInContext(scheduler, context)
34+
return scheduler.registerEvent(this, timeMillis, block) { false }
35+
}
36+
}
37+
38+
/**
39+
* This class exists to allow cleanup code to avoid throwing for cancelled continuations scheduled
40+
* in the future.
41+
*/
42+
private class CancellableContinuationRunnable(
43+
@JvmField val continuation: CancellableContinuation<Unit>,
44+
private val dispatcher: CoroutineDispatcher
45+
) : Runnable {
46+
override fun run() = with(dispatcher) { with(continuation) { resumeUndispatched(Unit) } }
47+
}
48+
49+
private fun cancellableRunnableIsCancelled(runnable: CancellableContinuationRunnable): Boolean =
50+
!runnable.continuation.isActive

0 commit comments

Comments
 (0)