• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 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.hilt.android.testing.testinstallin;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import androidx.fragment.app.Fragment;
22 import androidx.fragment.app.FragmentActivity;
23 import androidx.test.core.app.ActivityScenario;
24 import androidx.test.ext.junit.runners.AndroidJUnit4;
25 import dagger.hilt.android.AndroidEntryPoint;
26 import dagger.hilt.android.testing.HiltAndroidRule;
27 import dagger.hilt.android.testing.HiltAndroidTest;
28 import dagger.hilt.android.testing.HiltTestApplication;
29 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.ActivityBarModule;
30 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.ActivityFooTestModule;
31 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.ActivityLevel;
32 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.Bar;
33 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.Foo;
34 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.FragmentBarModule;
35 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.FragmentFooTestModule;
36 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.FragmentLevel;
37 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.SingletonBarModule;
38 import dagger.hilt.android.testing.testinstallin.TestInstallInModules.SingletonFooTestModule;
39 import javax.inject.Inject;
40 import org.junit.Rule;
41 import org.junit.Test;
42 import org.junit.runner.RunWith;
43 import org.robolectric.annotation.Config;
44 
45 // Test that Foo uses the global @TestInstallIn module and Bar uses the global @InstallIn module.
46 @HiltAndroidTest
47 @RunWith(AndroidJUnit4.class)
48 @Config(application = HiltTestApplication.class)
49 public final class TestInstallInFooTest {
50 
51   @Rule public HiltAndroidRule hiltRule = new HiltAndroidRule(this);
52 
53   @Inject Foo foo;
54   @Inject Bar bar;
55 
56   @AndroidEntryPoint(FragmentActivity.class)
57   public static final class TestActivity extends Hilt_TestInstallInFooTest_TestActivity {
58     @Inject @ActivityLevel Foo foo;
59     @Inject @ActivityLevel Bar bar;
60   }
61 
62   @AndroidEntryPoint(Fragment.class)
63   public static final class TestFragment extends Hilt_TestInstallInFooTest_TestFragment {
64     @Inject @FragmentLevel Foo foo;
65     @Inject @FragmentLevel Bar bar;
66   }
67 
68   @Test
testSingletonFooUsesTestInstallIn()69   public void testSingletonFooUsesTestInstallIn() {
70     hiltRule.inject();
71     assertThat(foo.moduleClass).isEqualTo(SingletonFooTestModule.class);
72   }
73 
74   @Test
testSingletonBarUsesInstallIn()75   public void testSingletonBarUsesInstallIn() {
76     hiltRule.inject();
77     assertThat(bar.moduleClass).isEqualTo(SingletonBarModule.class);
78   }
79 
80   @Test
testActivityFooUsesTestInstallIn()81   public void testActivityFooUsesTestInstallIn() {
82     try (ActivityScenario<TestActivity> scenario = ActivityScenario.launch(TestActivity.class)) {
83       scenario.onActivity(
84           activity -> assertThat(activity.foo.moduleClass).isEqualTo(ActivityFooTestModule.class));
85     }
86   }
87 
88   @Test
testActivityBarUsesInstallIn()89   public void testActivityBarUsesInstallIn() {
90     try (ActivityScenario<TestActivity> scenario = ActivityScenario.launch(TestActivity.class)) {
91       scenario.onActivity(
92           activity -> assertThat(activity.bar.moduleClass).isEqualTo(ActivityBarModule.class));
93     }
94   }
95 
96   @Test
testFragmentFooUsesTestInstallIn()97   public void testFragmentFooUsesTestInstallIn() {
98     try (ActivityScenario<TestActivity> scenario = ActivityScenario.launch(TestActivity.class)) {
99       scenario.onActivity(
100           activity -> assertThat(getTestFragment(activity).foo.moduleClass)
101               .isEqualTo(FragmentFooTestModule.class));
102     }
103   }
104 
105   @Test
testFragmentBarUsesInstallIn()106   public void testFragmentBarUsesInstallIn() {
107     try (ActivityScenario<TestActivity> scenario = ActivityScenario.launch(TestActivity.class)) {
108       scenario.onActivity(
109           activity -> assertThat(getTestFragment(activity).bar.moduleClass)
110               .isEqualTo(FragmentBarModule.class));
111     }
112   }
113 
getTestFragment(FragmentActivity activity)114   private TestFragment getTestFragment(FragmentActivity activity) {
115     TestFragment fragment = new TestFragment();
116     activity
117         .getSupportFragmentManager()
118         .beginTransaction()
119         .add(fragment, null)
120         .commitNow();
121     return fragment;
122   }
123 }
124