A couple of test changes:
 - to ensure that lookups are valid by the time InjectionListener.hear() is called
 - to ensure that classes with no @Inject-annotated members still fire the injectable type listener. This test is currently failing.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@923 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/test/com/google/inject/InjectableTypeListenerTest.java b/test/com/google/inject/InjectableTypeListenerTest.java
index 9c5e831..d420b31 100644
--- a/test/com/google/inject/InjectableTypeListenerTest.java
+++ b/test/com/google/inject/InjectableTypeListenerTest.java
@@ -350,6 +350,16 @@
     final AtomicReference<MembersInjector<A>> aMembersInjectorReference
         = new AtomicReference<MembersInjector<A>>();
 
+    final InjectionListener<Object> lookupsTester = new InjectionListener<Object>() {
+      public void afterInjection(Object injectee) {
+        assertNotNull(bProviderReference.get().get());
+
+        A a = new A();
+        aMembersInjectorReference.get().injectMembers(a);
+        assertNotNull(a.injector);
+      }
+    };
+
     Guice.createInjector(new AbstractModule() {
       protected void configure() {
         bindListener(only(TypeLiteral.get(C.class)), new InjectableType.Listener() {
@@ -374,18 +384,17 @@
                   expected.getMessage());
             }
             aMembersInjectorReference.set(aMembersInjector);
+
+            encounter.register(lookupsTester);
           }
         });
 
-        bind(C.class);
+        // this ensures the type listener fires, and also the afterInjection() listener
+        bind(C.class).asEagerSingleton();
       }
     });
 
-    assertNotNull(bProviderReference.get().get());
-
-    A a = new A();
-    aMembersInjectorReference.get().injectMembers(a);
-    assertNotNull(a.injector);
+    lookupsTester.afterInjection(null);
   }
 
   public void testLookupsPostCreate() {
@@ -406,6 +415,29 @@
     injector.getInstance(C.class);
   }
 
+  /**
+   * We had a bug where we weren't notifying of types encountered for member injection when those
+   * types had no members to be injected. Constructed types are always injected because they always
+   * have at least one injection point: the class constructor.
+   */
+  public void testTypesWithNoInjectableMembersAreNotified() {
+    final AtomicInteger notificationCount = new AtomicInteger();
+
+    Guice.createInjector(new AbstractModule() {
+      protected void configure() {
+        bindListener(any(), new InjectableType.Listener() {
+          public <I> void hear(InjectableType<I> injectableType, Encounter<I> encounter) {
+            notificationCount.incrementAndGet();
+          }
+        });
+
+        bind(C.class).toInstance(new C());
+      }
+    });
+
+    assertEquals(1, notificationCount.get());
+  }
+
   // TODO: recursively accessing a lookup should fail
 
   static class A {