@Test public void releaseThenGc() { assertBindingCallCounts(); component.parentReleasableScope1Manager().releaseStrongReferences(); // release scope 1 assertBindingCallCounts(); // no change to scoped bindings gcAndWaitUntilWeakReferencesCleared( ParentModule.class, ChildModule.class, ParentReleasableScope1.class); // GC parentAsserts.expectedCallsForParentReleasableScope1Thing++; // expect scope 1 bindings again assertBindingCallCounts(); }
@Test public void releasableReferenceManagers() { ImmutableMap<Class<? extends Annotation>, ReleasableReferenceManager> managers = Maps.uniqueIndex( component.managers(), new Function<ReleasableReferenceManager, Class<? extends Annotation>>() { @Override public Class<? extends Annotation> apply( ReleasableReferenceManager releasableReferenceManager) { return releasableReferenceManager.scope(); } }); assertThat(managers) .containsEntry(ParentReleasableScope1.class, component.parentReleasableScope1Manager()); assertThat(managers) .containsEntry(ParentReleasableScope2.class, component.parentReleasableScope2Manager()); assertThat(managers) .containsEntry(ChildReleasableScope1.class, component.childReleasableScope1Manager()); assertThat(managers) .containsEntry(ChildReleasableScope2.class, component.childReleasableScope2Manager()); // Should contain a manager for ChildReleasableScope3 even though // @ForReleasableReferences(Scope5.class) isn't needed. assertThat(managers).containsKey(ChildReleasableScope3.class); }