This repository has been archived by the owner on Aug 30, 2023. It is now read-only.
/
SentryAndroidTest.kt
125 lines (99 loc) · 4.09 KB
/
SentryAndroidTest.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
116
117
118
119
120
121
122
123
124
125
package io.sentry.android.core
import android.content.Context
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.os.Bundle
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.nhaarman.mockitokotlin2.any
import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.eq
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.never
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import io.sentry.core.ILogger
import io.sentry.core.Sentry
import io.sentry.core.SentryLevel
import java.io.File
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class SentryAndroidTest {
private lateinit var context: Context
private lateinit var file: File
@BeforeTest
fun `set up`() {
context = ApplicationProvider.getApplicationContext()
file = context.cacheDir
Sentry.close()
}
@Test
fun `when auto-init is disabled and user calls init manually, SDK initializes`() {
assertFalse(Sentry.isEnabled())
val mockContext = createMockContext()
val metaData = Bundle()
mockMetaData(mockContext, metaData)
metaData.putString(ManifestMetadataReader.DSN, "https://key@sentry.io/123")
metaData.putBoolean(ManifestMetadataReader.AUTO_INIT, false)
SentryAndroid.init(mockContext)
assertTrue(Sentry.isEnabled())
}
@Test
fun `when auto-init is disabled and user calls init manually with a logger, SDK initializes`() {
assertFalse(Sentry.isEnabled())
val mockContext = createMockContext()
val metaData = Bundle()
mockMetaData(mockContext, metaData)
metaData.putString(ManifestMetadataReader.DSN, "https://key@sentry.io/123")
metaData.putBoolean(ManifestMetadataReader.AUTO_INIT, false)
val logger = mock<ILogger>()
SentryAndroid.init(mockContext, logger)
assertTrue(Sentry.isEnabled())
}
@Test
fun `when auto-init is disabled and user calls init manually with configuration handler, options should be set`() {
assertFalse(Sentry.isEnabled())
val mockContext = createMockContext()
val metaData = Bundle()
mockMetaData(mockContext, metaData)
metaData.putString(ManifestMetadataReader.DSN, "https://key@sentry.io/123")
metaData.putBoolean(ManifestMetadataReader.AUTO_INIT, false)
var refOptions: SentryAndroidOptions? = null
SentryAndroid.init(mockContext) { options ->
options.anrTimeoutIntervalMills = 3000
refOptions = options
}
assertEquals(3000, refOptions!!.anrTimeoutIntervalMills)
assertTrue(Sentry.isEnabled())
}
@Test
fun `init won't throw exception`() {
val mockContext = createMockContext()
val metaData = Bundle()
mockMetaData(mockContext, metaData)
metaData.putString(ManifestMetadataReader.DSN, "https://key@sentry.io/123")
val logger = mock<ILogger>()
SentryAndroid.init(mockContext, logger)
verify(logger, never()).log(eq(SentryLevel.FATAL), any<String>(), any())
}
private fun createMockContext(): Context {
val mockContext = mock<Context> {
on { applicationContext } doReturn context
}
whenever(mockContext.cacheDir).thenReturn(file)
return mockContext
}
private fun mockMetaData(mockContext: Context, metaData: Bundle) {
val mockPackageManager: PackageManager = mock()
val mockApplicationInfo: ApplicationInfo = mock()
whenever(mockContext.packageName).thenReturn("io.sentry.sample.test")
whenever(mockContext.packageManager).thenReturn(mockPackageManager)
whenever(mockPackageManager.getApplicationInfo(mockContext.packageName, PackageManager.GET_META_DATA)).thenReturn(mockApplicationInfo)
mockApplicationInfo.metaData = metaData
}
}