@@ -70,18 +70,21 @@ class AndroidOptionsInitializerTest {
7070 useRealContext : Boolean = false,
7171 configureOptions : SentryAndroidOptions .() -> Unit = {},
7272 configureContext : Context .() -> Unit = {},
73- assets : AssetManager ? = null
73+ assets : AssetManager ? = null,
74+ customMockContext : Context ? = null,
75+ isFragmentAvailable : Boolean = false
7476 ) {
7577 sentryOptions.executorService = ImmediateExecutorService ()
76- mockContext = if (metadata != null ) {
77- ContextUtilsTestHelper .mockMetaData(
78- mockContext = ContextUtilsTestHelper .createMockContext(hasAppContext),
79- metaData = metadata,
80- assets = assets
81- )
82- } else {
83- ContextUtilsTestHelper .createMockContext(hasAppContext)
84- }
78+ mockContext = customMockContext
79+ ? : if (metadata != null ) {
80+ ContextUtilsTestHelper .mockMetaData(
81+ mockContext = ContextUtilsTestHelper .createMockContext(hasAppContext),
82+ metaData = metadata,
83+ assets = assets
84+ )
85+ } else {
86+ ContextUtilsTestHelper .createMockContext(hasAppContext)
87+ }
8588 whenever(mockContext.cacheDir).thenReturn(file)
8689 if (mockContext.applicationContext != null ) {
8790 whenever(mockContext.applicationContext.cacheDir).thenReturn(file)
@@ -101,7 +104,7 @@ class AndroidOptionsInitializerTest {
101104 BuildInfoProvider (AndroidLogger ()),
102105 loadClass,
103106 activityFramesTracker,
104- false ,
107+ isFragmentAvailable ,
105108 false ,
106109 false
107110 )
@@ -880,4 +883,24 @@ class AndroidOptionsInitializerTest {
880883 assertFalse { fixture.sentryOptions.socketTagger is AndroidSocketTagger }
881884 assertFalse { fixture.sentryOptions.compositePerformanceCollector is DefaultCompositePerformanceCollector }
882885 }
886+
887+ @Test
888+ fun `When given context which is not instance of Application use applicationContext to initialize activityLifecycleCallbacks integrations` () {
889+ fixture.initSut(isFragmentAvailable = true )
890+
891+ assertNotNull(fixture.sentryOptions.integrations.firstOrNull { it is ActivityBreadcrumbsIntegration })
892+ assertNotNull(fixture.sentryOptions.integrations.firstOrNull { it is CurrentActivityIntegration })
893+ assertNotNull(fixture.sentryOptions.integrations.firstOrNull { it is UserInteractionIntegration })
894+ assertNotNull(fixture.sentryOptions.integrations.firstOrNull { it is FragmentLifecycleIntegration }) // Only when fragment is available
895+ }
896+
897+ @Test
898+ fun `When given context applicationContext is not App do not initialize activityLifecycleCallbacks integrations` () {
899+ fixture.initSut(customMockContext = mock<Context >())
900+
901+ assertNull(fixture.sentryOptions.integrations.firstOrNull { it is ActivityBreadcrumbsIntegration })
902+ assertNull(fixture.sentryOptions.integrations.firstOrNull { it is CurrentActivityIntegration })
903+ assertNull(fixture.sentryOptions.integrations.firstOrNull { it is UserInteractionIntegration })
904+ assertNull(fixture.sentryOptions.integrations.firstOrNull { it is FragmentLifecycleIntegration }) // Only when fragment is available
905+ }
883906}
0 commit comments