diff options
Diffstat (limited to 'android')
| -rw-r--r-- | android/build.gradle | 1 | ||||
| -rw-r--r-- | android/src/androidTest/kotlin/net/mullvad/mullvadvpn/ipc/HandlerFlowTest.kt | 48 |
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 + } +} |
