Bladeren bron

test driven refactoring

Daniel Zlotin 7 jaren geleden
bovenliggende
commit
165511ddc4

+ 2
- 8
lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java Bestand weergeven

@@ -3,7 +3,7 @@ package com.reactnativenavigation.parse;
3 3
 import android.app.Activity;
4 4
 
5 5
 import com.facebook.react.ReactInstanceManager;
6
-import com.reactnativenavigation.react.ReactContainerView;
6
+import com.reactnativenavigation.react.ReactContainerViewCreator;
7 7
 import com.reactnativenavigation.viewcontrollers.BottomTabsController;
8 8
 import com.reactnativenavigation.viewcontrollers.ContainerViewController;
9 9
 import com.reactnativenavigation.viewcontrollers.SideMenuController;
@@ -81,13 +81,7 @@ public class LayoutFactory {
81 81
 		String id = node.id;
82 82
 		String name = node.data.optString("name");
83 83
 		NavigationOptions navigationOptions = NavigationOptions.parse(node.data.optJSONObject("navigationOptions"));
84
-		ContainerViewController.ContainerViewCreator viewCreator = new ContainerViewController.ContainerViewCreator() {
85
-			@Override
86
-			public ContainerViewController.ContainerView create(final Activity activity, final String containerId, final String containerName) {
87
-				return new ReactContainerView(activity, reactInstanceManager, containerId, containerName);
88
-			}
89
-		};
90
-		return new ContainerViewController(activity, id, name, viewCreator, navigationOptions);
84
+		return new ContainerViewController(activity, id, name, new ReactContainerViewCreator(reactInstanceManager), navigationOptions);
91 85
 	}
92 86
 
93 87
 	private ViewController createContainerStack(LayoutNode node) {

+ 4
- 0
lib/android/app/src/main/java/com/reactnativenavigation/parse/NavigationOptions.java Bestand weergeven

@@ -19,4 +19,8 @@ public class NavigationOptions {
19 19
 
20 20
 	public String title = "";
21 21
 	public int topBarBackgroundColor = 0;
22
+
23
+	public void mergeWith(final NavigationOptions other) {
24
+		title = other.title;
25
+	}
22 26
 }

+ 3
- 3
lib/android/app/src/main/java/com/reactnativenavigation/react/ReactContainerView.java Bestand weergeven

@@ -13,7 +13,7 @@ public class ReactContainerView extends ReactRootView implements ContainerViewCo
13 13
 	private final ReactInstanceManager reactInstanceManager;
14 14
 	private final String containerId;
15 15
 	private final String containerName;
16
-	private boolean attachedToReactInstance = false;
16
+	private boolean isAttachedToReactInstance = false;
17 17
 
18 18
 	public ReactContainerView(final Context context, ReactInstanceManager reactInstanceManager, String containerId, String containerName) {
19 19
 		super(context);
@@ -29,7 +29,7 @@ public class ReactContainerView extends ReactRootView implements ContainerViewCo
29 29
 			@Override
30 30
 			public void onAttachedToReactInstance(final ReactRootView reactRootView) {
31 31
 				reactRootView.setEventListener(null);
32
-				attachedToReactInstance = true;
32
+				isAttachedToReactInstance = true;
33 33
 			}
34 34
 		});
35 35
 		final Bundle opts = new Bundle();
@@ -39,7 +39,7 @@ public class ReactContainerView extends ReactRootView implements ContainerViewCo
39 39
 
40 40
 	@Override
41 41
 	public boolean isReady() {
42
-		return attachedToReactInstance;
42
+		return isAttachedToReactInstance;
43 43
 	}
44 44
 
45 45
 	@Override

+ 20
- 0
lib/android/app/src/main/java/com/reactnativenavigation/react/ReactContainerViewCreator.java Bestand weergeven

@@ -0,0 +1,20 @@
1
+package com.reactnativenavigation.react;
2
+
3
+import android.app.Activity;
4
+
5
+import com.facebook.react.ReactInstanceManager;
6
+import com.reactnativenavigation.viewcontrollers.ContainerViewController;
7
+import com.reactnativenavigation.viewcontrollers.ContainerViewController.ContainerViewCreator;
8
+
9
+public class ReactContainerViewCreator implements ContainerViewCreator {
10
+	private ReactInstanceManager reactInstanceManager;
11
+
12
+	public ReactContainerViewCreator(final ReactInstanceManager reactInstanceManager) {
13
+		this.reactInstanceManager = reactInstanceManager;
14
+	}
15
+
16
+	@Override
17
+	public ContainerViewController.ContainerView create(final Activity activity, final String containerId, final String containerName) {
18
+		return new ReactContainerView(activity, reactInstanceManager, containerId, containerName);
19
+	}
20
+}

+ 14
- 3
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ContainerViewController.java Bestand weergeven

