A new test that shows the deficiencies of FutureInjector. Now that commands are better integrated, we might be able to solve this more transparently...

git-svn-id: https://google-guice.googlecode.com/svn/trunk@551 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/test/com/google/inject/commands/CommandRewriteTest.java b/test/com/google/inject/commands/CommandRewriteTest.java
index 690c822..16d9273 100644
--- a/test/com/google/inject/commands/CommandRewriteTest.java
+++ b/test/com/google/inject/commands/CommandRewriteTest.java
@@ -16,10 +16,17 @@
 
 package com.google.inject.commands;
 
-import com.google.inject.*;
-import junit.framework.TestCase;
-
+import com.google.inject.AbstractModule;
+import com.google.inject.Binder;
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.Key;
+import com.google.inject.Module;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
 import java.util.List;
+import junit.framework.TestCase;
 
 
 /**
@@ -59,4 +66,38 @@
     assertEquals("Pizza", injector.getInstance(String.class));
     assertEquals("Beer", injector.getInstance(CharSequence.class));
   }
+
+  public void testGetProviderAvailableAtInjectMembersTime() {
+    Module module = new AbstractModule() {
+      public void configure() {
+        final Provider<String> stringProvider = getProvider(String.class);
+
+        bind(String.class).annotatedWith(Names.named("2")).toProvider(new Provider<String>() {
+          private String value;
+
+          @Inject void initialize() {
+            value = stringProvider.get();
+          }
+
+          public String get() {
+            return value;
+          }
+        });
+
+        bind(String.class).toInstance("A");
+      }
+    };
+
+    // the module works fine normally
+    Injector injector = Guice.createInjector(module);
+    assertEquals("A", injector.getInstance(Key.get(String.class, Names.named("2"))));
+
+    // and it should also work fine if we rewrite it
+    FutureInjector futureInjector = new FutureInjector();
+    List<Command> commands = new CommandRecorder(futureInjector).recordCommands(module);
+    Module replayed = new CommandReplayer().createModule(commands);
+    Injector replayedInjector = Guice.createInjector(replayed);
+    futureInjector.initialize(replayedInjector);
+    assertEquals("A", replayedInjector.getInstance(Key.get(String.class, Names.named("2"))));
+  }
 }