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
-~----------~----~----~----~------~----~------~--~---