1 /*
2  * Copyright 2019 The Android Open Source Project
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 androidx.navigation.dynamicfeatures.fragment
18 
19 import android.os.Bundle
20 import androidx.fragment.app.FragmentActivity
21 import androidx.navigation.dynamicfeatures.fragment.test.R
22 import androidx.test.annotation.UiThreadTest
23 import androidx.test.core.app.ActivityScenario
24 import androidx.test.ext.junit.rules.ActivityScenarioRule
25 import androidx.test.ext.junit.runners.AndroidJUnit4
26 import androidx.test.filters.MediumTest
27 import androidx.testutils.withActivity
28 import com.google.android.play.core.splitinstall.SplitInstallManager
29 import com.google.common.truth.Truth.assertThat
30 import org.junit.Rule
31 import org.junit.Test
32 import org.junit.runner.RunWith
33 
34 @MediumTest
35 @RunWith(AndroidJUnit4::class)
36 public class DynamicNavHostFragmentTest {
37 
38     @get:Rule
39     public val rule: ActivityScenarioRule<NavigationActivity> =
40         ActivityScenarioRule(NavigationActivity::class.java)
41 
42     @Test
createSplitInstallManagernull43     public fun createSplitInstallManager() {
44         lateinit var fragment: TestDynamicNavHostFragment
45         with(ActivityScenario.launch(NavigationActivity::class.java)) {
46             withActivity {
47                 fragment = TestDynamicNavHostFragment()
48                 supportFragmentManager
49                     .beginTransaction()
50                     .add(R.id.nav_host, fragment, null)
51                     .setPrimaryNavigationFragment(fragment)
52                     .commitNow()
53             }
54         }
55         assertThat(fragment.createSplitInstallManager())
56             .isEqualTo(fragment.createSplitInstallManager())
57     }
58 
59     @UiThreadTest
60     @Test
create_noArgsnull61     public fun create_noArgs() {
62         val fragment = DynamicNavHostFragment.create(R.id.nav_host)
63         assertThat(fragment.arguments!!.size()).isEqualTo(1)
64     }
65 
66     @UiThreadTest
67     @Test
create_withArgsnull68     public fun create_withArgs() {
69         val fragment =
70             DynamicNavHostFragment.create(R.id.nav_host, Bundle().apply { putInt("Test", 1) })
71         assertThat(fragment.arguments!!.size()).isEqualTo(2)
72     }
73 }
74 
75 public class NavigationActivity : FragmentActivity() {
onCreatenull76     override fun onCreate(savedInstanceState: Bundle?) {
77         setContentView(R.layout.dynamic_activity_layout)
78         super.onCreate(savedInstanceState)
79     }
80 }
81 
82 public class TestDynamicNavHostFragment : DynamicNavHostFragment() {
createSplitInstallManagernull83     public override fun createSplitInstallManager(): SplitInstallManager =
84         super.createSplitInstallManager()
85 }
86