Author: limpbizkit
Date: Mon Mar 30 17:37:29 2009
New Revision: 921

Modified:
    trunk/src/com/google/inject/spi/MembersInjectorLookup.java
    trunk/src/com/google/inject/spi/ProviderLookup.java
    trunk/test/com/google/inject/spi/ElementsTest.java

Log:
Adding test coverage for calling 'initialize' on ProviderLookups and  
MembersInjectorLookups, and fixing the bugs the tests show in their  
applyTo() methods.

These two elements are stateful, which may be surprising.

Modified: trunk/src/com/google/inject/spi/MembersInjectorLookup.java
==============================================================================
--- trunk/src/com/google/inject/spi/MembersInjectorLookup.java  (original)
+++ trunk/src/com/google/inject/spi/MembersInjectorLookup.java  Mon Mar 30  
17:37:29 2009
@@ -69,7 +69,7 @@
    }

    public void applyTo(Binder binder) {
-    binder.withSource(getSource()).getMembersInjector(type);
+     
initializeDelegate(binder.withSource(getSource()).getMembersInjector(type));
    }

    /**

Modified: trunk/src/com/google/inject/spi/ProviderLookup.java
==============================================================================
--- trunk/src/com/google/inject/spi/ProviderLookup.java (original)
+++ trunk/src/com/google/inject/spi/ProviderLookup.java Mon Mar 30 17:37:29  
2009
@@ -65,7 +65,7 @@
    }

    public void applyTo(Binder binder) {
-    binder.withSource(getSource()).getProvider(key);
+    initializeDelegate(binder.withSource(getSource()).getProvider(key));
    }

    /**

Modified: trunk/test/com/google/inject/spi/ElementsTest.java
==============================================================================
--- trunk/test/com/google/inject/spi/ElementsTest.java  (original)
+++ trunk/test/com/google/inject/spi/ElementsTest.java  Mon Mar 30 17:37:29  
2009
@@ -39,6 +39,7 @@
  import com.google.inject.matcher.Matcher;
  import com.google.inject.matcher.Matchers;
  import com.google.inject.name.Names;
+import com.google.inject.util.Providers;
  import java.lang.annotation.Annotation;
  import java.lang.annotation.ElementType;
  import java.lang.annotation.Retention;
@@ -54,6 +55,7 @@
  import java.util.Set;
  import java.util.TreeSet;
  import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
  import junit.framework.TestCase;

  /**
@@ -677,6 +679,51 @@
            }
          }
      );
+  }
+
+  public void testElementInitialization() {
+    final AtomicReference<Provider<String>> providerFromBinder
+        = new AtomicReference<Provider<String>>();
+    final AtomicReference<MembersInjector<String>>  
membersInjectorFromBinder
+        = new AtomicReference<MembersInjector<String>>();
+
+    final AtomicReference<String> lastInjected = new  
AtomicReference<String>();
+    final MembersInjector<String> stringInjector = new  
MembersInjector<String>() {
+      public void injectMembers(String instance) {
+        lastInjected.set(instance);
+      }
+    };
+
+    checkModule(
+        new AbstractModule() {
+          protected void configure() {
+            providerFromBinder.set(getProvider(String.class));
+             
membersInjectorFromBinder.set(getMembersInjector(String.class));
+          }
+        },
+
+        new FailingElementVisitor() {
+          public <T> Void visit(ProviderLookup<T> providerLookup) {
+            @SuppressWarnings("unchecked") // we know that T is a String  
here
+            ProviderLookup<String> stringLookup = (ProviderLookup<String>)  
providerLookup;
+            stringLookup.initializeDelegate(Providers.of("out"));
+
+            assertEquals("out", providerFromBinder.get().get());
+            return null;
+          }
+        },
+
+        new FailingElementVisitor() {
+          @Override public <T> Void visit(MembersInjectorLookup<T> lookup)  
{
+            @SuppressWarnings("unchecked") // we know that T is a String  
here
+            MembersInjectorLookup<String> stringLookup =  
(MembersInjectorLookup<String>) lookup;
+            stringLookup.initializeDelegate(stringInjector);
+
+            membersInjectorFromBinder.get().injectMembers("in");
+            assertEquals("in", lastInjected.get());
+            return null;
+          }
+        });
    }

    public void testGetMembersInjector() {

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-guice-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-guice-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to