Skip to content

Commit 8299348

Browse files
committed
Introduce advanceTimeAndRun extension method
1 parent ea761d0 commit 8299348

3 files changed

Lines changed: 23 additions & 40 deletions

File tree

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,10 @@
11
package com.woocommerce.android.helpers
22

3-
import kotlinx.coroutines.CancellableContinuation
4-
import kotlinx.coroutines.CoroutineDispatcher
5-
import kotlinx.coroutines.CoroutineScope
6-
import kotlinx.coroutines.Delay
7-
import kotlinx.coroutines.Dispatchers
8-
import kotlinx.coroutines.ExperimentalCoroutinesApi
9-
import kotlinx.coroutines.InternalCoroutinesApi
10-
import kotlinx.coroutines.runBlocking
11-
import kotlin.coroutines.CoroutineContext
12-
import kotlin.coroutines.EmptyCoroutineContext
13-
import kotlin.coroutines.resume
3+
import kotlinx.coroutines.test.TestScope
4+
import kotlinx.coroutines.test.advanceTimeBy
5+
import kotlinx.coroutines.test.runCurrent
146

15-
@Deprecated(
16-
message = "Use runBlockingTest which provides additional features such as skipping delays",
17-
replaceWith = ReplaceWith("runBlockingTest", "import kotlinx.coroutines.test.runBlockingTest")
18-
)
19-
fun <T> test(context: CoroutineContext = EmptyCoroutineContext, block: suspend CoroutineScope.() -> T) {
20-
runBlocking(context, block)
21-
}
22-
23-
@ExperimentalCoroutinesApi val TEST_SCOPE = CoroutineScope(Dispatchers.Unconfined)
24-
@InternalCoroutinesApi val TEST_DISPATCHER: CoroutineDispatcher = TestDispatcher()
25-
26-
@InternalCoroutinesApi
27-
private class TestDispatcher : CoroutineDispatcher(), Delay {
28-
override fun scheduleResumeAfterDelay(timeMillis: Long, continuation: CancellableContinuation<Unit>) {
29-
continuation.resume(Unit)
30-
}
31-
32-
override fun dispatch(context: CoroutineContext, block: Runnable) {
33-
block.run()
34-
}
7+
fun TestScope.advanceTimeAndRun(duration: Long) {
8+
advanceTimeBy(duration)
9+
runCurrent()
3510
}

WooCommerce/src/test/kotlin/com/woocommerce/android/tracker/SendTelemetryTest.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.woocommerce.android.tracker
22

33
import app.cash.turbine.test
4+
import com.woocommerce.android.helpers.advanceTimeAndRun
45
import com.woocommerce.android.tools.SelectedSite
56
import com.woocommerce.android.tracker.SendTelemetry.Result.NOT_SENT
67
import com.woocommerce.android.tracker.SendTelemetry.Result.SENT
@@ -11,7 +12,6 @@ import kotlinx.coroutines.flow.flowOf
1112
import kotlinx.coroutines.launch
1213
import kotlinx.coroutines.runBlocking
1314
import kotlinx.coroutines.test.advanceTimeBy
14-
import kotlinx.coroutines.test.runCurrent
1515
import org.assertj.core.api.Assertions.assertThat
1616
import org.junit.Before
1717
import org.junit.Test
@@ -113,8 +113,7 @@ class SendTelemetryTest : BaseUnitTest() {
113113
results.add(it)
114114
}
115115
}
116-
advanceTimeBy(SendTelemetry.UPDATE_INTERVAL.toLong() * 3)
117-
runCurrent()
116+
advanceTimeAndRun(SendTelemetry.UPDATE_INTERVAL.toLong() * 3)
118117

119118
// then
120119
assertThat(results).containsExactly(SENT, NOT_SENT, SENT, NOT_SENT, SENT, NOT_SENT, SENT)

WooCommerce/src/test/kotlin/com/woocommerce/android/ui/orders/creation/CreateOrUpdateOrderDraftTests.kt

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
11
package com.woocommerce.android.ui.orders.creation
22

3+
import com.woocommerce.android.helpers.advanceTimeAndRun
34
import com.woocommerce.android.model.Order
45
import com.woocommerce.android.ui.orders.OrderTestUtils
56
import com.woocommerce.android.ui.orders.creation.CreateOrUpdateOrderDraft.OrderDraftUpdateStatus
67
import com.woocommerce.android.util.InlineClassesAnswer
78
import com.woocommerce.android.viewmodel.BaseUnitTest
8-
import kotlinx.coroutines.flow.*
9-
import kotlinx.coroutines.test.advanceTimeBy
9+
import kotlinx.coroutines.flow.MutableSharedFlow
10+
import kotlinx.coroutines.flow.MutableStateFlow
11+
import kotlinx.coroutines.flow.launchIn
12+
import kotlinx.coroutines.flow.onEach
13+
import kotlinx.coroutines.flow.update
1014
import kotlinx.coroutines.test.advanceUntilIdle
11-
import kotlinx.coroutines.test.runCurrent
1215
import org.assertj.core.api.Assertions.assertThat
1316
import org.junit.Test
14-
import org.mockito.kotlin.*
17+
import org.mockito.kotlin.any
18+
import org.mockito.kotlin.doAnswer
19+
import org.mockito.kotlin.doReturn
20+
import org.mockito.kotlin.mock
21+
import org.mockito.kotlin.never
22+
import org.mockito.kotlin.times
23+
import org.mockito.kotlin.verify
24+
import org.mockito.kotlin.whenever
1525
import java.math.BigDecimal
1626

1727
class CreateOrUpdateOrderDraftTests : BaseUnitTest() {
@@ -84,8 +94,7 @@ class CreateOrUpdateOrderDraftTests : BaseUnitTest() {
8494
}
8595

8696
verify(orderCreationRepository, never()).createOrUpdateDraft(any())
87-
advanceTimeBy(CreateOrUpdateOrderDraft.DEBOUNCE_DURATION_MS)
88-
runCurrent()
97+
advanceTimeAndRun(CreateOrUpdateOrderDraft.DEBOUNCE_DURATION_MS)
8998
verify(orderCreationRepository, times(1)).createOrUpdateDraft(any())
9099

91100
job.cancel()

0 commit comments

Comments
 (0)