1 package dagger.hilt.android.testing 2 3 import androidx.test.core.app.ApplicationProvider.getApplicationContext 4 import androidx.test.ext.junit.runners.AndroidJUnit4 5 import com.google.common.truth.Truth.assertThat 6 import dagger.MapKey; 7 import dagger.hilt.EntryPoint 8 import dagger.hilt.EntryPoints 9 import dagger.hilt.InstallIn 10 import dagger.hilt.components.SingletonComponent 11 import javax.inject.Inject 12 import javax.inject.Named 13 import org.junit.Rule 14 import org.junit.Test 15 import org.junit.runner.RunWith 16 import org.robolectric.annotation.Config 17 18 @HiltAndroidTest 19 @RunWith(AndroidJUnit4::class) 20 @Config(application = HiltTestApplication::class) 21 class BindValueInKotlinValTest { 22 23 @MapKey 24 annotation class MyMapKey(val value: String) 25 26 @EntryPoint 27 @InstallIn(SingletonComponent::class) 28 interface BindValueEntryPoint { bindValueString1null29 fun bindValueString1(): String 30 31 @Named(TEST_QUALIFIER) 32 fun bindValueString2(): String 33 34 @Named(TEST_QUALIFIER_INTERNAL) 35 fun bindValueString3(): String 36 } 37 38 @get:Rule 39 val rule = HiltAndroidRule(this) 40 41 @BindValue 42 var bindValueString1 = BIND_VALUE_STRING1 43 44 @BindValue 45 @Named(TEST_QUALIFIER) 46 val bindValueString2 = BIND_VALUE_STRING2 47 48 @BindValue 49 @Named(TEST_QUALIFIER_INTERNAL) 50 internal val bindValueString3 = BIND_VALUE_STRING3 51 52 @BindValueIntoMap 53 @MyMapKey(BIND_VALUE_MAP_KEY_STRING) 54 val mapContribution = BIND_VALUE_MAP_VALUE_STRING 55 56 @Inject 57 lateinit var string1: String 58 59 @Inject 60 @Named(TEST_QUALIFIER) 61 lateinit var string2: String 62 63 @Inject 64 @Named(TEST_QUALIFIER_INTERNAL) 65 lateinit var string3: String 66 67 @Inject 68 lateinit var map: Map<String, String> 69 70 @Test 71 fun testBindValueFieldsAreProvided() { 72 rule.inject() 73 assertThat(string1).isEqualTo(BIND_VALUE_STRING1) 74 assertThat(string2).isEqualTo(BIND_VALUE_STRING2) 75 assertThat(string3).isEqualTo(BIND_VALUE_STRING3) 76 assertThat(map).containsExactlyEntriesIn( 77 mapOf(BIND_VALUE_MAP_KEY_STRING to BIND_VALUE_MAP_VALUE_STRING)) 78 } 79 80 companion object { 81 private const val BIND_VALUE_STRING1 = "BIND_VALUE_STRING1" 82 private const val BIND_VALUE_STRING2 = "BIND_VALUE_STRING2" 83 private const val BIND_VALUE_STRING3 = "BIND_VALUE_STRING3" 84 private const val BIND_VALUE_MAP_KEY_STRING = "BIND_VALUE_MAP_KEY_STRING" 85 private const val BIND_VALUE_MAP_VALUE_STRING = "BIND_VALUE_MAP_VALUE_STRING" 86 private const val TEST_QUALIFIER = "TEST_QUALIFIER" 87 private const val TEST_QUALIFIER_INTERNAL = "TEST_QUALIFIER_INTERNAL" 88 } 89 } 90