@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);
 }