xref: /aosp_15_r20/external/dagger2/javatests/dagger/functional/multibindings/MultibindingTest.java (revision f585d8a307d0621d6060bd7e80091fdcbf94fe27)
1*f585d8a3SJacky Wang /*
2*f585d8a3SJacky Wang  * Copyright (C) 2015 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.multibindings;
18*f585d8a3SJacky Wang 
19*f585d8a3SJacky Wang import static com.google.common.truth.Truth.assertThat;
20*f585d8a3SJacky Wang 
21*f585d8a3SJacky Wang import com.google.auto.value.AutoAnnotation;
22*f585d8a3SJacky Wang import dagger.multibindings.ClassKey;
23*f585d8a3SJacky Wang import dagger.multibindings.StringKey;
24*f585d8a3SJacky Wang import java.math.BigDecimal;
25*f585d8a3SJacky Wang import java.math.BigInteger;
26*f585d8a3SJacky Wang import java.util.Map;
27*f585d8a3SJacky Wang import javax.inject.Provider;
28*f585d8a3SJacky Wang import org.junit.Test;
29*f585d8a3SJacky Wang import org.junit.runner.RunWith;
30*f585d8a3SJacky Wang import org.junit.runners.JUnit4;
31*f585d8a3SJacky Wang 
32*f585d8a3SJacky Wang /** Tests for {@link MultibindingComponent}. */
33*f585d8a3SJacky Wang @RunWith(JUnit4.class)
34*f585d8a3SJacky Wang public class MultibindingTest {
35*f585d8a3SJacky Wang 
36*f585d8a3SJacky Wang   private final MultibindingComponent multibindingComponent =
37*f585d8a3SJacky Wang       DaggerMultibindingComponent.builder().multibindingDependency(() -> 0.0).build();
38*f585d8a3SJacky Wang 
map()39*f585d8a3SJacky Wang   @Test public void map() {
40*f585d8a3SJacky Wang     Map<String, String> map = multibindingComponent.map();
41*f585d8a3SJacky Wang     assertThat(map).hasSize(2);
42*f585d8a3SJacky Wang     assertThat(map).containsEntry("foo", "foo value");
43*f585d8a3SJacky Wang     assertThat(map).containsEntry("bar", "bar value");
44*f585d8a3SJacky Wang   }
45*f585d8a3SJacky Wang 
mapOfArrays()46*f585d8a3SJacky Wang   @Test public void mapOfArrays() {
47*f585d8a3SJacky Wang     Map<String, String[]> map = multibindingComponent.mapOfArrays();
48*f585d8a3SJacky Wang     assertThat(map).hasSize(2);
49*f585d8a3SJacky Wang     assertThat(map).containsKey("foo");
50*f585d8a3SJacky Wang     assertThat(map.get("foo")).asList().containsExactly("foo1", "foo2").inOrder();
51*f585d8a3SJacky Wang     assertThat(map).containsKey("bar");
52*f585d8a3SJacky Wang     assertThat(map.get("bar")).asList().containsExactly("bar1", "bar2").inOrder();
53*f585d8a3SJacky Wang   }
54*f585d8a3SJacky Wang 
mapOfProviders()55*f585d8a3SJacky Wang   @Test public void mapOfProviders() {
56*f585d8a3SJacky Wang     Map<String, Provider<String>> mapOfProviders = multibindingComponent.mapOfProviders();
57*f585d8a3SJacky Wang     assertThat(mapOfProviders).hasSize(2);
58*f585d8a3SJacky Wang     assertThat(mapOfProviders.get("foo").get()).isEqualTo("foo value");
59*f585d8a3SJacky Wang     assertThat(mapOfProviders.get("bar").get()).isEqualTo("bar value");
60*f585d8a3SJacky Wang   }
61*f585d8a3SJacky Wang 
mapKeysAndValues()62*f585d8a3SJacky Wang   @Test public void mapKeysAndValues() {
63*f585d8a3SJacky Wang     assertThat(multibindingComponent.mapKeys())
64*f585d8a3SJacky Wang         .containsExactly("foo", "bar");
65*f585d8a3SJacky Wang     assertThat(multibindingComponent.mapValues())
66*f585d8a3SJacky Wang         .containsExactly("foo value", "bar value");
67*f585d8a3SJacky Wang   }
68*f585d8a3SJacky Wang 
nestedKeyMap()69*f585d8a3SJacky Wang   @Test public void nestedKeyMap() {
70*f585d8a3SJacky Wang     assertThat(multibindingComponent.nestedKeyMap())
71*f585d8a3SJacky Wang         .containsExactly(
72*f585d8a3SJacky Wang             nestedWrappedKey(Integer.class), "integer", nestedWrappedKey(Long.class), "long");
73*f585d8a3SJacky Wang   }
74*f585d8a3SJacky Wang 
75*f585d8a3SJacky Wang   @Test
unwrappedAnnotationKeyMap()76*f585d8a3SJacky Wang   public void unwrappedAnnotationKeyMap() {
77*f585d8a3SJacky Wang     assertThat(multibindingComponent.unwrappedAnnotationKeyMap())
78*f585d8a3SJacky Wang         .containsExactly(testStringKey("foo\n"), "foo annotation");
79*f585d8a3SJacky Wang   }
80*f585d8a3SJacky Wang 
81*f585d8a3SJacky Wang   @Test
wrappedAnnotationKeyMap()82*f585d8a3SJacky Wang   public void wrappedAnnotationKeyMap() {
83*f585d8a3SJacky Wang     @SuppressWarnings({"unchecked", "rawtypes"})
84*f585d8a3SJacky Wang     Class<? extends Number>[] classes = new Class[] {Long.class, Integer.class};
85*f585d8a3SJacky Wang     assertThat(multibindingComponent.wrappedAnnotationKeyMap())
86*f585d8a3SJacky Wang         .containsExactly(
87*f585d8a3SJacky Wang             testWrappedAnnotationKey(
88*f585d8a3SJacky Wang                 testStringKey("foo"), new int[] {1, 2, 3}, new ClassKey[] {}, classes),
89*f585d8a3SJacky Wang             "wrapped foo annotation");
90*f585d8a3SJacky Wang   }
91*f585d8a3SJacky Wang 
92*f585d8a3SJacky Wang   @Test
booleanKeyMap()93*f585d8a3SJacky Wang   public void booleanKeyMap() {
94*f585d8a3SJacky Wang     assertThat(multibindingComponent.booleanKeyMap()).containsExactly(true, "true");
95*f585d8a3SJacky Wang   }
96*f585d8a3SJacky Wang 
97*f585d8a3SJacky Wang   @Test
byteKeyMap()98*f585d8a3SJacky Wang   public void byteKeyMap() {
99*f585d8a3SJacky Wang     assertThat(multibindingComponent.byteKeyMap()).containsExactly((byte) 100, "100 byte");
100*f585d8a3SJacky Wang   }
101*f585d8a3SJacky Wang 
102*f585d8a3SJacky Wang   @Test
charKeyMap()103*f585d8a3SJacky Wang   public void charKeyMap() {
104*f585d8a3SJacky Wang     assertThat(multibindingComponent.characterKeyMap())
105*f585d8a3SJacky Wang         .containsExactly('a', "a char", '\n', "newline char");
106*f585d8a3SJacky Wang   }
107*f585d8a3SJacky Wang 
108*f585d8a3SJacky Wang   @Test
classKeyMap()109*f585d8a3SJacky Wang   public void classKeyMap() {
110*f585d8a3SJacky Wang     assertThat(multibindingComponent.classKeyMap())
111*f585d8a3SJacky Wang         .containsExactly(Integer.class, "integer", Long.class, "long");
112*f585d8a3SJacky Wang   }
113*f585d8a3SJacky Wang 
114*f585d8a3SJacky Wang   @Test
numberClassKeyMap()115*f585d8a3SJacky Wang   public void numberClassKeyMap() {
116*f585d8a3SJacky Wang     assertThat(multibindingComponent.numberClassKeyMap())
117*f585d8a3SJacky Wang         .containsExactly(BigDecimal.class, "bigdecimal", BigInteger.class, "biginteger");
118*f585d8a3SJacky Wang   }
119*f585d8a3SJacky Wang 
120*f585d8a3SJacky Wang   @Test
intKeyMap()121*f585d8a3SJacky Wang   public void intKeyMap() {
122*f585d8a3SJacky Wang     assertThat(multibindingComponent.integerKeyMap()).containsExactly(100, "100 int");
123*f585d8a3SJacky Wang   }
124*f585d8a3SJacky Wang 
125*f585d8a3SJacky Wang   @Test
longKeyMap()126*f585d8a3SJacky Wang   public void longKeyMap() {
127*f585d8a3SJacky Wang     assertThat(multibindingComponent.longKeyMap()).containsExactly((long) 100, "100 long");
128*f585d8a3SJacky Wang   }
129*f585d8a3SJacky Wang 
130*f585d8a3SJacky Wang   @Test
shortKeyMap()131*f585d8a3SJacky Wang   public void shortKeyMap() {
132*f585d8a3SJacky Wang     assertThat(multibindingComponent.shortKeyMap()).containsExactly((short) 100, "100 short");
133*f585d8a3SJacky Wang   }
134*f585d8a3SJacky Wang 
setBindings()135*f585d8a3SJacky Wang   @Test public void setBindings() {
136*f585d8a3SJacky Wang     assertThat(multibindingComponent.set())
137*f585d8a3SJacky Wang         .containsExactly(-90, -17, -1, 5, 6, 832, 1742, -101, -102);
138*f585d8a3SJacky Wang   }
139*f585d8a3SJacky Wang 
140*f585d8a3SJacky Wang   @Test
complexQualifierSet()141*f585d8a3SJacky Wang   public void complexQualifierSet() {
142*f585d8a3SJacky Wang     assertThat(multibindingComponent.complexQualifierStringSet()).containsExactly("foo");
143*f585d8a3SJacky Wang   }
144*f585d8a3SJacky Wang 
145*f585d8a3SJacky Wang   @Test
emptySet()146*f585d8a3SJacky Wang   public void emptySet() {
147*f585d8a3SJacky Wang     assertThat(multibindingComponent.emptySet()).isEmpty();
148*f585d8a3SJacky Wang   }
149*f585d8a3SJacky Wang 
150*f585d8a3SJacky Wang   @Test
emptyQualifiedSet()151*f585d8a3SJacky Wang   public void emptyQualifiedSet() {
152*f585d8a3SJacky Wang     assertThat(multibindingComponent.emptyQualifiedSet()).isEmpty();
153*f585d8a3SJacky Wang   }
154*f585d8a3SJacky Wang 
155*f585d8a3SJacky Wang   @Test
emptyMap()156*f585d8a3SJacky Wang   public void emptyMap() {
157*f585d8a3SJacky Wang     assertThat(multibindingComponent.emptyMap()).isEmpty();
158*f585d8a3SJacky Wang   }
159*f585d8a3SJacky Wang 
160*f585d8a3SJacky Wang   @Test
emptyQualifiedMap()161*f585d8a3SJacky Wang   public void emptyQualifiedMap() {
162*f585d8a3SJacky Wang     assertThat(multibindingComponent.emptyQualifiedMap()).isEmpty();
163*f585d8a3SJacky Wang   }
164*f585d8a3SJacky Wang 
165*f585d8a3SJacky Wang   @Test
maybeEmptySet()166*f585d8a3SJacky Wang   public void maybeEmptySet() {
167*f585d8a3SJacky Wang     assertThat(multibindingComponent.maybeEmptySet()).containsExactly("foo");
168*f585d8a3SJacky Wang   }
169*f585d8a3SJacky Wang 
170*f585d8a3SJacky Wang   @Test
maybeEmptyQualifiedSet()171*f585d8a3SJacky Wang   public void maybeEmptyQualifiedSet() {
172*f585d8a3SJacky Wang     assertThat(multibindingComponent.maybeEmptyQualifiedSet()).containsExactly("qualified foo");
173*f585d8a3SJacky Wang   }
174*f585d8a3SJacky Wang 
175*f585d8a3SJacky Wang   @Test
maybeEmptyMap()176*f585d8a3SJacky Wang   public void maybeEmptyMap() {
177*f585d8a3SJacky Wang     assertThat(multibindingComponent.maybeEmptyMap()).containsEntry("key", "foo value");
178*f585d8a3SJacky Wang   }
179*f585d8a3SJacky Wang 
180*f585d8a3SJacky Wang   @Test
maybeEmptyQualifiedMap()181*f585d8a3SJacky Wang   public void maybeEmptyQualifiedMap() {
182*f585d8a3SJacky Wang     assertThat(multibindingComponent.maybeEmptyQualifiedMap())
183*f585d8a3SJacky Wang         .containsEntry("key", "qualified foo value");
184*f585d8a3SJacky Wang   }
185*f585d8a3SJacky Wang 
186*f585d8a3SJacky Wang   @AutoAnnotation
testStringKey(String value)187*f585d8a3SJacky Wang   static StringKey testStringKey(String value) {
188*f585d8a3SJacky Wang     return new AutoAnnotation_MultibindingTest_testStringKey(value);
189*f585d8a3SJacky Wang   }
190*f585d8a3SJacky Wang 
191*f585d8a3SJacky Wang   @AutoAnnotation
nestedWrappedKey(Class<?> value)192*f585d8a3SJacky Wang   static NestedAnnotationContainer.NestedWrappedKey nestedWrappedKey(Class<?> value) {
193*f585d8a3SJacky Wang     return new AutoAnnotation_MultibindingTest_nestedWrappedKey(value);
194*f585d8a3SJacky Wang   }
195*f585d8a3SJacky Wang 
196*f585d8a3SJacky Wang   @AutoAnnotation
testWrappedAnnotationKey( StringKey value, int[] integers, ClassKey[] annotations, Class<? extends Number>[] classes)197*f585d8a3SJacky Wang   static WrappedAnnotationKey testWrappedAnnotationKey(
198*f585d8a3SJacky Wang       StringKey value, int[] integers, ClassKey[] annotations, Class<? extends Number>[] classes) {
199*f585d8a3SJacky Wang     return new AutoAnnotation_MultibindingTest_testWrappedAnnotationKey(
200*f585d8a3SJacky Wang         value, integers, annotations, classes);
201*f585d8a3SJacky Wang   }
202*f585d8a3SJacky Wang }
203