@@ -11,11 +11,13 @@ import android.widget.AbsListView
1111import android.widget.ListAdapter
1212import androidx.core.view.ScrollingView
1313import io.sentry.Breadcrumb
14+ import io.sentry.ILogger
1415import io.sentry.IScope
1516import io.sentry.IScopes
1617import io.sentry.PropagationContext
1718import io.sentry.Scope
1819import io.sentry.ScopeCallback
20+ import io.sentry.SentryLevel
1921import io.sentry.SentryLevel.INFO
2022import io.sentry.android.core.SentryAndroidOptions
2123import kotlin.test.Test
@@ -28,6 +30,7 @@ import org.mockito.kotlin.doAnswer
2830import org.mockito.kotlin.inOrder
2931import org.mockito.kotlin.mock
3032import org.mockito.kotlin.never
33+ import org.mockito.kotlin.times
3134import org.mockito.kotlin.verify
3235import org.mockito.kotlin.verifyNoMoreInteractions
3336import org.mockito.kotlin.whenever
@@ -56,7 +59,7 @@ class SentryGestureListenerScrollTest {
5659 val directions = setOf (" up" , " down" , " left" , " right" )
5760
5861 internal inline fun <reified T : View > getSut (
59- resourceName : String = "test_scroll_view",
62+ resourceName : String? = "test_scroll_view",
6063 touchWithinBounds : Boolean = true,
6164 direction : String = "",
6265 ): SentryGestureListener {
@@ -229,6 +232,22 @@ class SentryGestureListenerScrollTest {
229232 verify(fixture.scope).propagationContext = any()
230233 }
231234
235+ @Test
236+ fun `logs error message only once per gesture when no scroll target is found` () {
237+ val logger = mock<ILogger >()
238+ fixture.options.setLogger(logger)
239+ fixture.options.isDebug = true
240+ val sut = fixture.getSut<ScrollableListView >(resourceName = null )
241+
242+ sut.onDown(fixture.firstEvent)
243+ fixture.eventsInBetween.forEach { sut.onScroll(fixture.firstEvent, it, 10.0f , 0f ) }
244+ sut.onUp(fixture.endEvent)
245+
246+ // Verify that the error message is logged only once during the entire gesture
247+ verify(logger, times(1 ))
248+ .log(SentryLevel .DEBUG , " Unable to find scroll target. No breadcrumb captured." )
249+ }
250+
232251 internal class ScrollableView : View (mock()), ScrollingView {
233252 override fun computeVerticalScrollOffset (): Int = 0
234253
0 commit comments