1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.intentresolver.util
18 
19 import com.android.intentresolver.backgroundDispatcher
20 import com.android.systemui.kosmos.Kosmos
21 import kotlinx.coroutines.ExperimentalCoroutinesApi
22 import kotlinx.coroutines.test.StandardTestDispatcher
23 import kotlinx.coroutines.test.TestDispatcher
24 import kotlinx.coroutines.test.TestScope
25 import kotlinx.coroutines.test.runCurrent
26 
runTestnull27 fun Kosmos.runTest(
28     dispatcher: TestDispatcher = StandardTestDispatcher(),
29     block: suspend KosmosTestScope.() -> Unit,
30 ) {
31     val kosmos = this
32     backgroundDispatcher = dispatcher
33     kotlinx.coroutines.test.runTest(dispatcher) { KosmosTestScope(kosmos, this).block() }
34 }
35 
runKosmosTestnull36 fun runKosmosTest(
37     dispatcher: TestDispatcher = StandardTestDispatcher(),
38     block: suspend KosmosTestScope.() -> Unit,
39 ) {
40     Kosmos().runTest(dispatcher, block)
41 }
42 
43 class KosmosTestScope(
44     kosmos: Kosmos,
45     private val testScope: TestScope,
<lambda>null46 ) : Kosmos by kosmos {
47     val backgroundScope
48         get() = testScope.backgroundScope
49 
50     @ExperimentalCoroutinesApi fun runCurrent() = testScope.runCurrent()
51 }
52