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);
+ }
}