@@ -6,13 +6,15 @@ import io.sentry.protocol.SentryId
66import io.sentry.protocol.User
77import io.sentry.test.callMethod
88import org.junit.Assert.assertArrayEquals
9+ import org.mockito.kotlin.any
910import org.mockito.kotlin.argThat
1011import org.mockito.kotlin.check
1112import org.mockito.kotlin.eq
1213import org.mockito.kotlin.mock
1314import org.mockito.kotlin.never
1415import org.mockito.kotlin.times
1516import org.mockito.kotlin.verify
17+ import org.mockito.kotlin.verifyNoInteractions
1618import org.mockito.kotlin.whenever
1719import java.util.concurrent.CopyOnWriteArrayList
1820import kotlin.test.Test
@@ -339,6 +341,66 @@ class ScopeTest {
339341 assertEquals(1 , scope.breadcrumbs.count())
340342 }
341343
344+ @Test
345+ fun `when adding breadcrumb and maxBreadcrumb is 0, beforeBreadcrumb is not executed` () {
346+ var called = false
347+ val options = SentryOptions ().apply {
348+ maxBreadcrumbs = 0
349+ beforeBreadcrumb = SentryOptions .BeforeBreadcrumbCallback { breadcrumb, _ ->
350+ called = true
351+ breadcrumb
352+ }
353+ }
354+
355+ val scope = Scope (options)
356+ scope.addBreadcrumb(Breadcrumb ())
357+ assertEquals(0 , scope.breadcrumbs.count())
358+ assertFalse(called)
359+ }
360+
361+ @Test
362+ fun `when adding breadcrumb and maxBreadcrumb is not 0, beforeBreadcrumb is executed` () {
363+ var called = false
364+ val options = SentryOptions ().apply {
365+ beforeBreadcrumb = SentryOptions .BeforeBreadcrumbCallback { breadcrumb, _ ->
366+ called = true
367+ breadcrumb
368+ }
369+ }
370+
371+ val scope = Scope (options)
372+ scope.addBreadcrumb(Breadcrumb ())
373+ assertEquals(1 , scope.breadcrumbs.count())
374+ assertTrue(called)
375+ }
376+
377+ @Test
378+ fun `when adding breadcrumb and maxBreadcrumb is 0, scopesObservers are not called` () {
379+ val observer = mock<IScopeObserver >()
380+ val options = SentryOptions ().apply {
381+ maxBreadcrumbs = 0
382+ addScopeObserver(observer)
383+ }
384+
385+ val scope = Scope (options)
386+ scope.addBreadcrumb(Breadcrumb ())
387+ assertEquals(0 , scope.breadcrumbs.count())
388+ verifyNoInteractions(observer)
389+ }
390+
391+ @Test
392+ fun `when adding breadcrumb and maxBreadcrumb is not 0, scopesObservers are called` () {
393+ val observer = mock<IScopeObserver >()
394+ val options = SentryOptions ().apply {
395+ addScopeObserver(observer)
396+ }
397+
398+ val scope = Scope (options)
399+ scope.addBreadcrumb(Breadcrumb ())
400+ assertEquals(1 , scope.breadcrumbs.count())
401+ verify(observer).addBreadcrumb(any())
402+ }
403+
342404 @Test
343405 fun `when adding eventProcessor, eventProcessor should be in the list` () {
344406 val processor = CustomEventProcessor ()
0 commit comments