@@ -24,6 +24,7 @@ import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarAppearanceAn
24
24
import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarController
25
25
import com.reactnativenavigation.viewcontrollers.stack.topbar.button.BackButtonHelper
26
26
import com.reactnativenavigation.viewcontrollers.stack.topbar.button.IconResolver
27
+ import com.reactnativenavigation.viewcontrollers.statusbar.StatusBarPresenter
27
28
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
28
29
import com.reactnativenavigation.views.stack.StackBehaviour
29
30
import com.reactnativenavigation.views.stack.StackLayout
@@ -43,7 +44,6 @@ import kotlin.test.fail
43
44
class StackControllerTest : BaseTest () {
44
45
private lateinit var activity: Activity
45
46
private lateinit var childRegistry: ChildControllersRegistry
46
- private lateinit var uut: StackController
47
47
private lateinit var child1: ViewController <* >
48
48
private lateinit var child1a: ViewController <* >
49
49
private lateinit var child2: ViewController <* >
@@ -56,28 +56,23 @@ class StackControllerTest : BaseTest() {
56
56
private lateinit var presenter: StackPresenter
57
57
private lateinit var backButtonHelper: BackButtonHelper
58
58
private lateinit var eventEmitter: EventEmitter
59
+ private lateinit var uut: StackController
59
60
60
61
override fun beforeEach () {
61
62
super .beforeEach()
62
63
eventEmitter = mock()
63
64
backButtonHelper = spy(BackButtonHelper ())
64
65
activity = newActivity()
66
+ StatusBarPresenter .init (activity)
65
67
SystemUiUtils .saveStatusBarHeight(63 )
66
68
animator = spy(StackAnimator (activity))
67
69
childRegistry = ChildControllersRegistry ()
68
- presenter = spy(StackPresenter (
69
- activity,
70
- TitleBarReactViewCreatorMock (),
71
- TopBarBackgroundViewCreatorMock (),
72
- TitleBarButtonCreatorMock (),
73
- IconResolver (activity, ImageLoaderMock .mock()),
74
- TypefaceLoaderMock (),
75
- RenderChecker (),
76
- Options ()
77
- )
78
- )
70
+ topBarAnimator = TopBarAppearanceAnimator ()
71
+ topBarController = createTopBarController(topBarAnimator)
72
+ presenter = createStackPresenter()
79
73
createChildren()
80
- uut = createStack()
74
+
75
+ uut = createStackBuilder(" stack" , ArrayList ()).build()
81
76
activity.setContentView(uut.view)
82
77
}
83
78
@@ -101,7 +96,7 @@ class StackControllerTest : BaseTest() {
101
96
@Test
102
97
fun childrenMustBeUniqueById () {
103
98
try {
104
- val uut: StackController = createStack (listOf (child1, child2, child1))
99
+ val uut: StackController = recreateStack (listOf (child1, child2, child1))
105
100
fail(" Stack should not have duplicate ids!" )
106
101
} catch (e: IllegalArgumentException ) {
107
102
assertThat(e.message).contains(child1.id)
@@ -110,22 +105,22 @@ class StackControllerTest : BaseTest() {
110
105
111
106
@Test
112
107
fun childrenAreAssignedParent () {
113
- val uut: StackController = createStack (listOf (child1, child2))
108
+ val uut: StackController = recreateStack (listOf (child1, child2))
114
109
for (child in uut.childControllers) {
115
110
assertThat(child.parentController == uut).isTrue()
116
111
}
117
112
}
118
113
119
114
@Test
120
115
fun constructor_backButtonIsAddedToChild () {
121
- createStack (listOf (child1, child2, child3))
116
+ recreateStack (listOf (child1, child2, child3))
122
117
assertThat(child2.options.topBar.buttons.back.visible[false ]).isTrue()
123
118
assertThat(child3.options.topBar.buttons.back.visible[false ]).isTrue()
124
119
}
125
120
126
121
@Test
127
122
fun createView_currentChildIsAdded () {
128
- val uut: StackController = createStack (listOf (child1, child2, child3, child4))
123
+ val uut: StackController = recreateStack (listOf (child1, child2, child3, child4))
129
124
assertThat(uut.childControllers.size).isEqualTo(4 )
130
125
assertThat(uut.view.childCount).isEqualTo(2 )
131
126
assertThat(uut.view.getChildAt(0 )).isEqualTo(child4.view)
@@ -622,7 +617,7 @@ class StackControllerTest : BaseTest() {
622
617
assertThat(child1.parentController).isNull()
623
618
uut.push(child1, CommandListenerAdapter ())
624
619
assertThat(child1.parentController).isEqualTo(uut)
625
- val anotherNavController = createStack (" another" )
620
+ val anotherNavController = recreateStack (" another" )
626
621
anotherNavController.ensureViewIsCreated()
627
622
anotherNavController.push(child2, CommandListenerAdapter ())
628
623
assertThat(child2.parentController).isEqualTo(anotherNavController)
@@ -832,7 +827,7 @@ class StackControllerTest : BaseTest() {
832
827
833
828
@Test
834
829
fun findControllerById_Deeply () {
835
- val stack = createStack (" another" )
830
+ val stack = recreateStack (" another" )
836
831
stack.ensureViewIsCreated()
837
832
stack.push(child2, CommandListenerAdapter ())
838
833
uut.push(stack, CommandListenerAdapter ())
@@ -923,8 +918,7 @@ class StackControllerTest : BaseTest() {
923
918
924
919
@Test
925
920
fun stackCanBePushed () {
926
- uut.view.removeFromParent()
927
- val parent = createStack(" someStack" )
921
+ val parent = recreateStack(" someStack" )
928
922
parent.ensureViewIsCreated()
929
923
parent.push(uut, CommandListenerAdapter ())
930
924
uut.onViewWillAppear()
@@ -933,8 +927,7 @@ class StackControllerTest : BaseTest() {
933
927
934
928
@Test
935
929
fun applyOptions_applyOnlyOnFirstStack () {
936
- uut.view.removeFromParent()
937
- val parent = spy(createStack(" someStack" ))
930
+ val parent = spy(recreateStack(" someStack" ))
938
931
parent.ensureViewIsCreated()
939
932
parent.push(uut, CommandListenerAdapter ())
940
933
val childOptions = Options ()
@@ -1056,7 +1049,7 @@ class StackControllerTest : BaseTest() {
1056
1049
activity.setContentView(parent)
1057
1050
1058
1051
val child = SimpleViewController (activity, childRegistry, " child1" , Options ())
1059
- val stack = createStack (Collections .singletonList(child))
1052
+ val stack = recreateStack (Collections .singletonList(child))
1060
1053
stack.view.visibility = View .INVISIBLE
1061
1054
1062
1055
parent.addView(stack.view)
@@ -1068,7 +1061,7 @@ class StackControllerTest : BaseTest() {
1068
1061
@Test
1069
1062
fun onAttachToParent_doesNotCrashWhenCalledAfterDestroy () {
1070
1063
Robolectric .getForegroundThreadScheduler().pause()
1071
- val spy = spy(createStack ())
1064
+ val spy = spy(recreateStack ())
1072
1065
val view = spy.view
1073
1066
spy.push(child1, CommandListenerAdapter ())
1074
1067
activity.setContentView(view)
@@ -1128,39 +1121,57 @@ class StackControllerTest : BaseTest() {
1128
1121
.containsOnly(* ids)
1129
1122
}
1130
1123
1131
- private fun createStack (): StackController {
1124
+ private fun recreateStack (): StackController {
1125
+ uut.view.removeFromParent()
1126
+ topBarController.view.removeFromParent()
1127
+
1132
1128
return createStackBuilder(" stack" , ArrayList ()).build()
1133
1129
}
1134
1130
1135
- private fun createStack (id : String ): StackController {
1131
+ private fun recreateStack (id : String ): StackController {
1132
+ uut.view.removeFromParent()
1133
+ topBarController.view.removeFromParent()
1134
+
1136
1135
return createStackBuilder(id, ArrayList ()).build()
1137
1136
}
1138
1137
1139
- private fun createStack (children : List <ViewController <* >>): StackController {
1138
+ private fun recreateStack (children : List <ViewController <* >>): StackController {
1139
+ uut.view.removeFromParent()
1140
+ topBarController.view.removeFromParent()
1141
+
1140
1142
return createStackBuilder(" stack" , children).build()
1141
1143
}
1142
1144
1143
1145
private fun createStackBuilder (id : String , children : List <ViewController <* >>): StackControllerBuilder {
1144
- createTopBarController()
1145
- return TestUtils .newStackController(activity)
1146
+ return TestUtils .newStackController(activity, topBarController)
1146
1147
.setEventEmitter(eventEmitter)
1147
1148
.setChildren(children)
1148
1149
.setId(id)
1149
- .setTopBarController(topBarController)
1150
1150
.setChildRegistry(childRegistry)
1151
1151
.setAnimator(animator)
1152
1152
.setStackPresenter(presenter)
1153
1153
.setBackButtonHelper(backButtonHelper)
1154
1154
}
1155
1155
1156
- private fun createTopBarController () {
1157
- topBarAnimator = TopBarAppearanceAnimator ()
1158
- topBarController = spy(object : TopBarController (topBarAnimator) {
1156
+ private fun createTopBarController (topBarAnimator : TopBarAppearanceAnimator ): TopBarController =
1157
+ spy(object : TopBarController (topBarAnimator) {
1159
1158
override fun createTopBar (context : Context , stackLayout : StackLayout ): TopBar {
1160
1159
val spy = spy(super .createTopBar(context, stackLayout))
1161
1160
spy.layout(0 , 0 , 1000 , UiUtils .getTopBarHeight(activity))
1162
1161
return spy
1163
1162
}
1164
1163
})
1165
- }
1164
+
1165
+ private fun createStackPresenter () =
1166
+ spy(StackPresenter (
1167
+ activity,
1168
+ TitleBarReactViewCreatorMock (),
1169
+ TitleBarButtonCreatorMock (),
1170
+ topBarController,
1171
+ IconResolver (activity, ImageLoaderMock .mock()),
1172
+ TypefaceLoaderMock (),
1173
+ RenderChecker (),
1174
+ Options (),
1175
+ TopBarBackgroundViewCreatorMock ()
1176
+ ))
1166
1177
}
0 commit comments