@@ -24,6 +24,7 @@ import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarAppearanceAn
2424import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarController
2525import com.reactnativenavigation.viewcontrollers.stack.topbar.button.BackButtonHelper
2626import com.reactnativenavigation.viewcontrollers.stack.topbar.button.IconResolver
27+ import com.reactnativenavigation.viewcontrollers.statusbar.StatusBarPresenter
2728import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
2829import com.reactnativenavigation.views.stack.StackBehaviour
2930import com.reactnativenavigation.views.stack.StackLayout
@@ -43,7 +44,6 @@ import kotlin.test.fail
4344class StackControllerTest : BaseTest () {
4445 private lateinit var activity: Activity
4546 private lateinit var childRegistry: ChildControllersRegistry
46- private lateinit var uut: StackController
4747 private lateinit var child1: ViewController <* >
4848 private lateinit var child1a: ViewController <* >
4949 private lateinit var child2: ViewController <* >
@@ -56,28 +56,23 @@ class StackControllerTest : BaseTest() {
5656 private lateinit var presenter: StackPresenter
5757 private lateinit var backButtonHelper: BackButtonHelper
5858 private lateinit var eventEmitter: EventEmitter
59+ private lateinit var uut: StackController
5960
6061 override fun beforeEach () {
6162 super .beforeEach()
6263 eventEmitter = mock()
6364 backButtonHelper = spy(BackButtonHelper ())
6465 activity = newActivity()
66+ StatusBarPresenter .init (activity)
6567 SystemUiUtils .saveStatusBarHeight(63 )
6668 animator = spy(StackAnimator (activity))
6769 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()
7973 createChildren()
80- uut = createStack()
74+
75+ uut = createStackBuilder(" stack" , ArrayList ()).build()
8176 activity.setContentView(uut.view)
8277 }
8378
@@ -101,7 +96,7 @@ class StackControllerTest : BaseTest() {
10196 @Test
10297 fun childrenMustBeUniqueById () {
10398 try {
104- val uut: StackController = createStack (listOf (child1, child2, child1))
99+ val uut: StackController = recreateStack (listOf (child1, child2, child1))
105100 fail(" Stack should not have duplicate ids!" )
106101 } catch (e: IllegalArgumentException ) {
107102 assertThat(e.message).contains(child1.id)
@@ -110,22 +105,22 @@ class StackControllerTest : BaseTest() {
110105
111106 @Test
112107 fun childrenAreAssignedParent () {
113- val uut: StackController = createStack (listOf (child1, child2))
108+ val uut: StackController = recreateStack (listOf (child1, child2))
114109 for (child in uut.childControllers) {
115110 assertThat(child.parentController == uut).isTrue()
116111 }
117112 }
118113
119114 @Test
120115 fun constructor_backButtonIsAddedToChild () {
121- createStack (listOf (child1, child2, child3))
116+ recreateStack (listOf (child1, child2, child3))
122117 assertThat(child2.options.topBar.buttons.back.visible[false ]).isTrue()
123118 assertThat(child3.options.topBar.buttons.back.visible[false ]).isTrue()
124119 }
125120
126121 @Test
127122 fun createView_currentChildIsAdded () {
128- val uut: StackController = createStack (listOf (child1, child2, child3, child4))
123+ val uut: StackController = recreateStack (listOf (child1, child2, child3, child4))
129124 assertThat(uut.childControllers.size).isEqualTo(4 )
130125 assertThat(uut.view.childCount).isEqualTo(2 )
131126 assertThat(uut.view.getChildAt(0 )).isEqualTo(child4.view)
@@ -622,7 +617,7 @@ class StackControllerTest : BaseTest() {
622617 assertThat(child1.parentController).isNull()
623618 uut.push(child1, CommandListenerAdapter ())
624619 assertThat(child1.parentController).isEqualTo(uut)
625- val anotherNavController = createStack (" another" )
620+ val anotherNavController = recreateStack (" another" )
626621 anotherNavController.ensureViewIsCreated()
627622 anotherNavController.push(child2, CommandListenerAdapter ())
628623 assertThat(child2.parentController).isEqualTo(anotherNavController)
@@ -832,7 +827,7 @@ class StackControllerTest : BaseTest() {
832827
833828 @Test
834829 fun findControllerById_Deeply () {
835- val stack = createStack (" another" )
830+ val stack = recreateStack (" another" )
836831 stack.ensureViewIsCreated()
837832 stack.push(child2, CommandListenerAdapter ())
838833 uut.push(stack, CommandListenerAdapter ())
@@ -923,8 +918,7 @@ class StackControllerTest : BaseTest() {
923918
924919 @Test
925920 fun stackCanBePushed () {
926- uut.view.removeFromParent()
927- val parent = createStack(" someStack" )
921+ val parent = recreateStack(" someStack" )
928922 parent.ensureViewIsCreated()
929923 parent.push(uut, CommandListenerAdapter ())
930924 uut.onViewWillAppear()
@@ -933,8 +927,7 @@ class StackControllerTest : BaseTest() {
933927
934928 @Test
935929 fun applyOptions_applyOnlyOnFirstStack () {
936- uut.view.removeFromParent()
937- val parent = spy(createStack(" someStack" ))
930+ val parent = spy(recreateStack(" someStack" ))
938931 parent.ensureViewIsCreated()
939932 parent.push(uut, CommandListenerAdapter ())
940933 val childOptions = Options ()
@@ -1056,7 +1049,7 @@ class StackControllerTest : BaseTest() {
10561049 activity.setContentView(parent)
10571050
10581051 val child = SimpleViewController (activity, childRegistry, " child1" , Options ())
1059- val stack = createStack (Collections .singletonList(child))
1052+ val stack = recreateStack (Collections .singletonList(child))
10601053 stack.view.visibility = View .INVISIBLE
10611054
10621055 parent.addView(stack.view)
@@ -1068,7 +1061,7 @@ class StackControllerTest : BaseTest() {
10681061 @Test
10691062 fun onAttachToParent_doesNotCrashWhenCalledAfterDestroy () {
10701063 Robolectric .getForegroundThreadScheduler().pause()
1071- val spy = spy(createStack ())
1064+ val spy = spy(recreateStack ())
10721065 val view = spy.view
10731066 spy.push(child1, CommandListenerAdapter ())
10741067 activity.setContentView(view)
@@ -1128,39 +1121,57 @@ class StackControllerTest : BaseTest() {
11281121 .containsOnly(* ids)
11291122 }
11301123
1131- private fun createStack (): StackController {
1124+ private fun recreateStack (): StackController {
1125+ uut.view.removeFromParent()
1126+ topBarController.view.removeFromParent()
1127+
11321128 return createStackBuilder(" stack" , ArrayList ()).build()
11331129 }
11341130
1135- private fun createStack (id : String ): StackController {
1131+ private fun recreateStack (id : String ): StackController {
1132+ uut.view.removeFromParent()
1133+ topBarController.view.removeFromParent()
1134+
11361135 return createStackBuilder(id, ArrayList ()).build()
11371136 }
11381137
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+
11401142 return createStackBuilder(" stack" , children).build()
11411143 }
11421144
11431145 private fun createStackBuilder (id : String , children : List <ViewController <* >>): StackControllerBuilder {
1144- createTopBarController()
1145- return TestUtils .newStackController(activity)
1146+ return TestUtils .newStackController(activity, topBarController)
11461147 .setEventEmitter(eventEmitter)
11471148 .setChildren(children)
11481149 .setId(id)
1149- .setTopBarController(topBarController)
11501150 .setChildRegistry(childRegistry)
11511151 .setAnimator(animator)
11521152 .setStackPresenter(presenter)
11531153 .setBackButtonHelper(backButtonHelper)
11541154 }
11551155
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) {
11591158 override fun createTopBar (context : Context , stackLayout : StackLayout ): TopBar {
11601159 val spy = spy(super .createTopBar(context, stackLayout))
11611160 spy.layout(0 , 0 , 1000 , UiUtils .getTopBarHeight(activity))
11621161 return spy
11631162 }
11641163 })
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+ ))
11661177}
0 commit comments