-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathTestDispatchers.kt
36 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
36
/*
* Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
@file:Suppress("unused")
@file:JvmName("TestDispatchers")
package kotlinx.coroutines.test
import kotlinx.coroutines.*
import kotlinx.coroutines.test.internal.*
/**
* Sets the given [dispatcher] as an underlying dispatcher of [Dispatchers.Main].
* All consecutive usages of [Dispatchers.Main] will use given [dispatcher] under the hood.
*
* It is unsafe to call this method if alive coroutines launched in [Dispatchers.Main] exist.
*/
public fun Dispatchers.setMain(dispatcher: CoroutineDispatcher = Dispatchers.Unconfined) {
val mainDispatcher = Dispatchers.Main
require(mainDispatcher is TestMainDispatcher) { "TestMainDispatcher is not set as main dispatcher, have $mainDispatcher instead." }
mainDispatcher.setDispatcher(dispatcher)
}
/**
* Resets state of the [Dispatchers.Main] to the original main dispatcher.
* For example, in Android Main thread dispatcher will be set as [Dispatchers.Main].
* Used to clean up all possible dependencies, should be used in tear down (`@After`) methods.
*
* It is unsafe to call this method if alive coroutines launched in [Dispatchers.Main] exist.
*/
public fun Dispatchers.resetMain() {
val mainDispatcher = Dispatchers.Main
require(mainDispatcher is TestMainDispatcher) { "TestMainDispatcher is not set as main dispatcher, have $mainDispatcher instead." }
mainDispatcher.resetDispatcher()
}