-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathTestDispatchers.kt
35 lines (31 loc) · 1.45 KB
/
TestDispatchers.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
@file:JvmName("TestDispatchers")
package kotlinx.coroutines.test
import kotlinx.coroutines.*
import kotlinx.coroutines.test.internal.*
import kotlin.jvm.*
/**
* Sets the given [dispatcher] as an underlying dispatcher of [Dispatchers.Main].
* All subsequent usages of [Dispatchers.Main] will use the given [dispatcher] under the hood.
*
* Using [TestDispatcher] as an argument has special behavior: subsequently-called [runTest], as well as
* [TestScope] and test dispatcher constructors, will use the [TestCoroutineScheduler] of the provided dispatcher.
*
* It is unsafe to call this method if alive coroutines launched in [Dispatchers.Main] exist.
*/
@ExperimentalCoroutinesApi
public fun Dispatchers.setMain(dispatcher: CoroutineDispatcher) {
require(dispatcher !is TestMainDispatcher) { "Dispatchers.setMain(Dispatchers.Main) is prohibited, probably Dispatchers.resetMain() should be used instead" }
getTestMainDispatcher().setDispatcher(dispatcher)
}
/**
* Resets state of the [Dispatchers.Main] to the original main dispatcher.
*
* For example, in Android, the Main thread dispatcher will be set as [Dispatchers.Main].
* This method undoes a dependency injection performed for tests, and so should be used in tear down (`@After`) methods.
*
* It is unsafe to call this method if alive coroutines launched in [Dispatchers.Main] exist.
*/
@ExperimentalCoroutinesApi
public fun Dispatchers.resetMain() {
getTestMainDispatcher().resetDispatcher()
}