@@ -9,10 +9,12 @@ import com.reactnativenavigation.parse.NavigationOptions;
9 9
 public class ContainerViewController extends ViewController {
10 10
 
11 11
 	public interface ContainerViewCreator {
12
+
12 13
 		ContainerView create(Activity activity, String containerId, String containerName);
13 14
 	}
14 15
 
15 16
 	public interface ContainerView {
17
+
16 18
 		boolean isReady();
17 19
 
18 20
 		View asView();
@@ -22,12 +24,13 @@ public class ContainerViewController extends ViewController {
22 24
 		void sendContainerStart();
23 25
 
24 26
 		void sendContainerStop();
27
+
25 28
 	}
26 29
 
27 30
 	private final String containerName;
28
-	private final ContainerViewCreator viewCreator;
29
-	private final NavigationOptions initialNavigationOptions;
30 31
 
32
+	private final ContainerViewCreator viewCreator;
33
+	private final NavigationOptions navigationOptions;
31 34
 	private ContainerView containerView;
32 35
 
33 36
 	public ContainerViewController(final Activity activity,
@@ -38,7 +41,7 @@ public class ContainerViewController extends ViewController {
38 41
 		super(activity, id);
39 42
 		this.containerName = containerName;
40 43
 		this.viewCreator = viewCreator;
41
-		this.initialNavigationOptions = initialNavigationOptions;
44
+		this.navigationOptions = initialNavigationOptions;
42 45
 	}
43 46
 
44 47
 	@Override
@@ -71,4 +74,12 @@ public class ContainerViewController extends ViewController {
71 74
 		containerView = viewCreator.create(getActivity(), getId(), containerName);
72 75
 		return containerView.asView();
73 76
 	}
77
+
78
+	public void applyNavigationOptions(final NavigationOptions options) {
79
+		navigationOptions.mergeWith(options);
80
+	}
81
+
82
+	public NavigationOptions getNavigationOptions() {
83
+		return navigationOptions;
84
+	}
74 85
 }

+ 4
- 4
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/Navigator.java Bestand weergeven

@@ -57,10 +57,10 @@ public class Navigator extends ParentController {
57 57
 	}
58 58
 
59 59
 	public void setOptions(final String containerId, NavigationOptions options) {
60
-//		ViewController target = findControllerById(containerId);
61
-//		if (target != null) {
62
-//			target.applyNavigationOptions(options);
63
-//		}
60
+		ViewController target = findControllerById(containerId);
61
+		if (target instanceof ContainerViewController) {
62
+			((ContainerViewController) target).applyNavigationOptions(options);
63
+		}
64 64
 	}
65 65
 
66 66
 	public void push(final String fromId, final ViewController viewController) {

+ 37
- 0
lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestContainerView.java Bestand weergeven

@@ -0,0 +1,37 @@
1
+package com.reactnativenavigation.mocks;
2
+
3
+import android.content.Context;
4
+import android.view.View;
5
+
6
+import com.reactnativenavigation.viewcontrollers.ContainerViewController;
7
+
8
+public class TestContainerView extends View implements ContainerViewController.ContainerView {
9
+	public TestContainerView(final Context context) {
10
+		super(context);
11
+	}
12
+
13
+	@Override
14
+	public boolean isReady() {
15
+		return false;
16
+	}
17
+
18
+	@Override
19
+	public View asView() {
20
+		return this;
21
+	}
22
+
23
+	@Override
24
+	public void destroy() {
25
+
26
+	}
27
+
28
+	@Override
29
+	public void sendContainerStart() {
30
+
31
+	}
32
+
33
+	@Override
34
+	public void sendContainerStop() {
35
+
36
+	}
37
+}

+ 13
- 0
lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestContainerViewCreator.java Bestand weergeven

@@ -0,0 +1,13 @@
1
+package com.reactnativenavigation.mocks;
2
+
3
+import android.app.Activity;
4
+
5
+import com.reactnativenavigation.viewcontrollers.ContainerViewController;
6
+import com.reactnativenavigation.viewcontrollers.ContainerViewController.ContainerViewCreator;
7
+
8
+public class TestContainerViewCreator implements ContainerViewCreator {
9
+	@Override
10
+	public ContainerViewController.ContainerView create(final Activity activity, final String containerId, final String containerName) {
11
+		return new TestContainerView(activity);
12
+	}
13
+}

+ 16
- 6
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/NavigatorTest.java Bestand weergeven

@@ -4,12 +4,12 @@ import android.app.Activity;
4 4
 import android.support.annotation.NonNull;
5 5
 
6 6
 import com.reactnativenavigation.BaseTest;
7
-import com.reactnativenavigation.parse.NavigationOptions;
8 7
 import com.reactnativenavigation.mocks.SimpleViewController;
8
+import com.reactnativenavigation.mocks.TestContainerViewCreator;
9 9
 import com.reactnativenavigation.mocks.TestStackAnimator;
10
+import com.reactnativenavigation.parse.NavigationOptions;
10 11
 import com.reactnativenavigation.utils.CompatUtils;
11 12
 
12
-import org.junit.Ignore;
13 13
 import org.junit.Test;
14 14
 
15 15
 import java.util.Arrays;
@@ -190,12 +190,22 @@ public class NavigatorTest extends BaseTest {
190 190
 	}
191 191
 
192 192
 	@Test
193
-	@Ignore
194 193
 	public void setOptions_CallsApplyNavigationOptions() {
195
-		uut.setRoot(child1);
194
+		ContainerViewController containerVc = new ContainerViewController(activity, "theId", "theName", new TestContainerViewCreator(), new NavigationOptions());
195
+		uut.setRoot(containerVc);
196
+		assertThat(containerVc.getNavigationOptions().title).isEmpty();
197
+
196 198
 		NavigationOptions options = new NavigationOptions();
197
-		uut.setOptions(child1.getId(), options);
198
-//		assertThat(child1.getNavigationOptions()).isEqualTo(options);
199
+		options.title = "new title";
200
+
201
+		uut.setOptions("theId", options);
202
+		assertThat(containerVc.getNavigationOptions().title).isEqualTo("new title");
203
+	}
204
+
205
+	@Test
206
+	public void setOptions_AffectsOnlyContainerViewControllers() {
207
+		uut.setRoot(child1);
208
+		uut.setOptions(child1.getId(), new NavigationOptions());
199 209
 	}
200 210
 
201 211
 	@NonNull