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.componentdependency 18 19 import com.google.common.truth.Truth.assertThat 20 import dagger.Component 21 import org.junit.Test 22 import org.junit.runner.RunWith 23 import org.junit.runners.JUnit4 24 25 /** Tests component dependencies. */ 26 @RunWith(JUnit4::class) 27 internal class ComponentDependenciesTest { 28 interface One { stringnull29 fun string(): String 30 } 31 32 interface Two { 33 fun string(): String 34 } 35 36 interface Merged : One, Two 37 38 @Component(dependencies = [Merged::class]) 39 interface TestComponent { stringnull40 fun string(): String 41 42 @Component.Builder 43 interface Builder { 44 fun dep(dep: Merged): Builder 45 fun build(): TestComponent 46 } 47 } 48 49 @Test testSameMethodTwicenull50 fun testSameMethodTwice() { 51 val component = 52 DaggerComponentDependenciesTest_TestComponent.builder() 53 .dep( 54 object : Merged { 55 override fun string() = "test" 56 } 57 ) 58 .build() 59 assertThat(component.string()).isEqualTo("test") 60 } 61 62 interface OneOverride { stringnull63 fun string(): Any 64 } 65 66 interface TwoOverride { 67 fun string(): Any 68 } 69 70 interface MergedOverride : OneOverride, TwoOverride { stringnull71 override fun string(): String 72 } 73 74 @Component(dependencies = [MergedOverride::class]) 75 interface TestOverrideComponent { 76 fun string(): String 77 78 @Component.Builder 79 interface Builder { 80 fun dep(dep: MergedOverride): Builder 81 fun build(): TestOverrideComponent 82 } 83 } 84 85 @Test testPolymorphicOverridesStillCompilesnull86 fun testPolymorphicOverridesStillCompiles() { 87 val component = 88 DaggerComponentDependenciesTest_TestOverrideComponent.builder() 89 .dep( 90 object : MergedOverride { 91 override fun string() = "test" 92 } 93 ) 94 .build() 95 assertThat(component.string()).isEqualTo("test") 96 } 97 } 98