@@ -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
@@ -42,7 +43,6 @@ import kotlin.test.fail
4243class StackControllerTest : BaseTest () {
4344 private lateinit var activity: Activity
4445 private lateinit var childRegistry: ChildControllersRegistry
45- private lateinit var uut: StackController
4646 private lateinit var child1: ViewController <* >
4747 private lateinit var child1a: ViewController <* >
4848 private lateinit var child2: ViewController <* >
@@ -55,28 +55,23 @@ class StackControllerTest : BaseTest() {
5555 private lateinit var presenter: StackPresenter
5656 private lateinit var backButtonHelper: BackButtonHelper
5757 private lateinit var eventEmitter: EventEmitter
58+ private lateinit var uut: StackController
5859
5960 override fun beforeEach () {
6061 super .beforeEach()
6162 eventEmitter = mock()
6263 backButtonHelper = spy(BackButtonHelper ())
6364 activity = newActivity()
65+ StatusBarPresenter .init (activity)
6466 SystemUiUtils .saveStatusBarHeight(63 )
6567 animator = spy(StackAnimator (activity))
6668 childRegistry = ChildControllersRegistry ()
67- presenter = spy(StackPresenter (
68- activity,
69- TitleBarReactViewCreatorMock (),
70- TopBarBackgroundViewCreatorMock (),
71- TitleBarButtonCreatorMock (),
72- IconResolver (activity, ImageLoaderMock .mock()),
73- TypefaceLoaderMock (),
74- RenderChecker (),
75- Options ()
76- )
77- )
69+ topBarAnimator = TopBarAppearanceAnimator ()
70+ topBarController = createTopBarController(topBarAnimator)
71+ presenter = createStackPresenter()
7872 createChildren()
79- uut = createStack()
73+
74+ uut = createStackBuilder(" stack" , ArrayList ()).build()
8075 activity.setContentView(uut.view)
8176 }
8277
@@ -100,7 +95,7 @@ class StackControllerTest : BaseTest() {
10095 @Test
10196 fun childrenMustBeUniqueById () {
10297 try {
103- val uut: StackController = createStack (listOf (child1, child2, child1))
98+ val uut: StackController = recreateStack (listOf (child1, child2, child1))
10499 fail(" Stack should not have duplicate ids!" )
105100 } catch (e: IllegalArgumentException ) {
106101 assertThat(e.message).contains(child1.id)
@@ -109,22 +104,22 @@ class StackControllerTest : BaseTest() {
109104
110105 @Test
111106 fun childrenAreAssignedParent () {
112- val uut: StackController = createStack (listOf (child1, child2))
107+ val uut: StackController = recreateStack (listOf (child1, child2))
113108 for (child in uut.childControllers) {
114109 assertThat(child.parentController == uut).isTrue()
115110 }
116111 }
117112
118113 @Test
119114 fun constructor_backButtonIsAddedToChild () {
120- createStack (listOf (child1, child2, child3))
115+ recreateStack (listOf (child1, child2, child3))
121116 assertThat(child2.options.topBar.buttons.back.visible[false ]).isTrue()
122117 assertThat(child3.options.topBar.buttons.back.visible[false ]).isTrue()
123118 }
124119
125120 @Test
126121 fun createView_currentChildIsAdded () {
127- val uut: StackController = createStack (listOf (child1, child2, child3, child4))
122+ val uut: StackController = recreateStack (listOf (child1, child2, child3, child4))
128123 assertThat(uut.childControllers.size).isEqualTo(4 )
129124 assertThat(uut.view.childCount).isEqualTo(2 )
130125 assertThat(uut.view.getChildAt(0 )).isEqualTo(child4.view)
@@ -621,7 +616,7 @@ class StackControllerTest : BaseTest() {
621616 assertThat(child1.parentController).isNull()
622617 uut.push(child1, CommandListenerAdapter ())
623618 assertThat(child1.parentController).isEqualTo(uut)
624- val anotherNavController = createStack (" another" )
619+ val anotherNavController = recreateStack (" another" )
625620 anotherNavController.ensureViewIsCreated()
626621 anotherNavController.push(child2, CommandListenerAdapter ())
627622 assertThat(child2.parentController).isEqualTo(anotherNavController)
@@ -831,7 +826,7 @@ class StackControllerTest : BaseTest() {
831826
832827 @Test
833828 fun findControllerById_Deeply () {
834- val stack = createStack (" another" )
829+ val stack = recreateStack (" another" )
835830 stack.ensureViewIsCreated()
836831 stack.push(child2, CommandListenerAdapter ())
837832 uut.push(stack, CommandListenerAdapter ())
@@ -922,8 +917,7 @@ class StackControllerTest : BaseTest() {
922917
923918 @Test
924919 fun stackCanBePushed () {
925- uut.view.removeFromParent()
926- val parent = createStack(" someStack" )
920+ val parent = recreateStack(" someStack" )
927921 parent.ensureViewIsCreated()
928922 parent.push(uut, CommandListenerAdapter ())
929923 uut.onViewWillAppear()
@@ -932,8 +926,7 @@ class StackControllerTest : BaseTest() {
932926
933927 @Test
934928 fun applyOptions_applyOnlyOnFirstStack () {
935- uut.view.removeFromParent()
936- val parent = spy(createStack(" someStack" ))
929+ val parent = spy(recreateStack(" someStack" ))
937930 parent.ensureViewIsCreated()
938931 parent.push(uut, CommandListenerAdapter ())
939932 val childOptions = Options ()
@@ -1055,7 +1048,7 @@ class StackControllerTest : BaseTest() {
10551048 activity.setContentView(parent)
10561049
10571050 val child = SimpleViewController (activity, childRegistry, " child1" , Options ())
1058- val stack = createStack (Collections .singletonList(child))
1051+ val stack = recreateStack (Collections .singletonList(child))
10591052 stack.view.visibility = View .INVISIBLE
10601053
10611054 parent.addView(stack.view)
@@ -1067,7 +1060,7 @@ class StackControllerTest : BaseTest() {
10671060 @Test
10681061 fun onAttachToParent_doesNotCrashWhenCalledAfterDestroy () {
10691062 Robolectric .getForegroundThreadScheduler().pause()
1070- val spy = spy(createStack ())
1063+ val spy = spy(recreateStack ())
10711064 val view = spy.view
10721065 spy.push(child1, CommandListenerAdapter ())
10731066 activity.setContentView(view)
@@ -1127,39 +1120,57 @@ class StackControllerTest : BaseTest() {
11271120 .containsOnly(* ids)
11281121 }
11291122
1130- private fun createStack (): StackController {
1123+ private fun recreateStack (): StackController {
1124+ uut.view.removeFromParent()
1125+ topBarController.view.removeFromParent()
1126+
11311127 return createStackBuilder(" stack" , ArrayList ()).build()
11321128 }
11331129
1134- private fun createStack (id : String ): StackController {
1130+ private fun recreateStack (id : String ): StackController {
1131+ uut.view.removeFromParent()
1132+ topBarController.view.removeFromParent()
1133+
11351134 return createStackBuilder(id, ArrayList ()).build()
11361135 }
11371136
1138- private fun createStack (children : List <ViewController <* >>): StackController {
1137+ private fun recreateStack (children : List <ViewController <* >>): StackController {
1138+ uut.view.removeFromParent()
1139+ topBarController.view.removeFromParent()
1140+
11391141 return createStackBuilder(" stack" , children).build()
11401142 }
11411143
11421144 private fun createStackBuilder (id : String , children : List <ViewController <* >>): StackControllerBuilder {
1143- createTopBarController()
1144- return TestUtils .newStackController(activity)
1145+ return TestUtils .newStackController(activity, topBarController)
11451146 .setEventEmitter(eventEmitter)
11461147 .setChildren(children)
11471148 .setId(id)
1148- .setTopBarController(topBarController)
11491149 .setChildRegistry(childRegistry)
11501150 .setAnimator(animator)
11511151 .setStackPresenter(presenter)
11521152 .setBackButtonHelper(backButtonHelper)
11531153 }
11541154
1155- private fun createTopBarController () {
1156- topBarAnimator = TopBarAppearanceAnimator ()
1157- topBarController = spy(object : TopBarController (topBarAnimator) {
1155+ private fun createTopBarController (topBarAnimator : TopBarAppearanceAnimator ): TopBarController =
1156+ spy(object : TopBarController (topBarAnimator) {
11581157 override fun createTopBar (context : Context , stackLayout : StackLayout ): TopBar {
11591158 val spy = spy(super .createTopBar(context, stackLayout))
11601159 spy.layout(0 , 0 , 1000 , UiUtils .getTopBarHeight(activity))
11611160 return spy
11621161 }
11631162 })
1164- }
1163+
1164+ private fun createStackPresenter () =
1165+ spy(StackPresenter (
1166+ activity,
1167+ TitleBarReactViewCreatorMock (),
1168+ TitleBarButtonCreatorMock (),
1169+ topBarController,
1170+ IconResolver (activity, ImageLoaderMock .mock()),
1171+ TypefaceLoaderMock (),
1172+ RenderChecker (),
1173+ Options (),
1174+ TopBarBackgroundViewCreatorMock ()
1175+ ))
11651176}
0 commit comments