1*f585d8a3SJacky Wang /* 2*f585d8a3SJacky Wang * Copyright (C) 2014 The Dagger Authors. 3*f585d8a3SJacky Wang * 4*f585d8a3SJacky Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5*f585d8a3SJacky Wang * you may not use this file except in compliance with the License. 6*f585d8a3SJacky Wang * You may obtain a copy of the License at 7*f585d8a3SJacky Wang * 8*f585d8a3SJacky Wang * http://www.apache.org/licenses/LICENSE-2.0 9*f585d8a3SJacky Wang * 10*f585d8a3SJacky Wang * Unless required by applicable law or agreed to in writing, software 11*f585d8a3SJacky Wang * distributed under the License is distributed on an "AS IS" BASIS, 12*f585d8a3SJacky Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*f585d8a3SJacky Wang * See the License for the specific language governing permissions and 14*f585d8a3SJacky Wang * limitations under the License. 15*f585d8a3SJacky Wang */ 16*f585d8a3SJacky Wang 17*f585d8a3SJacky Wang package dagger.functional.basic; 18*f585d8a3SJacky Wang 19*f585d8a3SJacky Wang import static com.google.common.truth.Truth.assertThat; 20*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_BOOLEAN; 21*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_BOOLEAN_ARRAY; 22*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_BYTE; 23*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_BYTE_ARRAY; 24*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_CHAR; 25*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_CHAR_ARRAY; 26*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_DOUBLE; 27*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_DOUBLE_ARRAY; 28*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_FLOAT; 29*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_FLOAT_ARRAY; 30*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_INT; 31*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_INT_ARRAY; 32*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_LONG; 33*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_LONG_ARRAY; 34*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_SHORT; 35*f585d8a3SJacky Wang import static dagger.functional.basic.PrimitivesModule.BOUND_SHORT_ARRAY; 36*f585d8a3SJacky Wang 37*f585d8a3SJacky Wang import dagger.Lazy; 38*f585d8a3SJacky Wang import javax.inject.Provider; 39*f585d8a3SJacky Wang import org.junit.experimental.theories.DataPoint; 40*f585d8a3SJacky Wang import org.junit.experimental.theories.Theories; 41*f585d8a3SJacky Wang import org.junit.experimental.theories.Theory; 42*f585d8a3SJacky Wang import org.junit.runner.RunWith; 43*f585d8a3SJacky Wang 44*f585d8a3SJacky Wang @RunWith(Theories.class) 45*f585d8a3SJacky Wang public class BasicTest { 46*f585d8a3SJacky Wang @DataPoint 47*f585d8a3SJacky Wang public static final BasicComponent basicComponent = DaggerBasicComponent.create(); 48*f585d8a3SJacky Wang @DataPoint 49*f585d8a3SJacky Wang public static final BasicComponent abstractClassBasicComponent = 50*f585d8a3SJacky Wang DaggerBasicAbstractClassComponent.create(); 51*f585d8a3SJacky Wang primitives(BasicComponent basicComponent)52*f585d8a3SJacky Wang @Theory public void primitives(BasicComponent basicComponent) { 53*f585d8a3SJacky Wang assertThat(basicComponent.getByte()).isEqualTo(BOUND_BYTE); 54*f585d8a3SJacky Wang assertThat(basicComponent.getChar()).isEqualTo(BOUND_CHAR); 55*f585d8a3SJacky Wang assertThat(basicComponent.getShort()).isEqualTo(BOUND_SHORT); 56*f585d8a3SJacky Wang assertThat(basicComponent.getInt()).isEqualTo(BOUND_INT); 57*f585d8a3SJacky Wang assertThat(basicComponent.getLong()).isEqualTo(BOUND_LONG); 58*f585d8a3SJacky Wang assertThat(basicComponent.getBoolean()).isEqualTo(BOUND_BOOLEAN); 59*f585d8a3SJacky Wang assertThat(basicComponent.getFloat()).isEqualTo(BOUND_FLOAT); 60*f585d8a3SJacky Wang assertThat(basicComponent.getDouble()).isEqualTo(BOUND_DOUBLE); 61*f585d8a3SJacky Wang } 62*f585d8a3SJacky Wang boxedPrimitives(BasicComponent basicComponent)63*f585d8a3SJacky Wang @Theory public void boxedPrimitives(BasicComponent basicComponent) { 64*f585d8a3SJacky Wang assertThat(basicComponent.getBoxedByte()).isEqualTo(new Byte(BOUND_BYTE)); 65*f585d8a3SJacky Wang assertThat(basicComponent.getBoxedChar()).isEqualTo(new Character(BOUND_CHAR)); 66*f585d8a3SJacky Wang assertThat(basicComponent.getBoxedShort()).isEqualTo(new Short(BOUND_SHORT)); 67*f585d8a3SJacky Wang assertThat(basicComponent.getBoxedInt()).isEqualTo(new Integer(BOUND_INT)); 68*f585d8a3SJacky Wang assertThat(basicComponent.getBoxedLong()).isEqualTo(new Long(BOUND_LONG)); 69*f585d8a3SJacky Wang assertThat(basicComponent.getBoxedBoolean()).isEqualTo(new Boolean(BOUND_BOOLEAN)); 70*f585d8a3SJacky Wang assertThat(basicComponent.getBoxedFloat()).isEqualTo(BOUND_FLOAT); 71*f585d8a3SJacky Wang assertThat(basicComponent.getBoxedDouble()).isEqualTo(BOUND_DOUBLE); 72*f585d8a3SJacky Wang } 73*f585d8a3SJacky Wang boxedPrimitiveProviders(BasicComponent basicComponent)74*f585d8a3SJacky Wang @Theory public void boxedPrimitiveProviders(BasicComponent basicComponent) { 75*f585d8a3SJacky Wang assertThat(basicComponent.getByteProvider().get()).isEqualTo(new Byte(BOUND_BYTE)); 76*f585d8a3SJacky Wang assertThat(basicComponent.getCharProvider().get()).isEqualTo(new Character(BOUND_CHAR)); 77*f585d8a3SJacky Wang assertThat(basicComponent.getShortProvider().get()).isEqualTo(new Short(BOUND_SHORT)); 78*f585d8a3SJacky Wang assertThat(basicComponent.getIntProvider().get()).isEqualTo(new Integer(BOUND_INT)); 79*f585d8a3SJacky Wang assertThat(basicComponent.getLongProvider().get()).isEqualTo(new Long(BOUND_LONG)); 80*f585d8a3SJacky Wang assertThat(basicComponent.getBooleanProvider().get()).isEqualTo(new Boolean(BOUND_BOOLEAN)); 81*f585d8a3SJacky Wang assertThat(basicComponent.getFloatProvider().get()).isEqualTo(BOUND_FLOAT); 82*f585d8a3SJacky Wang assertThat(basicComponent.getDoubleProvider().get()).isEqualTo(BOUND_DOUBLE); 83*f585d8a3SJacky Wang } 84*f585d8a3SJacky Wang primitiveArrays(BasicComponent basicComponent)85*f585d8a3SJacky Wang @Theory public void primitiveArrays(BasicComponent basicComponent) { 86*f585d8a3SJacky Wang assertThat(basicComponent.getByteArray()).isSameInstanceAs(BOUND_BYTE_ARRAY); 87*f585d8a3SJacky Wang assertThat(basicComponent.getCharArray()).isSameInstanceAs(BOUND_CHAR_ARRAY); 88*f585d8a3SJacky Wang assertThat(basicComponent.getShortArray()).isSameInstanceAs(BOUND_SHORT_ARRAY); 89*f585d8a3SJacky Wang assertThat(basicComponent.getIntArray()).isSameInstanceAs(BOUND_INT_ARRAY); 90*f585d8a3SJacky Wang assertThat(basicComponent.getLongArray()).isSameInstanceAs(BOUND_LONG_ARRAY); 91*f585d8a3SJacky Wang assertThat(basicComponent.getBooleanArray()).isSameInstanceAs(BOUND_BOOLEAN_ARRAY); 92*f585d8a3SJacky Wang assertThat(basicComponent.getFloatArray()).isSameInstanceAs(BOUND_FLOAT_ARRAY); 93*f585d8a3SJacky Wang assertThat(basicComponent.getDoubleArray()).isSameInstanceAs(BOUND_DOUBLE_ARRAY); 94*f585d8a3SJacky Wang } 95*f585d8a3SJacky Wang primitiveArrayProviders(BasicComponent basicComponent)96*f585d8a3SJacky Wang @Theory public void primitiveArrayProviders(BasicComponent basicComponent) { 97*f585d8a3SJacky Wang assertThat(basicComponent.getByteArrayProvider().get()).isSameInstanceAs(BOUND_BYTE_ARRAY); 98*f585d8a3SJacky Wang assertThat(basicComponent.getCharArrayProvider().get()).isSameInstanceAs(BOUND_CHAR_ARRAY); 99*f585d8a3SJacky Wang assertThat(basicComponent.getShortArrayProvider().get()).isSameInstanceAs(BOUND_SHORT_ARRAY); 100*f585d8a3SJacky Wang assertThat(basicComponent.getIntArrayProvider().get()).isSameInstanceAs(BOUND_INT_ARRAY); 101*f585d8a3SJacky Wang assertThat(basicComponent.getLongArrayProvider().get()).isSameInstanceAs(BOUND_LONG_ARRAY); 102*f585d8a3SJacky Wang assertThat(basicComponent.getBooleanArrayProvider().get()) 103*f585d8a3SJacky Wang .isSameInstanceAs(BOUND_BOOLEAN_ARRAY); 104*f585d8a3SJacky Wang assertThat(basicComponent.getFloatArrayProvider().get()).isSameInstanceAs(BOUND_FLOAT_ARRAY); 105*f585d8a3SJacky Wang assertThat(basicComponent.getDoubleArrayProvider().get()).isSameInstanceAs(BOUND_DOUBLE_ARRAY); 106*f585d8a3SJacky Wang } 107*f585d8a3SJacky Wang noOpMembersInjection(BasicComponent basicComponent)108*f585d8a3SJacky Wang @Theory public void noOpMembersInjection(BasicComponent basicComponent) { 109*f585d8a3SJacky Wang Object object = new Object(); 110*f585d8a3SJacky Wang assertThat(basicComponent.noOpMembersInjection(object)).isSameInstanceAs(object); 111*f585d8a3SJacky Wang } 112*f585d8a3SJacky Wang basicObject_noDeps(BasicComponent basicComponent)113*f585d8a3SJacky Wang @Theory public void basicObject_noDeps(BasicComponent basicComponent) { 114*f585d8a3SJacky Wang assertThat(basicComponent.thing()).isNotNull(); 115*f585d8a3SJacky Wang } 116*f585d8a3SJacky Wang inheritedMembersInjection(BasicComponent basicComponent)117*f585d8a3SJacky Wang @Theory public void inheritedMembersInjection(BasicComponent basicComponent) { 118*f585d8a3SJacky Wang assertThat(basicComponent.typeWithInheritedMembersInjection().thing).isNotNull(); 119*f585d8a3SJacky Wang } 120*f585d8a3SJacky Wang 121*f585d8a3SJacky Wang @Theory nullableInjection(BasicComponent basicComponent)122*f585d8a3SJacky Wang public void nullableInjection(BasicComponent basicComponent) { 123*f585d8a3SJacky Wang assertThat(basicComponent.nullObject()).isNull(); 124*f585d8a3SJacky Wang assertThat(basicComponent.nullObjectProvider().get()).isNull(); 125*f585d8a3SJacky Wang assertThat(basicComponent.lazyNullObject().get()).isNull(); 126*f585d8a3SJacky Wang } 127*f585d8a3SJacky Wang 128*f585d8a3SJacky Wang @Theory providerOfLazy(BasicComponent basicComponent)129*f585d8a3SJacky Wang public void providerOfLazy(BasicComponent basicComponent) { 130*f585d8a3SJacky Wang Provider<Lazy<InjectedThing>> lazyInjectedThingProvider = 131*f585d8a3SJacky Wang basicComponent.lazyInjectedThingProvider(); 132*f585d8a3SJacky Wang Lazy<InjectedThing> lazyInjectedThing1 = lazyInjectedThingProvider.get(); 133*f585d8a3SJacky Wang Lazy<InjectedThing> lazyInjectedThing2 = lazyInjectedThingProvider.get(); 134*f585d8a3SJacky Wang assertThat(lazyInjectedThing2).isNotSameInstanceAs(lazyInjectedThing1); 135*f585d8a3SJacky Wang assertThat(lazyInjectedThing1.get()).isSameInstanceAs(lazyInjectedThing1.get()); 136*f585d8a3SJacky Wang assertThat(lazyInjectedThing2.get()).isSameInstanceAs(lazyInjectedThing2.get()); 137*f585d8a3SJacky Wang assertThat(lazyInjectedThing2.get()).isNotSameInstanceAs(lazyInjectedThing1.get()); 138*f585d8a3SJacky Wang } 139*f585d8a3SJacky Wang } 140