Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,13 @@ protected TopBar createTopBar(@NonNull Context context, @NonNull StackLayout sta
.setId("stack" + CompatUtils.generateViewId())
.setChildRegistry(new ChildControllersRegistry())
.setTopBarController(topBarController)
.setStackPresenter(new StackPresenter(activity, new TitleBarReactViewCreatorMock(),
new TopBarBackgroundViewCreatorMock(), new TitleBarButtonCreatorMock(),
.setStackPresenter(new StackPresenter(activity,
new TitleBarReactViewCreatorMock(),
new TitleBarButtonCreatorMock(),
topBarController,
new IconResolver(activity, new ImageLoader()), new TypefaceLoaderMock(), new RenderChecker(),
new Options()))
new Options(),
new TopBarBackgroundViewCreatorMock()))
.setInitialOptions(new Options());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,21 +186,22 @@ private ViewController<?> createExternalComponent(ReactContext context, LayoutNo
}

private ViewController<?> createStack(LayoutNode node) {
final TopBarController topBarController = new TopBarController();
return new StackControllerBuilder(activity, eventEmitter)
.setChildren(createChildren(node.children))
.setChildRegistry(childRegistry)
.setTopBarController(new TopBarController())
.setTopBarController(topBarController)
.setId(node.id)
.setInitialOptions(parseOptions(node.getOptions()))
.setStackPresenter(new StackPresenter(activity,
new TitleBarReactViewCreator(),
new TopBarBackgroundViewCreator(),
new TitleBarButtonCreator(),
topBarController,
new IconResolver(activity, new ImageLoader()),
new TypefaceLoader(activity),
new RenderChecker(),
defaultOptions
))
defaultOptions,
new TopBarBackgroundViewCreator()))
.setPresenter(new Presenter(activity, defaultOptions))
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ boolean canPop() {
@Override
public StackLayout createView() {
StackLayout stackLayout = new StackLayout(getActivity(), topBarController, getId());
presenter.bindView(topBarController, getBottomTabsController());
presenter.bindView(getBottomTabsController());
addInitialChild(stackLayout);
return stackLayout;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,15 +89,17 @@ public class StackPresenter {
private final TypefaceLoader typefaceLoader;

public StackPresenter(Activity activity,
TitleBarReactViewCreator titleViewCreator,
TopBarBackgroundViewCreator topBarBackgroundViewCreator,
TitleBarButtonCreator buttonCreator,
IconResolver iconResolver,
TypefaceLoader typefaceLoader,
RenderChecker renderChecker,
Options defaultOptions) {
TitleBarReactViewCreator titleViewCreator,
TitleBarButtonCreator buttonCreator,
TopBarController topBarController,
IconResolver iconResolver,
TypefaceLoader typefaceLoader,
RenderChecker renderChecker,
Options defaultOptions,
TopBarBackgroundViewCreator topBarBackgroundViewCreator) {
this.activity = activity;
this.titleViewCreator = titleViewCreator;
this.topBarController = topBarController;
this.topBarBackgroundViewCreator = topBarBackgroundViewCreator;
this.buttonCreator = buttonCreator;
this.iconResolver = iconResolver;
Expand All @@ -118,8 +120,7 @@ public Options getDefaultOptions() {
return defaultOptions;
}

public void bindView(TopBarController topBarController, @Nullable BottomTabsController bottomTabsController) {
this.topBarController = topBarController;
public void bindView(@Nullable BottomTabsController bottomTabsController) {
this.bottomTabsController = bottomTabsController;
topBar = topBarController.getView();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,37 @@

public class TestUtils {
public static StackControllerBuilder newStackController(Activity activity) {
TopBarController topBarController = new TopBarController() {
@Override
protected TopBar createTopBar(@NonNull Context context, @NonNull StackLayout stackLayout) {
TopBar topBar = super.createTopBar(context, stackLayout);
topBar.layout(0, 0, 1000, UiUtils.getTopBarHeight(context));
return topBar;
}
};
return newStackController(activity, null);
}

public static StackControllerBuilder newStackController(Activity activity, TopBarController topBarController) {
if (topBarController == null) {
topBarController = new TopBarController() {
@Override
protected TopBar createTopBar(@NonNull Context context, @NonNull StackLayout stackLayout) {
TopBar topBar = super.createTopBar(context, stackLayout);
topBar.layout(0, 0, 1000, UiUtils.getTopBarHeight(context));
return topBar;
}
};
}

StackPresenter stackPresenter = new StackPresenter(activity,
new TitleBarReactViewCreatorMock(),
new TitleBarButtonCreatorMock(),
topBarController,
new IconResolver(activity,
new ImageLoader()),
new TypefaceLoaderMock(),
new RenderChecker(),
new Options(),
new TopBarBackgroundViewCreatorMock());

return new StackControllerBuilder(activity, Mockito.mock(EventEmitter.class))
.setId("stack" + CompatUtils.generateViewId())
.setChildRegistry(new ChildControllersRegistry())
.setTopBarController(topBarController)
.setStackPresenter(new StackPresenter(activity, new TitleBarReactViewCreatorMock(), new TopBarBackgroundViewCreatorMock(), new TitleBarButtonCreatorMock(), new IconResolver(activity, new ImageLoader()), new TypefaceLoaderMock(), new RenderChecker(), new Options()))
.setStackPresenter(stackPresenter)
.setInitialOptions(new Options());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,7 @@ protected TopBar createTopBar(Context context, StackLayout stackLayout) {
return topBar;
}
};
stack = TestUtils.newStackController(activity)
.setTopBarController(topBarController)
stack = TestUtils.newStackController(activity, topBarController)
.build();
stack.ensureViewIsCreated();
stack.getView().layout(0, 0, 1000, 1000);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarAppearanceAn
import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarController
import com.reactnativenavigation.viewcontrollers.stack.topbar.button.BackButtonHelper
import com.reactnativenavigation.viewcontrollers.stack.topbar.button.IconResolver
import com.reactnativenavigation.viewcontrollers.statusbar.StatusBarPresenter
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
import com.reactnativenavigation.views.stack.StackBehaviour
import com.reactnativenavigation.views.stack.StackLayout
Expand All @@ -43,7 +44,6 @@ import kotlin.test.fail
class StackControllerTest : BaseTest() {
private lateinit var activity: Activity
private lateinit var childRegistry: ChildControllersRegistry
private lateinit var uut: StackController
private lateinit var child1: ViewController<*>
private lateinit var child1a: ViewController<*>
private lateinit var child2: ViewController<*>
Expand All @@ -56,28 +56,23 @@ class StackControllerTest : BaseTest() {
private lateinit var presenter: StackPresenter
private lateinit var backButtonHelper: BackButtonHelper
private lateinit var eventEmitter: EventEmitter
private lateinit var uut: StackController

override fun beforeEach() {
super.beforeEach()
eventEmitter = mock()
backButtonHelper = spy(BackButtonHelper())
activity = newActivity()
StatusBarPresenter.init(activity)
SystemUiUtils.saveStatusBarHeight(63)
animator = spy(StackAnimator(activity))
childRegistry = ChildControllersRegistry()
presenter = spy(StackPresenter(
activity,
TitleBarReactViewCreatorMock(),
TopBarBackgroundViewCreatorMock(),
TitleBarButtonCreatorMock(),
IconResolver(activity, ImageLoaderMock.mock()),
TypefaceLoaderMock(),
RenderChecker(),
Options()
)
)
topBarAnimator = TopBarAppearanceAnimator()
topBarController = createTopBarController(topBarAnimator)
presenter = createStackPresenter()
createChildren()
uut = createStack()

uut = createStackBuilder("stack", ArrayList()).build()
activity.setContentView(uut.view)
}

Expand All @@ -101,7 +96,7 @@ class StackControllerTest : BaseTest() {
@Test
fun childrenMustBeUniqueById() {
try {
val uut: StackController = createStack(listOf(child1, child2, child1))
val uut: StackController = recreateStack(listOf(child1, child2, child1))
fail("Stack should not have duplicate ids!")
} catch (e: IllegalArgumentException) {
assertThat(e.message).contains(child1.id)
Expand All @@ -110,22 +105,22 @@ class StackControllerTest : BaseTest() {

@Test
fun childrenAreAssignedParent() {
val uut: StackController = createStack(listOf(child1, child2))
val uut: StackController = recreateStack(listOf(child1, child2))
for (child in uut.childControllers) {
assertThat(child.parentController == uut).isTrue()
}
}

@Test
fun constructor_backButtonIsAddedToChild() {
createStack(listOf(child1, child2, child3))
recreateStack(listOf(child1, child2, child3))
assertThat(child2.options.topBar.buttons.back.visible[false]).isTrue()
assertThat(child3.options.topBar.buttons.back.visible[false]).isTrue()
}

@Test
fun createView_currentChildIsAdded() {
val uut: StackController = createStack(listOf(child1, child2, child3, child4))
val uut: StackController = recreateStack(listOf(child1, child2, child3, child4))
assertThat(uut.childControllers.size).isEqualTo(4)
assertThat(uut.view.childCount).isEqualTo(2)
assertThat(uut.view.getChildAt(0)).isEqualTo(child4.view)
Expand Down Expand Up @@ -622,7 +617,7 @@ class StackControllerTest : BaseTest() {
assertThat(child1.parentController).isNull()
uut.push(child1, CommandListenerAdapter())
assertThat(child1.parentController).isEqualTo(uut)
val anotherNavController = createStack("another")
val anotherNavController = recreateStack("another")
anotherNavController.ensureViewIsCreated()
anotherNavController.push(child2, CommandListenerAdapter())
assertThat(child2.parentController).isEqualTo(anotherNavController)
Expand Down Expand Up @@ -832,7 +827,7 @@ class StackControllerTest : BaseTest() {

@Test
fun findControllerById_Deeply() {
val stack = createStack("another")
val stack = recreateStack("another")
stack.ensureViewIsCreated()
stack.push(child2, CommandListenerAdapter())
uut.push(stack, CommandListenerAdapter())
Expand Down Expand Up @@ -923,8 +918,7 @@ class StackControllerTest : BaseTest() {

@Test
fun stackCanBePushed() {
uut.view.removeFromParent()
val parent = createStack("someStack")
val parent = recreateStack("someStack")
parent.ensureViewIsCreated()
parent.push(uut, CommandListenerAdapter())
uut.onViewWillAppear()
Expand All @@ -933,8 +927,7 @@ class StackControllerTest : BaseTest() {

@Test
fun applyOptions_applyOnlyOnFirstStack() {
uut.view.removeFromParent()
val parent = spy(createStack("someStack"))
val parent = spy(recreateStack("someStack"))
parent.ensureViewIsCreated()
parent.push(uut, CommandListenerAdapter())
val childOptions = Options()
Expand Down Expand Up @@ -1056,7 +1049,7 @@ class StackControllerTest : BaseTest() {
activity.setContentView(parent)

val child = SimpleViewController(activity, childRegistry, "child1", Options())
val stack = createStack(Collections.singletonList(child))
val stack = recreateStack(Collections.singletonList(child))
stack.view.visibility = View.INVISIBLE

parent.addView(stack.view)
Expand All @@ -1068,7 +1061,7 @@ class StackControllerTest : BaseTest() {
@Test
fun onAttachToParent_doesNotCrashWhenCalledAfterDestroy() {
Robolectric.getForegroundThreadScheduler().pause()
val spy = spy(createStack())
val spy = spy(recreateStack())
val view = spy.view
spy.push(child1, CommandListenerAdapter())
activity.setContentView(view)
Expand Down Expand Up @@ -1128,39 +1121,57 @@ class StackControllerTest : BaseTest() {
.containsOnly(*ids)
}

private fun createStack(): StackController {
private fun recreateStack(): StackController {
uut.view.removeFromParent()
topBarController.view.removeFromParent()

return createStackBuilder("stack", ArrayList()).build()
}

private fun createStack(id: String): StackController {
private fun recreateStack(id: String): StackController {
uut.view.removeFromParent()
topBarController.view.removeFromParent()

return createStackBuilder(id, ArrayList()).build()
}

private fun createStack(children: List<ViewController<*>>): StackController {
private fun recreateStack(children: List<ViewController<*>>): StackController {
uut.view.removeFromParent()
topBarController.view.removeFromParent()

return createStackBuilder("stack", children).build()
}

private fun createStackBuilder(id: String, children: List<ViewController<*>>): StackControllerBuilder {
createTopBarController()
return TestUtils.newStackController(activity)
return TestUtils.newStackController(activity, topBarController)
.setEventEmitter(eventEmitter)
.setChildren(children)
.setId(id)
.setTopBarController(topBarController)
.setChildRegistry(childRegistry)
.setAnimator(animator)
.setStackPresenter(presenter)
.setBackButtonHelper(backButtonHelper)
}

private fun createTopBarController() {
topBarAnimator = TopBarAppearanceAnimator()
topBarController = spy(object : TopBarController(topBarAnimator) {
private fun createTopBarController(topBarAnimator: TopBarAppearanceAnimator): TopBarController =
spy(object : TopBarController(topBarAnimator) {
override fun createTopBar(context: Context, stackLayout: StackLayout): TopBar {
val spy = spy(super.createTopBar(context, stackLayout))
spy.layout(0, 0, 1000, UiUtils.getTopBarHeight(activity))
return spy
}
})
}

private fun createStackPresenter() =
spy(StackPresenter(
activity,
TitleBarReactViewCreatorMock(),
TitleBarButtonCreatorMock(),
topBarController,
IconResolver(activity, ImageLoaderMock.mock()),
TypefaceLoaderMock(),
RenderChecker(),
Options(),
TopBarBackgroundViewCreatorMock()
))
}
Loading
Loading