1 /* 2 * Copyright (C) 2022 The Dagger Authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package dagger.functional.kotlinsrc.basic 18 19 import com.google.common.truth.Truth.assertThat 20 import org.junit.experimental.theories.DataPoint 21 import org.junit.experimental.theories.Theories 22 import org.junit.experimental.theories.Theory 23 import org.junit.runner.RunWith 24 25 @RunWith(Theories::class) 26 class BasicTest { 27 @Theory primitivesnull28 fun primitives(basicComponent: BasicComponent) { 29 assertThat(basicComponent.byteFun()).isEqualTo(PrimitivesModule.BOUND_BYTE) 30 assertThat(basicComponent.charFun()).isEqualTo(PrimitivesModule.BOUND_CHAR) 31 assertThat(basicComponent.shortFun()).isEqualTo(PrimitivesModule.BOUND_SHORT) 32 assertThat(basicComponent.intFun()).isEqualTo(PrimitivesModule.BOUND_INT) 33 assertThat(basicComponent.longFun()).isEqualTo(PrimitivesModule.BOUND_LONG) 34 assertThat(basicComponent.booleanFun()).isEqualTo(PrimitivesModule.BOUND_BOOLEAN) 35 assertThat(basicComponent.floatFun()).isEqualTo(PrimitivesModule.BOUND_FLOAT) 36 assertThat(basicComponent.doubleFun()).isEqualTo(PrimitivesModule.BOUND_DOUBLE) 37 38 assertThat(basicComponent.byteVal).isEqualTo(basicComponent.byteFun()) 39 assertThat(basicComponent.charVal).isEqualTo(basicComponent.charFun()) 40 assertThat(basicComponent.shortVal).isEqualTo(basicComponent.shortFun()) 41 assertThat(basicComponent.intVal).isEqualTo(basicComponent.intFun()) 42 assertThat(basicComponent.longVal).isEqualTo(basicComponent.longFun()) 43 assertThat(basicComponent.booleanVal).isEqualTo(basicComponent.booleanFun()) 44 assertThat(basicComponent.floatVal).isEqualTo(basicComponent.floatFun()) 45 assertThat(basicComponent.doubleVal).isEqualTo(basicComponent.doubleFun()) 46 } 47 48 @Theory primitiveProvidersnull49 fun primitiveProviders(basicComponent: BasicComponent) { 50 assertThat(basicComponent.byteProviderFun().get()).isEqualTo(PrimitivesModule.BOUND_BYTE) 51 assertThat(basicComponent.charProviderFun().get()).isEqualTo(PrimitivesModule.BOUND_CHAR) 52 assertThat(basicComponent.shortProviderFun().get()).isEqualTo(PrimitivesModule.BOUND_SHORT) 53 assertThat(basicComponent.intProviderFun().get()).isEqualTo(PrimitivesModule.BOUND_INT) 54 assertThat(basicComponent.longProviderFun().get()).isEqualTo(PrimitivesModule.BOUND_LONG) 55 assertThat(basicComponent.booleanProviderFun().get()).isEqualTo(PrimitivesModule.BOUND_BOOLEAN) 56 assertThat(basicComponent.floatProviderFun().get()).isEqualTo(PrimitivesModule.BOUND_FLOAT) 57 assertThat(basicComponent.doubleProviderFun().get()).isEqualTo(PrimitivesModule.BOUND_DOUBLE) 58 59 assertThat(basicComponent.byteProviderVal.get()) 60 .isEqualTo(basicComponent.byteProviderFun().get()) 61 assertThat(basicComponent.charProviderVal.get()) 62 .isEqualTo(basicComponent.charProviderFun().get()) 63 assertThat(basicComponent.shortProviderVal.get()) 64 .isEqualTo(basicComponent.shortProviderFun().get()) 65 assertThat(basicComponent.intProviderVal.get()) 66 .isEqualTo(basicComponent.intProviderFun().get()) 67 assertThat(basicComponent.longProviderVal.get()) 68 .isEqualTo(basicComponent.longProviderFun().get()) 69 assertThat(basicComponent.booleanProviderVal.get()) 70 .isEqualTo(basicComponent.booleanProviderFun().get()) 71 assertThat(basicComponent.floatProviderVal.get()) 72 .isEqualTo(basicComponent.floatProviderFun().get()) 73 assertThat(basicComponent.doubleProviderVal.get()) 74 .isEqualTo(basicComponent.doubleProviderFun().get()) 75 } 76 77 @Theory primitiveArraysnull78 fun primitiveArrays(basicComponent: BasicComponent) { 79 assertThat(basicComponent.byteArrayFun()).isSameInstanceAs(PrimitivesModule.BOUND_BYTE_ARRAY) 80 assertThat(basicComponent.charArrayFun()).isSameInstanceAs(PrimitivesModule.BOUND_CHAR_ARRAY) 81 assertThat(basicComponent.shortArrayFun()).isSameInstanceAs(PrimitivesModule.BOUND_SHORT_ARRAY) 82 assertThat(basicComponent.intArrayFun()).isSameInstanceAs(PrimitivesModule.BOUND_INT_ARRAY) 83 assertThat(basicComponent.longArrayFun()).isSameInstanceAs(PrimitivesModule.BOUND_LONG_ARRAY) 84 assertThat(basicComponent.booleanArrayFun()) 85 .isSameInstanceAs(PrimitivesModule.BOUND_BOOLEAN_ARRAY) 86 assertThat(basicComponent.floatArrayFun()).isSameInstanceAs(PrimitivesModule.BOUND_FLOAT_ARRAY) 87 assertThat(basicComponent.doubleArrayFun()) 88 .isSameInstanceAs(PrimitivesModule.BOUND_DOUBLE_ARRAY) 89 90 assertThat(basicComponent.byteArrayVal).isSameInstanceAs(basicComponent.byteArrayFun()) 91 assertThat(basicComponent.charArrayVal).isSameInstanceAs(basicComponent.charArrayFun()) 92 assertThat(basicComponent.shortArrayVal).isSameInstanceAs(basicComponent.shortArrayFun()) 93 assertThat(basicComponent.intArrayVal).isSameInstanceAs(basicComponent.intArrayFun()) 94 assertThat(basicComponent.longArrayVal).isSameInstanceAs(basicComponent.longArrayFun()) 95 assertThat(basicComponent.booleanArrayVal).isSameInstanceAs(basicComponent.booleanArrayFun()) 96 assertThat(basicComponent.floatArrayVal).isSameInstanceAs(basicComponent.floatArrayFun()) 97 assertThat(basicComponent.doubleArrayVal).isSameInstanceAs(basicComponent.doubleArrayFun()) 98 } 99 100 @Theory primitiveArrayProvidersnull101 fun primitiveArrayProviders(basicComponent: BasicComponent) { 102 assertThat(basicComponent.byteArrayProviderFun().get()) 103 .isSameInstanceAs(PrimitivesModule.BOUND_BYTE_ARRAY) 104 assertThat(basicComponent.charArrayProviderFun().get()) 105 .isSameInstanceAs(PrimitivesModule.BOUND_CHAR_ARRAY) 106 assertThat(basicComponent.shortArrayProviderFun().get()) 107 .isSameInstanceAs(PrimitivesModule.BOUND_SHORT_ARRAY) 108 assertThat(basicComponent.intArrayProviderFun().get()) 109 .isSameInstanceAs(PrimitivesModule.BOUND_INT_ARRAY) 110 assertThat(basicComponent.longArrayProviderFun().get()) 111 .isSameInstanceAs(PrimitivesModule.BOUND_LONG_ARRAY) 112 assertThat(basicComponent.booleanArrayProviderFun().get()) 113 .isSameInstanceAs(PrimitivesModule.BOUND_BOOLEAN_ARRAY) 114 assertThat(basicComponent.floatArrayProviderFun().get()) 115 .isSameInstanceAs(PrimitivesModule.BOUND_FLOAT_ARRAY) 116 assertThat(basicComponent.doubleArrayProviderFun().get()) 117 .isSameInstanceAs(PrimitivesModule.BOUND_DOUBLE_ARRAY) 118 119 assertThat(basicComponent.byteArrayProviderVal.get()) 120 .isSameInstanceAs(basicComponent.byteArrayProviderFun().get()) 121 assertThat(basicComponent.charArrayProviderVal.get()) 122 .isSameInstanceAs(basicComponent.charArrayProviderFun().get()) 123 assertThat(basicComponent.shortArrayProviderVal.get()) 124 .isSameInstanceAs(basicComponent.shortArrayProviderFun().get()) 125 assertThat(basicComponent.intArrayProviderVal.get()) 126 .isSameInstanceAs(basicComponent.intArrayProviderFun().get()) 127 assertThat(basicComponent.longArrayProviderVal.get()) 128 .isSameInstanceAs(basicComponent.longArrayProviderFun().get()) 129 assertThat(basicComponent.booleanArrayProviderVal.get()) 130 .isSameInstanceAs(basicComponent.booleanArrayProviderFun().get()) 131 assertThat(basicComponent.floatArrayProviderVal.get()) 132 .isSameInstanceAs(basicComponent.floatArrayProviderFun().get()) 133 assertThat(basicComponent.doubleArrayProviderVal.get()) 134 .isSameInstanceAs(basicComponent.doubleArrayProviderFun().get()) 135 } 136 137 @Theory noOpMembersInjectionnull138 fun noOpMembersInjection(basicComponent: BasicComponent) { 139 val someObject = Any() 140 assertThat(basicComponent.noOpMembersInjectionFun(someObject)).isSameInstanceAs(someObject) 141 } 142 143 @Theory basicObject_noDepsnull144 fun basicObject_noDeps(basicComponent: BasicComponent) { 145 assertThat(basicComponent.thingFun()).isNotNull() 146 assertThat(basicComponent.thingVal).isNotNull() 147 } 148 149 @Theory inheritedMembersInjectionnull150 fun inheritedMembersInjection(basicComponent: BasicComponent) { 151 assertThat(basicComponent.typeWithInheritedMembersInjectionFun().thing).isNotNull() 152 153 assertThat(basicComponent.typeWithInheritedMembersInjectionVal.thing).isNotNull() 154 } 155 156 @Theory nullableInjectionnull157 fun nullableInjection(basicComponent: BasicComponent) { 158 assertThat(basicComponent.nullObjectFun()).isNull() 159 assertThat(basicComponent.nullObjectProviderFun().get()).isNull() 160 assertThat(basicComponent.lazyNullObjectFun().get()).isNull() 161 162 assertThat(basicComponent.nullObjectVal).isNull() 163 assertThat(basicComponent.nullObjectProviderVal.get()).isNull() 164 assertThat(basicComponent.lazyNullObjectVal.get()).isNull() 165 } 166 167 @Theory providerOfLazynull168 fun providerOfLazy(basicComponent: BasicComponent) { 169 val lazyInjectedThingProvider = basicComponent.lazyInjectedThingProviderFun() 170 val lazyInjectedThing1 = lazyInjectedThingProvider.get() 171 val lazyInjectedThing2 = lazyInjectedThingProvider.get() 172 assertThat(lazyInjectedThing2).isNotSameInstanceAs(lazyInjectedThing1) 173 assertThat(lazyInjectedThing1.get()).isSameInstanceAs(lazyInjectedThing1.get()) 174 assertThat(lazyInjectedThing2.get()).isSameInstanceAs(lazyInjectedThing2.get()) 175 assertThat(lazyInjectedThing2.get()).isNotSameInstanceAs(lazyInjectedThing1.get()) 176 } 177 178 companion object { 179 @JvmField 180 @DataPoint 181 val basicComponent = DaggerBasicComponent.create() 182 183 @JvmField 184 @DataPoint 185 val abstractClassBasicComponent = DaggerBasicAbstractClassComponent.create() 186 } 187 } 188