summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-07 19:26:47 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-14 20:39:01 +0000
commitddda7d310f73ea16fe00d62f9704e556e6c4fc97 (patch)
treedb8e01306d284f9eed7eaab9784e44c9bac3aff9
parentbe8923f7816b9501d2e40bf4631920b40d0a084c (diff)
downloadmullvadvpn-ddda7d310f73ea16fe00d62f9704e556e6c4fc97.tar.xz
mullvadvpn-ddda7d310f73ea16fe00d62f9704e556e6c4fc97.zip
Test `HandlerFlow` forwarding messages
-rw-r--r--android/build.gradle1
-rw-r--r--android/src/androidTest/kotlin/net/mullvad/mullvadvpn/ipc/HandlerFlowTest.kt48
2 files changed, 49 insertions, 0 deletions
diff --git a/android/build.gradle b/android/build.gradle
index 19035b857d..8a7d7e2a16 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -162,6 +162,7 @@ dependencies {
androidTestImplementation "androidx.test.ext:junit:1.1.2"
androidTestImplementation "io.mockk:mockk-android:$mockkVersion"
androidTestImplementation "org.koin:koin-test:$koinVersion"
+ androidTestImplementation "org.jetbrains.kotlin:kotlin-test:$kotlinVersion"
// debugImplementation because LeakCanary should only run in debug builds.
// debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.6'
}
diff --git a/android/src/androidTest/kotlin/net/mullvad/mullvadvpn/ipc/HandlerFlowTest.kt b/android/src/androidTest/kotlin/net/mullvad/mullvadvpn/ipc/HandlerFlowTest.kt
new file mode 100644
index 0000000000..709f330b0d
--- /dev/null
+++ b/android/src/androidTest/kotlin/net/mullvad/mullvadvpn/ipc/HandlerFlowTest.kt
@@ -0,0 +1,48 @@
+package net.mullvad.mullvadvpn.ipc
+
+import android.os.Bundle
+import android.os.Looper
+import android.os.Message
+import android.os.Parcelable
+import kotlin.test.assertEquals
+import kotlinx.coroutines.flow.take
+import kotlinx.coroutines.flow.toList
+import kotlinx.coroutines.runBlocking
+import kotlinx.parcelize.Parcelize
+import org.junit.Test
+
+class HandlerFlowTest {
+ val looper by lazy { Looper.getMainLooper() }
+
+ val handler: HandlerFlow<Data?> by lazy {
+ HandlerFlow(looper) { message ->
+ message.data.getParcelable(DATA_KEY)
+ }
+ }
+
+ @Test
+ fun test_message_extraction() {
+ sendMessage(Data(1))
+ sendMessage(Data(2))
+ sendMessage(Data(3))
+
+ val extractedData = runBlocking { handler.take(3).toList() }
+
+ assertEquals(listOf(Data(1), Data(2), Data(3)), extractedData)
+ }
+
+ private fun sendMessage(messageData: Data) {
+ val message = Message().apply {
+ data = Bundle().apply { putParcelable(DATA_KEY, messageData) }
+ }
+
+ handler.handleMessage(message)
+ }
+
+ companion object {
+ const val DATA_KEY = "data"
+
+ @Parcelize
+ data class Data(val id: Int) : Parcelable
+ }
+}