1 package leakcanary 2 3 import androidx.lifecycle.LifecycleObserver 4 import leakcanary.TestUtils.detectLeaks 5 import org.assertj.core.api.Assertions.assertThat 6 import org.junit.After 7 import org.junit.Before 8 import org.junit.Rule 9 import org.junit.Test 10 11 class ObjectInspectorTest : HasActivityTestRule<TestActivity> { 12 13 @get:Rule 14 override val activityRule = activityTestRule<TestActivity>(launchActivity = false) 15 setUpnull16 @Before fun setUp() { 17 AppWatcher.objectWatcher.clearWatchedObjects() 18 } 19 tearDownnull20 @After fun tearDown() { 21 AppWatcher.objectWatcher.clearWatchedObjects() 22 } 23 LifecycleRegistry_LeakingStatus_Is_Reportednull24 @Test fun LifecycleRegistry_LeakingStatus_Is_Reported() { 25 triggersOnActivityCreated { 26 activityRule.launchActivity(null) 27 } 28 activity.lifecycle retained { 29 runOnMainSync { 30 val observer = object : LifecycleObserver {} 31 activity.lifecycle.addObserver(observer) 32 AppWatcher.objectWatcher.expectWeaklyReachable(observer, "observer") 33 } 34 triggersOnActivityDestroyed { 35 activityRule.finishActivity() 36 } 37 Thread.sleep(AppWatcher.retainedDelayMillis) 38 39 val heapAnalysis = detectLeaks() 40 41 val leaktrace = heapAnalysis.allLeaks.single().leakTraces.single() 42 val ref = leaktrace.referencePath.single { it.owningClassSimpleName == "LifecycleRegistry" } 43 val lifecycleRegistry = ref.originObject 44 assertThat(lifecycleRegistry.labels.single()).isEqualTo("state = DESTROYED") 45 } 46 } 47 } 48