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