88package io.bitdrift.capture.reports.exitinfo
99
1010import android.app.ActivityManager
11+ import android.app.ApplicationExitInfo
1112import com.nhaarman.mockitokotlin2.any
1213import com.nhaarman.mockitokotlin2.eq
1314import com.nhaarman.mockitokotlin2.mock
1415import com.nhaarman.mockitokotlin2.never
1516import com.nhaarman.mockitokotlin2.verify
17+ import com.nhaarman.mockitokotlin2.whenever
1618import io.bitdrift.capture.IInternalLogger
1719import org.assertj.core.api.Assertions.assertThat
1820import org.junit.Before
@@ -102,7 +104,7 @@ class PreviousRunInfoResolverTest {
102104
103105 @Test
104106 @Config(sdk = [30 ])
105- fun initLegacyWatcher_isNoopOnApi30 () {
107+ fun initLegacyWatcher_whenApi30_shouldBeNoop () {
106108 val sdkDir = tempFolder.root.absolutePath
107109 resolver.initLegacyWatcher(sdkDir)
108110
@@ -111,12 +113,42 @@ class PreviousRunInfoResolverTest {
111113
112114 @Test
113115 @Config(sdk = [30 ])
114- fun persistJvmCrashState_isNoopOnApi30 () {
116+ fun persistJvmCrashState_whenApi30_shouldBeNoop () {
115117 val sdkDir = tempFolder.root.absolutePath
116118 resolver.initLegacyWatcher(sdkDir)
117119 resolver.persistJvmCrashState()
118120
119121 assertThat(tempFolder.root.resolve(" reports/previous_run_info.state" ).exists()).isFalse()
120122 verify(internalLogger, never()).logInternalError(any(), any(), any())
121123 }
124+
125+ @Test
126+ @Config(sdk = [30 ])
127+ fun get_onApi30_returnsFatalForCrashReason () {
128+ val appExitInfo: ApplicationExitInfo = mock()
129+ whenever(appExitInfo.reason).thenReturn(ApplicationExitInfo .REASON_CRASH )
130+ val provider = ILatestAppExitInfoProvider { LatestAppExitReasonResult .Valid (appExitInfo) }
131+ val api30Resolver = PreviousRunInfoResolver (internalLogger, provider)
132+
133+ val result = api30Resolver.get(activityManager)
134+
135+ assertThat(result).isEqualTo(
136+ PreviousRunInfo (hasFatallyTerminated = true , reason = ExitReason .JvmCrash ),
137+ )
138+ }
139+
140+ @Test
141+ @Config(sdk = [30 ])
142+ fun get_onApi30_returnsNonFatalForUserRequested () {
143+ val appExitInfo: ApplicationExitInfo = mock()
144+ whenever(appExitInfo.reason).thenReturn(ApplicationExitInfo .REASON_USER_REQUESTED )
145+ val provider = ILatestAppExitInfoProvider { LatestAppExitReasonResult .Valid (appExitInfo) }
146+ val api30Resolver = PreviousRunInfoResolver (internalLogger, provider)
147+
148+ val result = api30Resolver.get(activityManager)
149+
150+ assertThat(result).isEqualTo(
151+ PreviousRunInfo (hasFatallyTerminated = false , reason = ExitReason .UserRequested ),
152+ )
153+ }
122154}
0 commit comments