Skip to content

Commit ec5501e

Browse files
committed
Add a few more tests
1 parent e993340 commit ec5501e

File tree

1 file changed

+47
-15
lines changed

1 file changed

+47
-15
lines changed

platform/jvm/capture/src/test/kotlin/io/bitdrift/capture/reports/exitinfo/PreviousRunInfoResolverTest.kt

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
package io.bitdrift.capture.reports.exitinfo
99

1010
import android.app.ActivityManager
11+
import android.app.ApplicationExitInfo
1112
import com.nhaarman.mockitokotlin2.any
1213
import com.nhaarman.mockitokotlin2.eq
1314
import com.nhaarman.mockitokotlin2.mock
1415
import com.nhaarman.mockitokotlin2.never
1516
import com.nhaarman.mockitokotlin2.verify
17+
import com.nhaarman.mockitokotlin2.whenever
1618
import io.bitdrift.capture.IInternalLogger
1719
import org.assertj.core.api.Assertions.assertThat
1820
import org.junit.Before
@@ -31,18 +33,18 @@ class PreviousRunInfoResolverTest {
3133

3234
private val internalLogger: IInternalLogger = mock()
3335
private val activityManager: ActivityManager = mock()
34-
private lateinit var resolver: PreviousRunInfoResolver
36+
private lateinit var previousRunInfoResolver: PreviousRunInfoResolver
3537

3638
@Before
3739
fun setUp() {
38-
resolver = PreviousRunInfoResolver(internalLogger)
40+
previousRunInfoResolver = PreviousRunInfoResolver(internalLogger)
3941
}
4042

4143
@Test
4244
fun initLegacyWatcher_whenNoStateFile_returnsNoCrash() {
43-
resolver.initLegacyWatcher(tempFolder.root.absolutePath)
45+
previousRunInfoResolver.initLegacyWatcher(tempFolder.root.absolutePath)
4446

45-
val result = resolver.get(activityManager)
47+
val result = previousRunInfoResolver.get(activityManager)
4648

4749
assertThat(result).isNull()
4850
}
@@ -51,8 +53,8 @@ class PreviousRunInfoResolverTest {
5153
fun get_afterPersistJvmCrashState_returnsCrashOnNextInit() {
5254
val sdkDir = tempFolder.root.absolutePath
5355

54-
resolver.initLegacyWatcher(sdkDir)
55-
resolver.persistJvmCrashState()
56+
previousRunInfoResolver.initLegacyWatcher(sdkDir)
57+
previousRunInfoResolver.persistJvmCrashState()
5658

5759
val nextRunResolver = PreviousRunInfoResolver(internalLogger)
5860
nextRunResolver.initLegacyWatcher(sdkDir)
@@ -67,8 +69,8 @@ class PreviousRunInfoResolverTest {
6769
fun initLegacyWatcher_resetsStateForCurrentRun() {
6870
val sdkDir = tempFolder.root.absolutePath
6971

70-
resolver.initLegacyWatcher(sdkDir)
71-
resolver.persistJvmCrashState()
72+
previousRunInfoResolver.initLegacyWatcher(sdkDir)
73+
previousRunInfoResolver.persistJvmCrashState()
7274

7375
val secondResolver = PreviousRunInfoResolver(internalLogger)
7476
secondResolver.initLegacyWatcher(sdkDir)
@@ -84,14 +86,14 @@ class PreviousRunInfoResolverTest {
8486

8587
@Test
8688
fun get_beforeInitLegacyWatcher_returnsNull() {
87-
val result = resolver.get(activityManager)
89+
val result = previousRunInfoResolver.get(activityManager)
8890

8991
assertThat(result).isNull()
9092
}
9193

9294
@Test
9395
fun persistJvmCrashState_beforeInit_logsInternalError() {
94-
resolver.persistJvmCrashState()
96+
previousRunInfoResolver.persistJvmCrashState()
9597

9698
verify(internalLogger).logInternalError(
9799
eq(null),
@@ -102,21 +104,51 @@ class PreviousRunInfoResolverTest {
102104

103105
@Test
104106
@Config(sdk = [30])
105-
fun initLegacyWatcher_isNoopOnApi30() {
107+
fun initLegacyWatcher_whenApi30_shouldBeNoop() {
106108
val sdkDir = tempFolder.root.absolutePath
107-
resolver.initLegacyWatcher(sdkDir)
109+
previousRunInfoResolver.initLegacyWatcher(sdkDir)
108110

109111
assertThat(tempFolder.root.resolve("reports/previous_run_info.state").exists()).isFalse()
110112
}
111113

112114
@Test
113115
@Config(sdk = [30])
114-
fun persistJvmCrashState_isNoopOnApi30() {
116+
fun persistJvmCrashState_whenApi30_shouldBeNoop() {
115117
val sdkDir = tempFolder.root.absolutePath
116-
resolver.initLegacyWatcher(sdkDir)
117-
resolver.persistJvmCrashState()
118+
previousRunInfoResolver.initLegacyWatcher(sdkDir)
119+
previousRunInfoResolver.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

Comments
 (0)