xref: /aosp_15_r20/external/dagger2/javatests/dagger/hilt/android/testing/BindValueInKotlinValTest.kt (revision f585d8a307d0621d6060bd7e80091fdcbf94fe27)
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