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