10910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber/** 20910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * Copyright (C) 2015 Google Inc. 30910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * 40910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * Licensed under the Apache License, Version 2.0 (the "License"); 50910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * you may not use this file except in compliance with the License. 60910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * You may obtain a copy of the License at 70910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * 80910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * http://www.apache.org/licenses/LICENSE-2.0 90910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * 100910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * Unless required by applicable law or agreed to in writing, software 110910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * distributed under the License is distributed on an "AS IS" BASIS, 120910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * See the License for the specific language governing permissions and 140910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * limitations under the License. 150910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber */ 160910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberpackage com.google.inject.daggeradapter; 170910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 180910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport static dagger.Provides.Type.SET; 190910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 200910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.common.collect.ImmutableSet; 210910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.inject.AbstractModule; 220910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.inject.Binder; 230910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.inject.Guice; 240910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.inject.Injector; 250910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.inject.Key; 260910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.inject.Module; 270910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.inject.Provides; 280910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.inject.multibindings.Multibinder; 290910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport com.google.inject.util.Providers; 300910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 310910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport junit.framework.TestCase; 320910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 330910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberimport java.util.Set; 340910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 350910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber/** 360910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * Tests for {@link DaggerAdapter}. 370910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * 380910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber * @author cgruber@google.com (Christian Gruber) 390910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber */ 400910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 410910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruberpublic class DaggerAdapterTest extends TestCase { 420910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber @dagger.Module static class SimpleDaggerModule { 430910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber @dagger.Provides Integer anInteger() { 440910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber return 1; 450910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 460910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 470910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 480910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber public void testSimpleModule() { 490910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber Injector i = Guice.createInjector(DaggerAdapter.from(new SimpleDaggerModule())); 500910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber assertEquals((Integer) 1, i.getInstance(Integer.class)); 510910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 520910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 530910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber static class SimpleGuiceModule extends AbstractModule { 540910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber @Provides String aString(Integer i) { 550910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber return i.toString(); 560910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 570910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber @Override protected void configure() {} 580910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 590910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 600910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber public void testInteractionWithGuiceModules() { 610910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber Injector i = Guice.createInjector( 620910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber new SimpleGuiceModule(), 630910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber DaggerAdapter.from(new SimpleDaggerModule())); 640910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber assertEquals("1", i.getInstance(String.class)); 650910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 660910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 670910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber @dagger.Module static class SetBindingDaggerModule1 { 680910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber @dagger.Provides(type=SET) Integer anInteger() { 690910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber return 5; 700910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 710910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 720910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 730910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber @dagger.Module static class SetBindingDaggerModule2 { 740910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber @dagger.Provides(type=SET) Integer anInteger() { 750910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber return 3; 760910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 770910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 780910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 790910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber public void testSetBindings() { 800910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber Injector i = Guice.createInjector( 810910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber DaggerAdapter.from(new SetBindingDaggerModule1(), new SetBindingDaggerModule2())); 820910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber assertEquals(ImmutableSet.of(3, 5), i.getInstance(new Key<Set<Integer>>() {})); 830910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 840910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 850910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber static class MultibindingGuiceModule implements Module { 860910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber @Override public void configure(Binder binder) { 870910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber Multibinder<Integer> mb = Multibinder.newSetBinder(binder, Integer.class); 880910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber mb.addBinding().toInstance(13); 890910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber mb.addBinding().toProvider(Providers.of(8)); // mix'n'match. 900910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 910910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 920910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber 930910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber public void testSetBindingsWithGuiceModule() { 940910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber Injector i = Guice.createInjector( 950910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber new MultibindingGuiceModule(), 960910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber DaggerAdapter.from(new SetBindingDaggerModule1(), new SetBindingDaggerModule2())); 970910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber assertEquals(ImmutableSet.of(13, 3, 5, 8), i.getInstance(new Key<Set<Integer>>() {})); 980910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber } 990910c1e69ee2b0587f898cb292d4e9f8d9338e28cgruber} 100