aboutsummaryrefslogtreecommitdiff
path: root/coroutine-utils
diff options
context:
space:
mode:
authorHarsh Shandilya <me@msfjarvis.dev>2021-12-09 10:07:54 +0530
committerGitHub <noreply@github.com>2021-12-09 04:37:54 +0000
commit8db0b67ce9ba4a5e56c04c1bea3a738eacb176cf (patch)
tree46700b7a3da32065e073bffbf22765c7e2f30d32 /coroutine-utils
parent933558caf8266677dc26497d7c7b930254f4fb07 (diff)
Refactor coroutine testing setup (#1583)
* coroutine-utils: init * coroutine-utils-testing: init * format-common: switch over to using DispatcherProvider * Convert Binds method to an extension function * Add Dispatcher module
Diffstat (limited to 'coroutine-utils')
-rw-r--r--coroutine-utils/api/coroutine-utils.api22
-rw-r--r--coroutine-utils/build.gradle.kts13
-rw-r--r--coroutine-utils/src/main/kotlin/dev/msfjarvis/aps/util/coroutines/DispatcherProvider.kt22
3 files changed, 57 insertions, 0 deletions
diff --git a/coroutine-utils/api/coroutine-utils.api b/coroutine-utils/api/coroutine-utils.api
new file mode 100644
index 00000000..000dde65
--- /dev/null
+++ b/coroutine-utils/api/coroutine-utils.api
@@ -0,0 +1,22 @@
+public final class dev/msfjarvis/aps/util/coroutines/DefaultDispatcherProvider : dev/msfjarvis/aps/util/coroutines/DispatcherProvider {
+ public fun <init> ()V
+ public fun default ()Lkotlinx/coroutines/CoroutineDispatcher;
+ public fun io ()Lkotlinx/coroutines/CoroutineDispatcher;
+ public fun main ()Lkotlinx/coroutines/CoroutineDispatcher;
+ public fun unconfined ()Lkotlinx/coroutines/CoroutineDispatcher;
+}
+
+public abstract interface class dev/msfjarvis/aps/util/coroutines/DispatcherProvider {
+ public abstract fun default ()Lkotlinx/coroutines/CoroutineDispatcher;
+ public abstract fun io ()Lkotlinx/coroutines/CoroutineDispatcher;
+ public abstract fun main ()Lkotlinx/coroutines/CoroutineDispatcher;
+ public abstract fun unconfined ()Lkotlinx/coroutines/CoroutineDispatcher;
+}
+
+public final class dev/msfjarvis/aps/util/coroutines/DispatcherProvider$DefaultImpls {
+ public static fun default (Ldev/msfjarvis/aps/util/coroutines/DispatcherProvider;)Lkotlinx/coroutines/CoroutineDispatcher;
+ public static fun io (Ldev/msfjarvis/aps/util/coroutines/DispatcherProvider;)Lkotlinx/coroutines/CoroutineDispatcher;
+ public static fun main (Ldev/msfjarvis/aps/util/coroutines/DispatcherProvider;)Lkotlinx/coroutines/CoroutineDispatcher;
+ public static fun unconfined (Ldev/msfjarvis/aps/util/coroutines/DispatcherProvider;)Lkotlinx/coroutines/CoroutineDispatcher;
+}
+
diff --git a/coroutine-utils/build.gradle.kts b/coroutine-utils/build.gradle.kts
new file mode 100644
index 00000000..2a20df08
--- /dev/null
+++ b/coroutine-utils/build.gradle.kts
@@ -0,0 +1,13 @@
+/*
+ * Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+plugins {
+ kotlin("jvm")
+ id("com.github.android-password-store.kotlin-library")
+}
+
+dependencies {
+ implementation(libs.kotlin.coroutines.core)
+ implementation(libs.dagger.hilt.core)
+}
diff --git a/coroutine-utils/src/main/kotlin/dev/msfjarvis/aps/util/coroutines/DispatcherProvider.kt b/coroutine-utils/src/main/kotlin/dev/msfjarvis/aps/util/coroutines/DispatcherProvider.kt
new file mode 100644
index 00000000..a7c4530d
--- /dev/null
+++ b/coroutine-utils/src/main/kotlin/dev/msfjarvis/aps/util/coroutines/DispatcherProvider.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+package dev.msfjarvis.aps.util.coroutines
+
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.Dispatchers
+
+/** Interface to allow abstracting individual [CoroutineDispatcher]s out of class dependencies. */
+public interface DispatcherProvider {
+
+ public fun main(): CoroutineDispatcher = Dispatchers.Main
+ public fun default(): CoroutineDispatcher = Dispatchers.Default
+ public fun io(): CoroutineDispatcher = Dispatchers.IO
+ public fun unconfined(): CoroutineDispatcher = Dispatchers.Unconfined
+}
+
+/** Concrete type for [DispatcherProvider] with all the defaults from the class. */
+public class DefaultDispatcherProvider @Inject constructor() : DispatcherProvider