Skip to content

Commit

Permalink
Don't apply default options in mergeOptions
Browse files Browse the repository at this point in the history
  • Loading branch information
guyca committed Aug 8, 2018
1 parent 4adc148 commit 6092900
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ void mergeWithDefault(TopBarOptions defaultOptions) {
validate();
}

private void validate() {
public void validate() {
if (title.component.hasValue() && (title.text.hasValue() || subtitle.text.hasValue())) {
if (BuildConfig.DEBUG) Log.w("RNN", "A screen can't use both text and component - clearing text.");
title.text = new NullText();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,9 @@ public void applyChildOptions(Options options, Component child) {
}

public void mergeChildOptions(Options options, Component child) {
Options withDefault = options.copy().withDefaultOptions(defaultOptions);
mergeBottomTabsOptions(withDefault.bottomTabsOptions, withDefault.animations);
mergeBottomTabsOptions(options.bottomTabsOptions, options.animations);
int tabIndex = bottomTabFinder.findByComponent(child);
mergeDrawBehind(withDefault.bottomTabsOptions, tabIndex);
mergeDrawBehind(options.bottomTabsOptions, tabIndex);
}

private void mergeBottomTabsOptions(BottomTabsOptions options, AnimationsOptions animations) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,12 +156,11 @@ public void onChildWillAppear(Options appearing, Options disappearing) {
}

public void mergeChildOptions(Options options, Component child) {
Options withDefaultOptions = options.copy().withDefaultOptions(defaultOptions);
mergeOrientation(withDefaultOptions.layout.orientation);
mergeButtons(withDefaultOptions.topBar.buttons);
mergeTopBarOptions(withDefaultOptions.topBar, withDefaultOptions.animations, child);
mergeTopTabsOptions(withDefaultOptions.topTabs);
mergeTopTabOptions(withDefaultOptions.topTabOptions);
mergeOrientation(options.layout.orientation);
mergeButtons(options.topBar.buttons);
mergeTopBarOptions(options.topBar, options.animations, child);
mergeTopTabsOptions(options.topTabs);
mergeTopTabOptions(options.topTabOptions);
}

private void mergeOrientation(OrientationOptions orientationOptions) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.reactnativenavigation.viewcontrollers;

import android.app.Activity;

import com.reactnativenavigation.BaseTest;
import com.reactnativenavigation.mocks.SimpleViewController;
import com.reactnativenavigation.parse.Options;
import com.reactnativenavigation.parse.params.Bool;
import com.reactnativenavigation.parse.params.Color;
import com.reactnativenavigation.presentation.BottomTabsOptionsPresenter;
import com.reactnativenavigation.viewcontrollers.bottomtabs.TabSelector;
import com.reactnativenavigation.views.BottomTabs;
import com.reactnativenavigation.views.Component;

import org.junit.Test;
import org.mockito.Mockito;

import java.util.Arrays;
import java.util.List;

import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;

public class BottomTabsOptionsPresenterTest extends BaseTest {
private List<ViewController> tabs;
private BottomTabsOptionsPresenter uut;
private BottomTabs bottomTabs;

@Override
public void beforeEach() {
Activity activity = newActivity();
ChildControllersRegistry childRegistry = new ChildControllersRegistry();
ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", new Options()));
ViewController child2 = spy(new SimpleViewController(activity, childRegistry, "child2", new Options()));
tabs = Arrays.asList(child1, child2);
uut = new BottomTabsOptionsPresenter(tabs, new Options());
bottomTabs = Mockito.mock(BottomTabs.class);
uut.bindView(bottomTabs, Mockito.mock(TabSelector.class));
}

@Test
public void mergeChildOptions_onlyDeclaredOptionsAreApplied() { // default options are not applies on merge
Options defaultOptions = new Options();
defaultOptions.bottomTabsOptions.visible = new Bool(false);
uut.setDefaultOptions(defaultOptions);

Options options = new Options();
options.bottomTabsOptions.backgroundColor = new Color(10);
uut.mergeChildOptions(options, (Component) tabs.get(0).getView());
verify(bottomTabs).setBackgroundColor(options.bottomTabsOptions.backgroundColor.get());
verifyNoMoreInteractions(bottomTabs);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ public void mergeTopBarOptions() {
options.topBar.visible = new Bool(false);
options.topBar.drawBehind = new Bool(false);
options.topBar.hideOnScroll = new Bool(false);
options.topBar.validate();
uut.mergeChildOptions(options, child);

assertTopBarOptions(options, 1);
Expand Down Expand Up @@ -156,6 +157,19 @@ public void applyLayoutParamsOptions() {
verify(topBar).hide();
}

@Test
public void mergeOptions_defaultOptionsAreNotApplied() {
Options defaultOptions = new Options();
defaultOptions.topBar.background.color = new Color(10);
uut.setDefaultOptions(defaultOptions);

Options childOptions = new Options();
childOptions.topBar.title.text = new Text("someText");
uut.mergeChildOptions(childOptions, child);

verify(topBar, times(0)).setBackgroundColor(anyInt());
}

private void assertTopBarOptions(Options options, int t) {
if (options.topBar.title.component.hasValue()) {
verify(topBar, times(0)).setTitle(any());
Expand Down

0 comments on commit 6092900

Please sign in to comment.