@@ -62,8 +62,13 @@ internal class EmbraceAnrServiceTest {
6262 with (rule) {
6363 val listener = FakeBlockedThreadListener ()
6464 anrService.addBlockedThreadListener(listener)
65- assertEquals(anrService, blockedThreadDetector.listener)
66- assertTrue(anrService.listeners.contains(listener))
65+
66+ // Test that the listener actually gets notified when thread blocking events occur
67+ anrService.onThreadBlocked(currentThread(), 1000L )
68+ assertEquals(1 , listener.blockedCount)
69+
70+ anrService.onThreadUnblocked(currentThread(), 2000L )
71+ assertEquals(1 , listener.unblockedCount)
6772 }
6873 }
6974
@@ -75,15 +80,15 @@ internal class EmbraceAnrServiceTest {
7580 anrService.onForeground(true , 0L )
7681
7782 // assert no ANR interval was added
78- assertEquals(0 , anrService. stacktraceSampler.anrIntervals.size)
83+ assertEquals(0 , stacktraceSampler.anrIntervals.size)
7984 }
8085 }
8186
8287 @Test
8388 fun testCleanCollections () {
8489 with (rule) {
8590 // assert the ANR interval was added
86- val anrIntervals = anrService. stacktraceSampler.anrIntervals
91+ val anrIntervals = stacktraceSampler.anrIntervals
8792 anrIntervals.add(AnrInterval (startTime = 15000000 , endTime = 15000100 ))
8893 val inProgressInterval = AnrInterval (startTime = 15000000 , lastKnownTime = 15000100 )
8994 anrIntervals.add(inProgressInterval)
@@ -101,7 +106,7 @@ internal class EmbraceAnrServiceTest {
101106 @Test
102107 fun testGetIntervals () {
103108 with (rule) {
104- populateAnrIntervals(anrService )
109+ populateAnrIntervals()
105110
106111 val anrIntervals = anrService.getCapturedData()
107112 assertEquals(5 , anrIntervals.size)
@@ -153,8 +158,8 @@ internal class EmbraceAnrServiceTest {
153158 blockedThreadDetector.listener = anrService
154159 state.anrInProgress = true
155160 state.lastTargetThreadResponseMs = 15000000L
156- anrService.processAnrTick( clock.now())
157- assertEquals(1 , anrService. stacktraceSampler.size())
161+ anrService.onThreadBlockedInterval(currentThread(), clock.now())
162+ assertEquals(1 , stacktraceSampler.size())
158163
159164 // assert only one anr interval was added from the anrInProgress flag
160165 val anrIntervals = anrService.getCapturedData()
@@ -257,10 +262,9 @@ internal class EmbraceAnrServiceTest {
257262 }
258263 anrService.onThreadUnblocked(currentThread(), clock.now())
259264
260- val sampler = anrService.stacktraceSampler
261- assertEquals(1 , sampler.anrIntervals.size)
265+ assertEquals(1 , stacktraceSampler.anrIntervals.size)
262266
263- val interval = checkNotNull(sampler .anrIntervals.first())
267+ val interval = checkNotNull(stacktraceSampler .anrIntervals.first())
264268 val samples = checkNotNull(interval.anrSampleList).samples
265269 assertEquals(count, samples.size)
266270
@@ -287,8 +291,8 @@ internal class EmbraceAnrServiceTest {
287291 // create an ANR service with config that disables ANR capture
288292 rule.anrBehavior.anrCaptureEnabled = false
289293 clock.setCurrentTime(15020000L )
290- anrService.processAnrTick( clock.now())
291- assertEquals(0 , anrService. stacktraceSampler.size())
294+ anrService.onThreadBlockedInterval(currentThread(), clock.now())
295+ assertEquals(0 , stacktraceSampler.size())
292296
293297 // assert no anr intervals were added
294298 val anrIntervals = anrService.getCapturedData()
@@ -300,16 +304,15 @@ internal class EmbraceAnrServiceTest {
300304 fun testReachedAnrCaptureLimit () {
301305 with (rule) {
302306 rule.anrBehavior.anrPerSessionImpl = 3
303- val state = anrService.stacktraceSampler
304- assertFalse(state.reachedAnrStacktraceCaptureLimit())
307+ assertFalse(stacktraceSampler.reachedAnrStacktraceCaptureLimit())
305308
306- state .anrIntervals.add(AnrInterval (0 , anrSampleList = AnrSampleList (listOf ())))
307- state .anrIntervals.add(AnrInterval (0 , anrSampleList = AnrSampleList (listOf ())))
308- state .anrIntervals.add(AnrInterval (0 , anrSampleList = AnrSampleList (listOf ())))
309- assertFalse(state .reachedAnrStacktraceCaptureLimit())
309+ stacktraceSampler .anrIntervals.add(AnrInterval (0 , anrSampleList = AnrSampleList (listOf ())))
310+ stacktraceSampler .anrIntervals.add(AnrInterval (0 , anrSampleList = AnrSampleList (listOf ())))
311+ stacktraceSampler .anrIntervals.add(AnrInterval (0 , anrSampleList = AnrSampleList (listOf ())))
312+ assertFalse(stacktraceSampler .reachedAnrStacktraceCaptureLimit())
310313
311- state .anrIntervals.add(AnrInterval (0 , anrSampleList = AnrSampleList (listOf ())))
312- assertTrue(state .reachedAnrStacktraceCaptureLimit())
314+ stacktraceSampler .anrIntervals.add(AnrInterval (0 , anrSampleList = AnrSampleList (listOf ())))
315+ assertTrue(stacktraceSampler .reachedAnrStacktraceCaptureLimit())
313316 }
314317 }
315318
@@ -401,21 +404,23 @@ internal class EmbraceAnrServiceTest {
401404 anrExecutorService.submit {
402405 assertTrue(state.started.get())
403406 }
404- populateAnrIntervals(anrService )
407+ populateAnrIntervals()
405408 anrService.handleCrash(" " )
406409 val anrIntervals = anrService.getCapturedData()
407410 assertEquals(5 , anrIntervals.size)
408411 assertFalse(state.started.get())
409412 }
410413 }
411414
412- private fun populateAnrIntervals (anrService : EmbraceAnrService ) {
413- val state = anrService.stacktraceSampler
414- state.anrIntervals.add(AnrInterval (startTime = 14000000L ))
415- state.anrIntervals.add(AnrInterval (startTime = 15000000L ))
416- state.anrIntervals.add(AnrInterval (startTime = 15000500L ))
417- state.anrIntervals.add(AnrInterval (startTime = 15001000L ))
418- state.anrIntervals.add(AnrInterval (startTime = 16000000L ))
415+ private fun populateAnrIntervals () {
416+ with (rule) {
417+ val state = stacktraceSampler
418+ state.anrIntervals.add(AnrInterval (startTime = 14000000L ))
419+ state.anrIntervals.add(AnrInterval (startTime = 15000000L ))
420+ state.anrIntervals.add(AnrInterval (startTime = 15000500L ))
421+ state.anrIntervals.add(AnrInterval (startTime = 15001000L ))
422+ state.anrIntervals.add(AnrInterval (startTime = 16000000L ))
423+ }
419424 }
420425
421426 /* *
0 commit comments