xref: /aosp_15_r20/external/dagger2/javatests/dagger/functional/membersinject/MembersInjectTest.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.membersinject;
18*f585d8a3SJacky Wang 
19*f585d8a3SJacky Wang import static com.google.common.truth.Truth.assertThat;
20*f585d8a3SJacky Wang 
21*f585d8a3SJacky Wang import dagger.BindsInstance;
22*f585d8a3SJacky Wang import dagger.Component;
23*f585d8a3SJacky Wang import dagger.MembersInjector;
24*f585d8a3SJacky Wang import dagger.functional.membersinject.subpackage.a.AGrandchild;
25*f585d8a3SJacky Wang import dagger.functional.membersinject.subpackage.a.AParent;
26*f585d8a3SJacky Wang import dagger.functional.membersinject.subpackage.b.BChild;
27*f585d8a3SJacky Wang import dagger.internal.Provider;
28*f585d8a3SJacky Wang import javax.inject.Inject;
29*f585d8a3SJacky Wang import org.junit.Test;
30*f585d8a3SJacky Wang import org.junit.runner.RunWith;
31*f585d8a3SJacky Wang import org.junit.runners.JUnit4;
32*f585d8a3SJacky Wang 
33*f585d8a3SJacky Wang @RunWith(JUnit4.class)
34*f585d8a3SJacky Wang public class MembersInjectTest {
testMembersInject_arrays()35*f585d8a3SJacky Wang   @Test public void testMembersInject_arrays() {
36*f585d8a3SJacky Wang     MembersInjectComponent component = DaggerMembersInjectComponent.builder().build();
37*f585d8a3SJacky Wang 
38*f585d8a3SJacky Wang     ChildOfStringArray childOfStringArray = new ChildOfStringArray();
39*f585d8a3SJacky Wang     component.inject(childOfStringArray);
40*f585d8a3SJacky Wang   }
41*f585d8a3SJacky Wang 
testMembersInject_nestedArrays()42*f585d8a3SJacky Wang   @Test public void testMembersInject_nestedArrays() {
43*f585d8a3SJacky Wang     MembersInjectComponent component = DaggerMembersInjectComponent.builder().build();
44*f585d8a3SJacky Wang 
45*f585d8a3SJacky Wang     ChildOfArrayOfParentOfStringArray childOfArrayOfParentOfStringArray =
46*f585d8a3SJacky Wang         new ChildOfArrayOfParentOfStringArray();
47*f585d8a3SJacky Wang     component.inject(childOfArrayOfParentOfStringArray);
48*f585d8a3SJacky Wang   }
49*f585d8a3SJacky Wang 
testMembersInject_primitives()50*f585d8a3SJacky Wang   @Test public void testMembersInject_primitives() {
51*f585d8a3SJacky Wang     MembersInjectComponent component = DaggerMembersInjectComponent.builder().build();
52*f585d8a3SJacky Wang 
53*f585d8a3SJacky Wang     ChildOfPrimitiveIntArray childOfPrimitiveIntArray = new ChildOfPrimitiveIntArray();
54*f585d8a3SJacky Wang     component.inject(childOfPrimitiveIntArray);
55*f585d8a3SJacky Wang   }
56*f585d8a3SJacky Wang 
57*f585d8a3SJacky Wang   @Test
testMembersInject_overrides()58*f585d8a3SJacky Wang   public void testMembersInject_overrides() {
59*f585d8a3SJacky Wang     MembersInjectionVisibilityComponent component =
60*f585d8a3SJacky Wang         DaggerMembersInjectionVisibilityComponent.create();
61*f585d8a3SJacky Wang     AParent aParent = new AParent();
62*f585d8a3SJacky Wang     component.inject(aParent);
63*f585d8a3SJacky Wang     assertThat(aParent.aParentField()).isNotNull();
64*f585d8a3SJacky Wang     assertThat(aParent.aParentMethod()).isNotNull();
65*f585d8a3SJacky Wang 
66*f585d8a3SJacky Wang     BChild aChild = new BChild();
67*f585d8a3SJacky Wang     component.inject(aChild);
68*f585d8a3SJacky Wang     assertThat(aChild.aParentField()).isNotNull();
69*f585d8a3SJacky Wang     assertThat(aChild.aParentMethod()).isNull();
70*f585d8a3SJacky Wang     assertThat(aChild.aChildField()).isNotNull();
71*f585d8a3SJacky Wang     assertThat(aChild.aChildMethod()).isNotNull();
72*f585d8a3SJacky Wang 
73*f585d8a3SJacky Wang     AGrandchild aGrandchild = new AGrandchild();
74*f585d8a3SJacky Wang     component.inject(aGrandchild);
75*f585d8a3SJacky Wang     assertThat(aGrandchild.aParentField()).isNotNull();
76*f585d8a3SJacky Wang     assertThat(aGrandchild.aParentMethod()).isNotNull();
77*f585d8a3SJacky Wang     assertThat(aGrandchild.aChildField()).isNotNull();
78*f585d8a3SJacky Wang     assertThat(aGrandchild.aChildMethod()).isNull();
79*f585d8a3SJacky Wang     assertThat(aGrandchild.aGrandchildField()).isNotNull();
80*f585d8a3SJacky Wang     assertThat(aGrandchild.aGrandchildMethod()).isNotNull();
81*f585d8a3SJacky Wang   }
82*f585d8a3SJacky Wang 
83*f585d8a3SJacky Wang   @Test
testNonRequestedMembersInjector()84*f585d8a3SJacky Wang   public void testNonRequestedMembersInjector() {
85*f585d8a3SJacky Wang     NonRequestedChild child = new NonRequestedChild();
86*f585d8a3SJacky Wang     Provider<String> provider =
87*f585d8a3SJacky Wang         new Provider<String>() {
88*f585d8a3SJacky Wang           @Override
89*f585d8a3SJacky Wang           public String get() {
90*f585d8a3SJacky Wang             return "field!";
91*f585d8a3SJacky Wang           }
92*f585d8a3SJacky Wang         };
93*f585d8a3SJacky Wang     MembersInjector<NonRequestedChild> injector = new NonRequestedChild_MembersInjector(provider);
94*f585d8a3SJacky Wang     injector.injectMembers(child);
95*f585d8a3SJacky Wang     assertThat(child.t).isEqualTo("field!");
96*f585d8a3SJacky Wang   }
97*f585d8a3SJacky Wang 
98*f585d8a3SJacky Wang   public static final class A extends B {
99*f585d8a3SJacky Wang     // No injected members
100*f585d8a3SJacky Wang   }
101*f585d8a3SJacky Wang 
102*f585d8a3SJacky Wang   public static class B extends C {
103*f585d8a3SJacky Wang     // No injected members
104*f585d8a3SJacky Wang   }
105*f585d8a3SJacky Wang 
106*f585d8a3SJacky Wang   public static class C {
107*f585d8a3SJacky Wang     @Inject String value;
108*f585d8a3SJacky Wang   }
109*f585d8a3SJacky Wang 
110*f585d8a3SJacky Wang   @Component
111*f585d8a3SJacky Wang   interface NonLocalMembersComponent {
getAMembersInjector()112*f585d8a3SJacky Wang     MembersInjector<A> getAMembersInjector();
113*f585d8a3SJacky Wang 
114*f585d8a3SJacky Wang     @Component.Factory
115*f585d8a3SJacky Wang     interface Factory {
create(@indsInstance String value)116*f585d8a3SJacky Wang       NonLocalMembersComponent create(@BindsInstance String value);
117*f585d8a3SJacky Wang     }
118*f585d8a3SJacky Wang   }
119*f585d8a3SJacky Wang 
120*f585d8a3SJacky Wang   @Test
testNonLocalMembersInjection()121*f585d8a3SJacky Wang   public void testNonLocalMembersInjection() {
122*f585d8a3SJacky Wang     MembersInjector<A> membersInjector = DaggerMembersInjectTest_NonLocalMembersComponent.factory()
123*f585d8a3SJacky Wang         .create("test").getAMembersInjector();
124*f585d8a3SJacky Wang     A testA = new A();
125*f585d8a3SJacky Wang     membersInjector.injectMembers(testA);
126*f585d8a3SJacky Wang     assertThat(testA.value).isEqualTo("test");
127*f585d8a3SJacky Wang   }
128*f585d8a3SJacky Wang }
129