@@ -20,16 +20,15 @@ import java.util.*
20
20
class MockTest : FragNavController .TransactionListener {
21
21
22
22
@Mock
23
- private val mFragmentManager: FragmentManager ? = null
24
-
23
+ private lateinit var mFragmentManager: FragmentManager
25
24
@Mock
26
- private val mBundle: Bundle ? = null
27
-
25
+ private lateinit var mBundle: Bundle
28
26
@Mock
29
- private val mFragmentTransaction: FragmentTransaction ? = null
27
+ private lateinit var mFragmentTransaction: FragmentTransaction
28
+
29
+ private lateinit var mFragNavController: FragNavController
30
30
31
- private val mFragmentList = ArrayList <Fragment >(5 )
32
- private var mFragNavController: FragNavController ? = null
31
+ private val fragmentTagMap: MutableMap <String , Fragment > = mutableMapOf ()
33
32
34
33
@Before
35
34
fun initMocks () {
@@ -38,18 +37,21 @@ class MockTest : FragNavController.TransactionListener {
38
37
}
39
38
40
39
private fun mockFragmentTransaction () {
41
- `when `(mFragmentTransaction!! .add(ArgumentMatchers .anyInt(), ArgumentMatchers .any(Fragment ::class .java), ArgumentMatchers .anyString())).then { invocation ->
40
+ `when `(mFragmentTransaction.add(ArgumentMatchers .anyInt(), ArgumentMatchers .any(Fragment ::class .java), ArgumentMatchers .anyString())).then { invocation ->
42
41
val args = invocation.arguments
43
- mFragmentList.add( args[1 ] as Fragment )
42
+ fragmentTagMap[ args[2 ] as String ] = args[ 1 ] as Fragment
44
43
mFragmentTransaction
45
44
}
46
45
}
47
46
48
47
@SuppressLint(" CommitTransaction" )
49
48
private fun mockFragmentManager () {
50
- `when `(mFragmentManager!! .fragments).thenReturn(mFragmentList )
49
+ `when `(mFragmentManager.fragments).thenReturn(fragmentTagMap.values.toMutableList() )
51
50
52
51
`when `(mFragmentManager.beginTransaction()).thenReturn(mFragmentTransaction)
52
+ `when `(mFragmentManager.findFragmentByTag(ArgumentMatchers .anyString())).then({ invocation ->
53
+ return @then fragmentTagMap[invocation.arguments[0 ]]
54
+ })
53
55
}
54
56
55
57
@Test
@@ -58,12 +60,12 @@ class MockTest : FragNavController.TransactionListener {
58
60
rootFragments.add(Fragment ())
59
61
rootFragments.add(Fragment ())
60
62
61
- mFragNavController = FragNavController .newBuilder(null , mFragmentManager!! , 1 )
63
+ mFragNavController = FragNavController .newBuilder(null , mFragmentManager, 1 )
62
64
.rootFragments(rootFragments)
63
65
.build()
64
66
65
- assertEquals(FragNavController .TAB1 .toLong(), mFragNavController!! .currentStackIndex.toLong())
66
- assertNotNull(mFragNavController!! .currentStack)
67
+ assertEquals(FragNavController .TAB1 .toLong(), mFragNavController.currentStackIndex.toLong())
68
+ assertNotNull(mFragNavController.currentStack)
67
69
}
68
70
69
71
@Test
@@ -72,15 +74,15 @@ class MockTest : FragNavController.TransactionListener {
72
74
rootFragments.add(Fragment ())
73
75
rootFragments.add(Fragment ())
74
76
75
- mFragNavController = FragNavController .newBuilder(null , mFragmentManager!! , 1 )
77
+ mFragNavController = FragNavController .newBuilder(null , mFragmentManager, 1 )
76
78
.rootFragments(rootFragments)
77
79
.fragmentHideStrategy(FragNavController .DETACH_ON_NAVIGATE_HIDE_ON_SWITCH )
78
80
.eager(true )
79
81
.build()
80
82
81
- assertEquals(FragNavController .TAB1 .toLong(), mFragNavController!! .currentStackIndex.toLong())
82
- assertNotNull(mFragNavController!! .currentStack)
83
- assertEquals(mFragNavController!! .size.toLong(), 2 )
83
+ assertEquals(FragNavController .TAB1 .toLong(), mFragNavController.currentStackIndex.toLong())
84
+ assertNotNull(mFragNavController.currentStack)
85
+ assertEquals(mFragNavController.size.toLong(), 2 )
84
86
verify<FragmentTransaction >(mFragmentTransaction, times(2 )).add(ArgumentMatchers .anyInt(), ArgumentMatchers .any(Fragment ::class .java), ArgumentMatchers .anyString())
85
87
}
86
88
@@ -92,7 +94,7 @@ class MockTest : FragNavController.TransactionListener {
92
94
rootFragments.add(Fragment ())
93
95
}
94
96
95
- mFragNavController = FragNavController .newBuilder(null , mFragmentManager!! , 1 )
97
+ mFragNavController = FragNavController .newBuilder(null , mFragmentManager, 1 )
96
98
.rootFragments(rootFragments)
97
99
.build()
98
100
}
@@ -103,34 +105,34 @@ class MockTest : FragNavController.TransactionListener {
103
105
rootFragments.add(Fragment ())
104
106
rootFragments.add(Fragment ())
105
107
106
- mFragNavController = FragNavController .newBuilder(null , mFragmentManager!! , 1 )
108
+ mFragNavController = FragNavController .newBuilder(null , mFragmentManager, 1 )
107
109
.rootFragments(rootFragments)
108
110
.selectedTabIndex(FragNavController .NO_TAB )
109
111
.build()
110
112
111
- assertEquals(FragNavController .NO_TAB .toLong(), mFragNavController!! .currentStackIndex.toLong())
112
- assertNull(mFragNavController!! .currentStack)
113
+ assertEquals(FragNavController .NO_TAB .toLong(), mFragNavController.currentStackIndex.toLong())
114
+ assertNull(mFragNavController.currentStack)
113
115
}
114
116
115
117
@Test
116
118
fun testConstructionWhenRootFragmentListenerAndTabSelected () {
117
119
val rootFragmentListener = mock(FragNavController .RootFragmentListener ::class .java)
118
120
doReturn(Fragment ()).`when `<FragNavController .RootFragmentListener >(rootFragmentListener).getRootFragment(ArgumentMatchers .anyInt())
119
121
120
- mFragNavController = FragNavController .newBuilder(null , mFragmentManager!! , 1 )
122
+ mFragNavController = FragNavController .newBuilder(null , mFragmentManager, 1 )
121
123
.rootFragmentListener(rootFragmentListener, 5 )
122
124
.selectedTabIndex(FragNavController .TAB3 )
123
125
.build()
124
126
125
- assertEquals(FragNavController .TAB3 .toLong(), mFragNavController!! .currentStackIndex.toLong())
126
- assertNotNull(mFragNavController!! .currentStack)
127
+ assertEquals(FragNavController .TAB3 .toLong(), mFragNavController.currentStackIndex.toLong())
128
+ assertNotNull(mFragNavController.currentStack)
127
129
}
128
130
129
131
@Test(expected = IllegalArgumentException ::class )
130
132
fun testConstructionWhenRootFragmentListenerAndTooManyTabs () {
131
133
val rootFragmentListener = mock(FragNavController .RootFragmentListener ::class .java)
132
134
133
- mFragNavController = FragNavController .newBuilder(null , mFragmentManager!! , 1 )
135
+ mFragNavController = FragNavController .newBuilder(null , mFragmentManager, 1 )
134
136
.rootFragmentListener(rootFragmentListener, 21 )
135
137
.selectedTabIndex(FragNavController .TAB3 )
136
138
.build()
@@ -143,59 +145,59 @@ class MockTest : FragNavController.TransactionListener {
143
145
rootFragments.add(Fragment ())
144
146
rootFragments.add(Fragment ())
145
147
146
- mFragNavController = FragNavController .newBuilder(null , mFragmentManager!! , 1 )
148
+ mFragNavController = FragNavController .newBuilder(null , mFragmentManager, 1 )
147
149
.rootFragments(rootFragments)
148
150
.selectedTabIndex(FragNavController .TAB1 )
149
151
.build()
150
152
151
- mFragNavController!! .switchTab(FragNavController .TAB2 )
152
- mFragNavController!! .pushFragment(Fragment ())
153
- mFragNavController!! .pushFragment(Fragment ())
154
- mFragNavController!! .pushFragment(Fragment ())
153
+ mFragNavController.switchTab(FragNavController .TAB2 )
154
+ mFragNavController.pushFragment(Fragment ())
155
+ mFragNavController.pushFragment(Fragment ())
156
+ mFragNavController.pushFragment(Fragment ())
155
157
156
- val currentFragment = mFragNavController!! .currentFrag
158
+ val currentFragment = mFragNavController.currentFrag
157
159
158
160
val bundle = Bundle ()
159
161
160
- mFragNavController!! .onSaveInstanceState(bundle)
162
+ mFragNavController.onSaveInstanceState(bundle)
161
163
162
164
mFragNavController = FragNavController .newBuilder(bundle, mFragmentManager, 1 )
163
165
.rootFragments(rootFragments)
164
166
.selectedTabIndex(FragNavController .TAB1 )
165
167
.build()
166
168
167
- assertEquals(FragNavController .TAB2 .toLong(), mFragNavController!! .currentStackIndex.toLong())
168
- assertEquals(4 , mFragNavController!! .currentStack!! .size.toLong())
169
- assertEquals(currentFragment, mFragNavController!! .currentFrag)
169
+ assertEquals(FragNavController .TAB2 .toLong(), mFragNavController.currentStackIndex.toLong())
170
+ assertEquals(4 , mFragNavController.currentStack!! .size.toLong())
171
+ assertEquals(currentFragment, mFragNavController.currentFrag)
170
172
}
171
173
172
174
@Test
173
175
fun pushPopClear () {
174
- mFragNavController = FragNavController .newBuilder(mBundle, mFragmentManager!! , 1 )
176
+ mFragNavController = FragNavController .newBuilder(mBundle, mFragmentManager, 1 )
175
177
.transactionListener(this )
176
178
.rootFragment(mock(Fragment ::class .java))
177
179
.build()
178
180
179
- assertEquals(FragNavController .TAB1 .toLong(), mFragNavController!! .currentStackIndex.toLong())
180
- assertNotNull(mFragNavController!! .currentStack)
181
+ assertEquals(FragNavController .TAB1 .toLong(), mFragNavController.currentStackIndex.toLong())
182
+ assertNotNull(mFragNavController.currentStack)
181
183
182
- var size = mFragNavController!! .currentStack!! .size
184
+ var size = mFragNavController.currentStack!! .size
183
185
184
- mFragNavController!! .pushFragment(mock(Fragment ::class .java))
185
- assertTrue(mFragNavController!! .currentStack!! .size == ++ size)
186
+ mFragNavController.pushFragment(mock(Fragment ::class .java))
187
+ assertTrue(mFragNavController.currentStack!! .size == ++ size)
186
188
187
- mFragNavController!! .pushFragment(mock(Fragment ::class .java))
188
- assertTrue(mFragNavController!! .currentStack!! .size == ++ size)
189
+ mFragNavController.pushFragment(mock(Fragment ::class .java))
190
+ assertTrue(mFragNavController.currentStack!! .size == ++ size)
189
191
190
- mFragNavController!! .pushFragment(mock(Fragment ::class .java))
191
- assertTrue(mFragNavController!! .currentStack!! .size == ++ size)
192
+ mFragNavController.pushFragment(mock(Fragment ::class .java))
193
+ assertTrue(mFragNavController.currentStack!! .size == ++ size)
192
194
193
- mFragNavController!! .popFragment()
194
- assertTrue(mFragNavController!! .currentStack!! .size == -- size)
195
+ mFragNavController.popFragment()
196
+ assertTrue(mFragNavController.currentStack!! .size == -- size)
195
197
196
- mFragNavController!! .clearStack()
197
- assertTrue(mFragNavController!! .currentStack!! .size == 1 )
198
- assertTrue(mFragNavController!! .isRootFragment)
198
+ mFragNavController.clearStack()
199
+ assertTrue(mFragNavController.currentStack!! .size == 1 )
200
+ assertTrue(mFragNavController.isRootFragment)
199
201
}
200
202
201
203
override fun onTabTransaction (fragment : Fragment ? , index : Int ) {
0 commit comments