From cf111f197856673185817921460025e7324ac512 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Tue, 1 Feb 2022 19:21:01 +0530 Subject: Refactor PasswordEntry TOTP calculation into a cold flow (#1702) --- .../kotlin/dev/msfjarvis/aps/test/turbine.ext.kt | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 coroutine-utils-testing/src/main/kotlin/dev/msfjarvis/aps/test/turbine.ext.kt (limited to 'coroutine-utils-testing/src') diff --git a/coroutine-utils-testing/src/main/kotlin/dev/msfjarvis/aps/test/turbine.ext.kt b/coroutine-utils-testing/src/main/kotlin/dev/msfjarvis/aps/test/turbine.ext.kt new file mode 100644 index 00000000..596be1a1 --- /dev/null +++ b/coroutine-utils-testing/src/main/kotlin/dev/msfjarvis/aps/test/turbine.ext.kt @@ -0,0 +1,37 @@ +/* + * Copyright © 2014-2022 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +package dev.msfjarvis.aps.test + +import app.cash.turbine.FlowTurbine +import app.cash.turbine.test +import kotlin.coroutines.coroutineContext +import kotlin.time.Duration +import kotlin.time.Duration.Companion.seconds +import kotlin.time.ExperimentalTime +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.test.TestCoroutineScheduler +import kotlinx.coroutines.test.UnconfinedTestDispatcher + +/** + * Wrapper for [test] that implements compatibility with kotlinx.coroutines 1.6.0 + * + * @see "https://github.com/cashapp/turbine/issues/42#issuecomment-1000317026" + */ +@ExperimentalTime +@ExperimentalCoroutinesApi +public suspend fun Flow.test2( + timeout: Duration = 1.seconds, + validate: suspend FlowTurbine.() -> Unit, +) { + val testScheduler = coroutineContext[TestCoroutineScheduler] + return if (testScheduler == null) { + test(timeout, validate) + } else { + flowOn(UnconfinedTestDispatcher(testScheduler)).test(timeout, validate) + } +} -- cgit v1.2.3