diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java b/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java new file mode 100644 index 000000000..67f8a83b6 --- /dev/null +++ b/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java @@ -0,0 +1,20 @@ +package io.sentry.android.core; + +import android.content.Context; +import io.sentry.core.Sentry; +import io.sentry.core.util.NonNull; + +/** Sentry initialization class */ +public final class SentryAndroid { + + private SentryAndroid() {} + + /** + * Sentry initialization method if auto-init is disabled + * + * @param context Application. context + */ + public static void init(@NonNull final Context context) { + Sentry.init(options -> AndroidOptionsInitializer.init(options, context)); + } +} diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt new file mode 100644 index 000000000..6ec9b8063 --- /dev/null +++ b/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt @@ -0,0 +1,63 @@ +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.doReturn +import com.nhaarman.mockitokotlin2.mock +import com.nhaarman.mockitokotlin2.whenever +import io.sentry.core.Sentry +import java.io.File +import kotlin.test.BeforeTest +import kotlin.test.Test +import kotlin.test.assertFalse +import kotlin.test.assertTrue +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class SentryAndroidTest { + private lateinit var context: Context + + @BeforeTest + fun `set up`() { + context = ApplicationProvider.getApplicationContext() + Sentry.close() + } + + @Test + fun `when applicationId is defined, dsn in meta-data, SDK initializes`() { + assertFalse(Sentry.isEnabled()) + + val mockContext = createMockContext() + val metaData = Bundle() + mockMetaData(mockContext, metaData) + + metaData.putString(ManifestMetadataReader.DSN_KEY, "https://key@sentry.io/123") + + SentryAndroid.init(mockContext) + + assertTrue(Sentry.isEnabled()) + } + + private fun createMockContext(): Context { + val mockContext = mock { + on { applicationContext } doReturn context + } + whenever(mockContext.cacheDir).thenReturn(File("${File.separator}cache")) + 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 + } +} diff --git a/sentry-sample/src/main/AndroidManifest.xml b/sentry-sample/src/main/AndroidManifest.xml index a90efc34b..03b1fee3e 100644 --- a/sentry-sample/src/main/AndroidManifest.xml +++ b/sentry-sample/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ package="io.sentry.sample">