Author: limpbizkit
Date: Mon Mar 30 10:28:16 2009
New Revision: 918

Modified:
     
trunk/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
     
trunk/extensions/multibindings/test/com/google/inject/multibindings/MultibinderTest.java

Log:
Test cases that prove we have reliable iteration order for Multibinder and  
MapBinder

Modified:  
trunk/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
==============================================================================
---  
trunk/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
   
(original)
+++  
trunk/extensions/multibindings/test/com/google/inject/multibindings/MapBinderTest.java
   
Mon Mar 30 10:28:16 2009
@@ -29,6 +29,7 @@
  import com.google.inject.ProvisionException;
  import com.google.inject.TypeLiteral;
  import com.google.inject.internal.ImmutableSet;
+import com.google.inject.internal.Maps;
  import com.google.inject.name.Names;
  import static com.google.inject.name.Names.named;
  import com.google.inject.spi.Dependency;
@@ -38,6 +39,7 @@
  import static java.lang.annotation.RetentionPolicy.RUNTIME;
  import java.util.Collections;
  import java.util.HashMap;
+import java.util.Iterator;
  import java.util.Map;
  import java.util.Set;
  import junit.framework.TestCase;
@@ -312,6 +314,42 @@
      Key<?> setKey = new Key<Set<Map.Entry<Integer, Provider<String>>>>()  
{};
      assertEquals(ImmutableSet.<Dependency<?>>of(Dependency.get(setKey)),
          withDependencies.getDependencies());
+  }
+
+
+  /**
+   * Our implementation maintains order, but doesn't guarantee it in the  
API spec.
+   * TODO: specify the iteration order?
+   */
+  public void testBindOrderEqualsIterationOrder() {
+    Injector injector = Guice.createInjector(
+        new AbstractModule() {
+          protected void configure() {
+            MapBinder<String, String> mapBinder
+                = MapBinder.newMapBinder(binder(), String.class,  
String.class);
+            mapBinder.addBinding("leonardo").toInstance("blue");
+            mapBinder.addBinding("donatello").toInstance("purple");
+            install(new AbstractModule() {
+              protected void configure() {
+                MapBinder.newMapBinder(binder(), String.class,  
String.class)
+                    .addBinding("michaelangelo").toInstance("orange");
+              }
+            });
+          }
+        },
+        new AbstractModule() {
+          protected void configure() {
+            MapBinder.newMapBinder(binder(), String.class, String.class)
+                .addBinding("raphael").toInstance("red");
+          }
+        });
+
+    Map<String, String> map = injector.getInstance(new Key<Map<String,  
String>>() {});
+    Iterator<Map.Entry<String, String>> iterator =  
map.entrySet().iterator();
+    assertEquals(Maps.immutableEntry("leonardo", "blue"), iterator.next());
+    assertEquals(Maps.immutableEntry("donatello", "purple"),  
iterator.next());
+    assertEquals(Maps.immutableEntry("michaelangelo", "orange"),  
iterator.next());
+    assertEquals(Maps.immutableEntry("raphael", "red"), iterator.next());
    }

    @Retention(RUNTIME) @BindingAnnotation

Modified:  
trunk/extensions/multibindings/test/com/google/inject/multibindings/MultibinderTest.java
==============================================================================
---  
trunk/extensions/multibindings/test/com/google/inject/multibindings/MultibinderTest.java
         
(original)
+++  
trunk/extensions/multibindings/test/com/google/inject/multibindings/MultibinderTest.java
         
Mon Mar 30 10:28:16 2009
@@ -28,6 +28,7 @@
  import com.google.inject.Provider;
  import com.google.inject.ProvisionException;
  import com.google.inject.TypeLiteral;
+import com.google.inject.internal.ImmutableList;
  import com.google.inject.internal.ImmutableSet;
  import com.google.inject.internal.Sets;
  import com.google.inject.name.Names;
@@ -39,6 +40,7 @@
  import static java.lang.annotation.RetentionPolicy.RUNTIME;
  import java.util.Arrays;
  import java.util.Collections;
+import java.util.List;
  import java.util.Set;
  import junit.framework.TestCase;

@@ -281,6 +283,35 @@
        elements.add((String) injector.getInstance(dependency.getKey()));
      }
      assertEquals(ImmutableSet.of("A", "B"), elements);
+  }
+
+  /**
+   * Our implementation maintains order, but doesn't guarantee it in the  
API spec.
+   * TODO: specify the iteration order?
+   */
+  public void testBindOrderEqualsIterationOrder() {
+    Injector injector = Guice.createInjector(
+        new AbstractModule() {
+          protected void configure() {
+            Multibinder<String> multibinder =  
Multibinder.newSetBinder(binder(), String.class);
+            multibinder.addBinding().toInstance("leonardo");
+            multibinder.addBinding().toInstance("donatello");
+            install(new AbstractModule() {
+              protected void configure() {
+                Multibinder.newSetBinder(binder(), String.class)
+                    .addBinding().toInstance("michaelangelo");
+              }
+            });
+          }
+        },
+        new AbstractModule() {
+          protected void configure() {
+            Multibinder.newSetBinder(binder(),  
String.class).addBinding().toInstance("raphael");
+          }
+        });
+
+    List<String> inOrder =  
ImmutableList.copyOf(injector.getInstance(Key.get(setOfString)));
+     
assertEquals(ImmutableList.of("leonardo", "donatello", "michaelangelo", 
"raphael"),  
inOrder);
    }

    @Retention(RUNTIME) @BindingAnnotation

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