forked from getsentry/sentry-java
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FragmentLifecycleIntegrationTest.kt
115 lines (94 loc) · 3.88 KB
/
FragmentLifecycleIntegrationTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package io.sentry.android.fragment
import android.app.Activity
import android.app.Application
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import com.nhaarman.mockitokotlin2.check
import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.eq
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import io.sentry.IHub
import io.sentry.SentryOptions
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
class FragmentLifecycleIntegrationTest {
private class Fixture {
val application = mock<Application>()
val fragmentManager = mock<FragmentManager>()
val fragmentActivity = mock<FragmentActivity> {
on { supportFragmentManager } doReturn fragmentManager
}
val hub = mock<IHub>()
val options = SentryOptions()
fun getSut(
enableFragmentLifecycleBreadcrumbs: Boolean = true,
enableAutoFragmentLifecycleTracing: Boolean = false
): FragmentLifecycleIntegration {
whenever(hub.options).thenReturn(options)
return FragmentLifecycleIntegration(
application = application,
enableFragmentLifecycleBreadcrumbs = enableFragmentLifecycleBreadcrumbs,
enableAutoFragmentLifecycleTracing = enableAutoFragmentLifecycleTracing
)
}
}
private val fixture = Fixture()
@Test
fun `When register, it should register activity lifecycle callbacks`() {
val sut = fixture.getSut()
sut.register(fixture.hub, fixture.options)
verify(fixture.application).registerActivityLifecycleCallbacks(sut)
}
@Test
fun `When close, it should unregister lifecycle callbacks`() {
val sut = fixture.getSut()
sut.register(fixture.hub, fixture.options)
sut.close()
verify(fixture.application).unregisterActivityLifecycleCallbacks(sut)
}
@Test
fun `When FragmentActivity is created, it should register fragment lifecycle callbacks`() {
val sut = fixture.getSut()
val fragmentManager = mock<FragmentManager>()
val fragmentActivity = mock<FragmentActivity> {
on { supportFragmentManager } doReturn fragmentManager
}
sut.register(fixture.hub, fixture.options)
sut.onActivityCreated(fragmentActivity, savedInstanceState = null)
verify(fragmentManager).registerFragmentLifecycleCallbacks(
check { fragmentCallbacks ->
fragmentCallbacks is SentryFragmentLifecycleCallbacks
},
eq(true)
)
}
@Test
fun `When FragmentActivity is created, it should register fragment lifecycle callbacks with passed config`() {
val sut = fixture.getSut(enableFragmentLifecycleBreadcrumbs = false, enableAutoFragmentLifecycleTracing = true)
sut.register(fixture.hub, fixture.options)
sut.onActivityCreated(fixture.fragmentActivity, savedInstanceState = null)
verify(fixture.fragmentManager).registerFragmentLifecycleCallbacks(
check { fragmentCallbacks ->
val callback = (fragmentCallbacks as SentryFragmentLifecycleCallbacks)
assertTrue(callback.enableAutoFragmentLifecycleTracing)
assertEquals(emptySet(), callback.filterFragmentLifecycleBreadcrumbs)
},
eq(true)
)
}
@Test
fun `When not a FragmentActivity is created, it should not crash`() {
val sut = fixture.getSut()
val activity = mock<Activity>()
sut.register(fixture.hub, fixture.options)
sut.onActivityCreated(activity, savedInstanceState = null)
}
@Test
fun `When close is called without register, it should not crash`() {
val sut = fixture.getSut()
sut.close()
}
}