New failing test: circularly dependent providers aren't properly singletons! And they aren't detected either. 

See issue 391, reported by mcculls.

git-svn-id: https://google-guice.googlecode.com/svn/trunk@1044 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/test/com/google/inject/CircularDependencyTest.java b/test/com/google/inject/CircularDependencyTest.java
index 47b00f2..f313d24 100644
--- a/test/com/google/inject/CircularDependencyTest.java
+++ b/test/com/google/inject/CircularDependencyTest.java
@@ -23,6 +23,12 @@
  */
 public class CircularDependencyTest extends TestCase {
 
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+    Chicken.nextInstanceId = 0;
+    Egg.nextInstanceId = 0;
+  }
+
   public void testCircularlyDependentConstructors()
       throws CreationException {
     Injector injector = Guice.createInjector(new AbstractModule() {
@@ -111,4 +117,36 @@
       return this;
     }
   }
+
+  static class Chicken {
+    static int nextInstanceId;
+    final int instanceId = nextInstanceId++;
+    @Inject Egg source;
+  }
+
+  static class Egg {
+    static int nextInstanceId;
+    final int instanceId = nextInstanceId++;
+    @Inject Chicken source;
+  }
+
+  public void testCircularlyDependentSingletonsWithProviders() {
+    Injector injector = Guice.createInjector(new AbstractModule() {
+      protected void configure() {
+        bind(Chicken.class).in(Singleton.class);
+      }
+
+      @Provides @Singleton Egg provideEgg(Chicken chicken) {
+        Egg egg = new Egg();
+        egg.source = chicken;
+        return egg;
+      }
+    });
+
+    injector.getInstance(Egg.class);
+    injector.getInstance(Chicken.class);
+
+    assertEquals(1, Chicken.nextInstanceId);
+    assertEquals(1, Egg.nextInstanceId);
+  }
 }