Files
aiturk-mobil/app/src/test/java/com/m57/hermescontrol/ExternalActivityLifecycleGuardTest.kt
T

102 lines
3.1 KiB
Kotlin

package com.m57.hermescontrol
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
class ExternalActivityLifecycleGuardTest {
@Before
fun setUp() {
ExternalActivityLifecycleGuard.resetForTest()
}
@After
fun tearDown() {
ExternalActivityLifecycleGuard.resetForTest()
}
@Test
fun externalActivityLaunch_acquiresConnectionLeaseBeforePreparingServiceAndLaunching() {
val calls = mutableListOf<String>()
ExternalActivityLifecycleGuard.launchExternalActivity(
acquireConnectionLease = { calls += "acquire" },
releaseConnectionLease = { calls += "release" },
prepareForBackground = { calls += "prepare" },
cleanupAfterLaunchFailure = { calls += "cleanup" },
scheduleTimeout = { _, _ -> },
launch = { calls += "launch" },
)
assertEquals(listOf("acquire", "prepare", "launch"), calls)
}
@Test
fun transientResumeDuringPicker_doesNotReleaseLeaseUntilResultReturns() {
var released = false
ExternalActivityLifecycleGuard.launchExternalActivity(
acquireConnectionLease = {},
releaseConnectionLease = { released = true },
prepareForBackground = {},
cleanupAfterLaunchFailure = {},
scheduleTimeout = { _, _ -> },
launch = {},
)
ExternalActivityLifecycleGuard.onHostPaused()
ExternalActivityLifecycleGuard.onHostResumed()
assertFalse(released)
ExternalActivityLifecycleGuard.onHostPaused()
ExternalActivityLifecycleGuard.externalActivityReturned()
assertFalse(released)
ExternalActivityLifecycleGuard.onHostResumed()
assertTrue(released)
}
@Test
fun abandonedPicker_timeoutReleasesConnectionLease() {
var timeoutAction: (() -> Unit)? = null
var released = false
ExternalActivityLifecycleGuard.launchExternalActivity(
acquireConnectionLease = {},
releaseConnectionLease = { released = true },
prepareForBackground = {},
cleanupAfterLaunchFailure = {},
scheduleTimeout = { _, action -> timeoutAction = action },
launch = {},
)
ExternalActivityLifecycleGuard.onHostPaused()
timeoutAction?.invoke()
assertTrue(released)
}
@Test
fun failedExternalActivityLaunch_cleansUpServiceAndConnectionLease() {
val calls = mutableListOf<String>()
runCatching {
ExternalActivityLifecycleGuard.launchExternalActivity(
acquireConnectionLease = { calls += "acquire" },
releaseConnectionLease = { calls += "release" },
prepareForBackground = { calls += "prepare" },
cleanupAfterLaunchFailure = { calls += "cleanup" },
scheduleTimeout = { _, _ -> },
launch = { error("picker unavailable") },
)
}
assertEquals(listOf("acquire", "prepare", "cleanup", "release"), calls)
}
}