Browse Source

removed unneeded mocks, fixed unit tests

Daniel Zlotin 8 years ago
parent
commit
135b573665

+ 4
- 4
lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java View File

@@ -13,25 +13,25 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
13 13
 	@Override
14 14
 	protected void onCreate(@Nullable Bundle savedInstanceState) {
15 15
 		super.onCreate(savedInstanceState);
16
-		app().activityLifecycleDelegate.onActivityCreated(this);
16
+		app().activityLifecycle.onActivityCreated(this);
17 17
 	}
18 18
 
19 19
 	@Override
20 20
 	protected void onResume() {
21 21
 		super.onResume();
22
-		app().activityLifecycleDelegate.onActivityResumed(this, this);
22
+		app().activityLifecycle.onActivityResumed(this);
23 23
 	}
24 24
 
25 25
 	@Override
26 26
 	protected void onPause() {
27 27
 		super.onPause();
28
-		app().activityLifecycleDelegate.onActivityPaused(this);
28
+		app().activityLifecycle.onActivityPaused(this);
29 29
 	}
30 30
 
31 31
 	@Override
32 32
 	protected void onDestroy() {
33 33
 		super.onDestroy();
34
-		app().activityLifecycleDelegate.onActivityDestroyed(this);
34
+		app().activityLifecycle.onActivityDestroyed(this);
35 35
 	}
36 36
 
37 37
 	@Override

+ 5
- 7
lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java View File

@@ -7,14 +7,13 @@ import com.facebook.react.ReactInstanceManager;
7 7
 import com.facebook.react.ReactNativeHost;
8 8
 import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
9 9
 import com.reactnativenavigation.controllers.CommandsHandler;
10
-import com.reactnativenavigation.react.DevPermissionRequestImpl;
10
+import com.reactnativenavigation.react.DevPermissionRequest;
11 11
 import com.reactnativenavigation.react.NavigationReactNativeHost;
12
-import com.reactnativenavigation.react.ReactRootViewCreatorImpl;
13 12
 
14 13
 public abstract class NavigationApplication extends Application implements ReactApplication {
15 14
 
16 15
 	NavigationReactNativeHost reactNativeHost;
17
-	ActivityLifecycleDelegate activityLifecycleDelegate;
16
+	ActivityLifecycleDelegate activityLifecycle;
18 17
 
19 18
 	@Override
20 19
 	public void onCreate() {
@@ -30,12 +29,11 @@ public abstract class NavigationApplication extends Application implements React
30 29
 	public abstract boolean isDebug();
31 30
 
32 31
 	void init() {
33
-		ReactRootViewCreatorImpl reactRootViewCreator = new ReactRootViewCreatorImpl();
34
-		CommandsHandler commandsHandler = new CommandsHandler(reactRootViewCreator);
32
+		CommandsHandler commandsHandler = new CommandsHandler(this);
35 33
 		reactNativeHost = new NavigationReactNativeHost(this, isDebug(), commandsHandler);
36 34
 
37 35
 		ReactInstanceManager reactInstanceManager = reactNativeHost.getReactInstanceManager();
38
-		DevPermissionRequestImpl devPermissionRequest = new DevPermissionRequestImpl(this, isDebug());
39
-		activityLifecycleDelegate = new ActivityLifecycleDelegate(reactInstanceManager, devPermissionRequest);
36
+		DevPermissionRequest devPermissionRequest = new DevPermissionRequest(this, isDebug());
37
+		activityLifecycle = new ActivityLifecycleDelegate(reactInstanceManager, devPermissionRequest);
40 38
 	}
41 39
 }

+ 6
- 8
lib/android/app/src/main/java/com/reactnativenavigation/controllers/ActivityLifecycleDelegate.java View File

@@ -1,10 +1,8 @@
1 1
 package com.reactnativenavigation.controllers;
2 2
 
3
-import android.app.Activity;
4
-
5 3
 import com.facebook.react.ReactInstanceManager;
6 4
 import com.facebook.react.bridge.ReactContext;
7
-import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
5
+import com.reactnativenavigation.NavigationActivity;
8 6
 import com.reactnativenavigation.react.DevPermissionRequest;
9 7
 import com.reactnativenavigation.react.NavigationEventEmitter;
10 8
 
@@ -21,26 +19,26 @@ public class ActivityLifecycleDelegate {
21 19
 		this.devPermissionRequest = devPermissionRequest;
22 20
 	}
23 21
 
24
-	public void onActivityCreated(Activity activity) {
22
+	public void onActivityCreated(NavigationActivity activity) {
25 23
 		appLaunchEmitted.set(false);
26 24
 	}
27 25
 
28
-	public void onActivityResumed(Activity activity, DefaultHardwareBackBtnHandler backBtnHandler) {
26
+	public void onActivityResumed(NavigationActivity activity) {
29 27
 		if (devPermissionRequest.shouldAskPermission()) {
30 28
 			devPermissionRequest.askPermission();
31 29
 		} else {
32
-			reactInstanceManager.onHostResume(activity, backBtnHandler);
30
+			reactInstanceManager.onHostResume(activity, activity);
33 31
 			prepareReactApp();
34 32
 		}
35 33
 	}
36 34
 
37
-	public void onActivityPaused(Activity activity) {
35
+	public void onActivityPaused(NavigationActivity activity) {
38 36
 		if (reactInstanceManager.hasStartedCreatingInitialContext()) {
39 37
 			reactInstanceManager.onHostPause(activity);
40 38
 		}
41 39
 	}
42 40
 
43
-	public void onActivityDestroyed(Activity activity) {
41
+	public void onActivityDestroyed(NavigationActivity activity) {
44 42
 		if (reactInstanceManager.hasStartedCreatingInitialContext()) {
45 43
 			reactInstanceManager.onHostDestroy(activity);
46 44
 		}

+ 6
- 6
lib/android/app/src/main/java/com/reactnativenavigation/controllers/CommandsHandler.java View File

@@ -3,31 +3,31 @@ package com.reactnativenavigation.controllers;
3 3
 import android.view.View;
4 4
 
5 5
 import com.reactnativenavigation.NavigationActivity;
6
+import com.reactnativenavigation.NavigationApplication;
6 7
 import com.reactnativenavigation.layout.LayoutFactory;
7 8
 import com.reactnativenavigation.layout.LayoutNode;
8 9
 import com.reactnativenavigation.layout.StackLayout;
9
-import com.reactnativenavigation.react.ReactRootViewCreator;
10 10
 
11 11
 import org.json.JSONObject;
12 12
 
13 13
 public class CommandsHandler {
14 14
 
15
-	private final ReactRootViewCreator reactRootViewCreator;
15
+	private final NavigationApplication application;
16 16
 
17
-	public CommandsHandler(ReactRootViewCreator reactRootViewCreator) {
18
-		this.reactRootViewCreator = reactRootViewCreator;
17
+	public CommandsHandler(NavigationApplication application) {
18
+		this.application = application;
19 19
 	}
20 20
 
21 21
 	public void setRoot(final NavigationActivity activity, final JSONObject layoutTree) {
22 22
 		final LayoutNode layoutTreeRoot = LayoutNode.parse(layoutTree);
23
-		LayoutFactory factory = new LayoutFactory(activity, reactRootViewCreator);
23
+		LayoutFactory factory = new LayoutFactory(activity, application.getReactNativeHost());
24 24
 		final View rootView = factory.create(layoutTreeRoot);
25 25
 		activity.setContentView(rootView);
26 26
 	}
27 27
 
28 28
 	public void push(final NavigationActivity activity, String onContainerId, JSONObject layoutTree) {
29 29
 		final LayoutNode layoutNode = LayoutNode.parse(layoutTree);
30
-		LayoutFactory factory = new LayoutFactory(activity, reactRootViewCreator);
30
+		LayoutFactory factory = new LayoutFactory(activity, application.getReactNativeHost());
31 31
 		final View rootView = factory.create(layoutNode);
32 32
 		((StackLayout) activity.getContentView()).push(rootView);
33 33
 	}

+ 16
- 5
lib/android/app/src/main/java/com/reactnativenavigation/layout/Container.java View File

@@ -1,23 +1,34 @@
1 1
 package com.reactnativenavigation.layout;
2 2
 
3 3
 import android.app.Activity;
4
+import android.os.Bundle;
5
+import android.view.View;
4 6
 import android.widget.FrameLayout;
5 7
 
8
+import com.facebook.react.ReactNativeHost;
9
+import com.facebook.react.ReactRootView;
6 10
 import com.reactnativenavigation.NavigationApplication;
7 11
 import com.reactnativenavigation.react.NavigationEventEmitter;
8
-import com.reactnativenavigation.react.ReactRootViewCreator;
9 12
 
10 13
 public class Container extends FrameLayout {
14
+	private final ReactNativeHost reactNativeHost;
11 15
 	private final String id;
16
+	private final String name;
12 17
 
13
-	public Container(Activity activity, ReactRootViewCreator reactRootViewCreator, String id, String name) {
18
+	public Container(Activity activity, ReactNativeHost reactNativeHost, String id, String name) {
14 19
 		super(activity);
20
+		this.reactNativeHost = reactNativeHost;
15 21
 		this.id = id;
16
-		addView(reactRootViewCreator.create(activity, id, name));
22
+		this.name = name;
23
+		addView(createReactRootView());
17 24
 	}
18 25
 
19
-	public String getContainerId() {
20
-		return id;
26
+	private View createReactRootView() {
27
+		ReactRootView rootView = new ReactRootView(getContext());
28
+		Bundle opts = new Bundle();
29
+		opts.putString("id", id);
30
+		rootView.startReactApplication(reactNativeHost.getReactInstanceManager(), name, opts);
31
+		return rootView;
21 32
 	}
22 33
 
23 34
 	//    @Override

+ 7
- 9
lib/android/app/src/main/java/com/reactnativenavigation/layout/LayoutFactory.java View File

@@ -6,9 +6,9 @@ import android.view.Gravity;
6 6
 import android.view.View;
7 7
 import android.view.ViewGroup.LayoutParams;
8 8
 
9
-import com.reactnativenavigation.layout.bottomtabs.BottomTabsCreator;
9
+import com.facebook.react.ReactNativeHost;
10
+import com.reactnativenavigation.layout.bottomtabs.BottomTabs;
10 11
 import com.reactnativenavigation.layout.bottomtabs.BottomTabsLayout;
11
-import com.reactnativenavigation.react.ReactRootViewCreator;
12 12
 import com.reactnativenavigation.utils.CompatUtils;
13 13
 
14 14
 import java.util.List;
@@ -16,13 +16,11 @@ import java.util.List;
16 16
 public class LayoutFactory {
17 17
 
18 18
 	private final Activity activity;
19
-	private final ReactRootViewCreator reactRootViewCreator;
20
-	private final BottomTabsCreator bottomTabsCreator; // TODO: revisit this, may not be needed
19
+	private ReactNativeHost reactNativeHost;
21 20
 
22
-	public LayoutFactory(Activity activity, ReactRootViewCreator reactRootViewCreator) {
21
+	public LayoutFactory(Activity activity, ReactNativeHost reactNativeHost) {
23 22
 		this.activity = activity;
24
-		this.reactRootViewCreator = reactRootViewCreator;
25
-		this.bottomTabsCreator = new BottomTabsCreator();
23
+		this.reactNativeHost = reactNativeHost;
26 24
 	}
27 25
 
28 26
 	public View create(LayoutNode node) {
@@ -78,7 +76,7 @@ public class LayoutFactory {
78 76
 
79 77
 	private View createContainerView(LayoutNode node) {
80 78
 		final String name = node.data.optString("name");
81
-		Container container = new Container(activity, reactRootViewCreator, node.id, name);
79
+		Container container = new Container(activity, reactNativeHost, node.id, name);
82 80
 		container.setId(CompatUtils.generateViewId());
83 81
 		return container;
84 82
 
@@ -92,7 +90,7 @@ public class LayoutFactory {
92 90
 	}
93 91
 
94 92
 	private View createBottomTabs(LayoutNode node) {
95
-		final BottomTabsLayout tabsContainer = new BottomTabsLayout(activity, bottomTabsCreator.create());
93
+		final BottomTabsLayout tabsContainer = new BottomTabsLayout(activity, new BottomTabs());
96 94
 		for (int i = 0; i < node.children.size(); i++) {
97 95
 			final View tabContent = create(node.children.get(i));
98 96
 			tabsContainer.addTabContent("#" + i, tabContent);

+ 0
- 8
lib/android/app/src/main/java/com/reactnativenavigation/layout/bottomtabs/BottomTabsCreator.java View File

@@ -1,8 +0,0 @@
1
-package com.reactnativenavigation.layout.bottomtabs;
2
-
3
-public class BottomTabsCreator {
4
-
5
-	public BottomTabs create() {
6
-		return new BottomTabs();
7
-	}
8
-}

+ 37
- 3
lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequest.java View File

@@ -1,8 +1,42 @@
1 1
 package com.reactnativenavigation.react;
2 2
 
3
-public interface DevPermissionRequest {
3
+import android.annotation.TargetApi;
4
+import android.app.Application;
5
+import android.content.Intent;
6
+import android.os.Build;
7
+import android.provider.Settings;
8
+import android.util.Log;
9
+import android.widget.Toast;
4 10
 
5
-	boolean shouldAskPermission();
11
+import com.facebook.react.common.ReactConstants;
6 12
 
7
-	void askPermission();
13
+public class DevPermissionRequest {
14
+
15
+	private final Application application;
16
+	private final boolean isDebug;
17
+
18
+	public DevPermissionRequest(Application application, boolean isDebug) {
19
+		this.application = application;
20
+		this.isDebug = isDebug;
21
+	}
22
+
23
+	public boolean shouldAskPermission() {
24
+		return isDebug &&
25
+				Build.VERSION.SDK_INT >= 23 &&
26
+				!Settings.canDrawOverlays(application);
27
+	}
28
+
29
+	@TargetApi(23)
30
+	public void askPermission() {
31
+		if (shouldAskPermission()) {
32
+			Intent serviceIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
33
+			serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
34
+			application.startActivity(serviceIntent);
35
+			String msg = "Overlay permissions needs to be granted in order for react native apps to run in dev mode";
36
+			Log.w(ReactConstants.TAG, "======================================\n\n");
37
+			Log.w(ReactConstants.TAG, msg);
38
+			Log.w(ReactConstants.TAG, "\n\n======================================");
39
+			Toast.makeText(application, msg, Toast.LENGTH_LONG).show();
40
+		}
41
+	}
8 42
 }

+ 0
- 43
lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequestImpl.java View File

@@ -1,43 +0,0 @@
1
-package com.reactnativenavigation.react;
2
-
3
-import android.annotation.TargetApi;
4
-import android.app.Application;
5
-import android.content.Intent;
6
-import android.os.Build;
7
-import android.provider.Settings;
8
-import android.util.Log;
9
-import android.widget.Toast;
10
-
11
-import com.facebook.react.common.ReactConstants;
12
-
13
-public class DevPermissionRequestImpl implements DevPermissionRequest {
14
-
15
-	private final Application application;
16
-	private final boolean isDebug;
17
-
18
-	public DevPermissionRequestImpl(Application application, boolean isDebug) {
19
-		this.application = application;
20
-		this.isDebug = isDebug;
21
-	}
22
-
23
-	public boolean shouldAskPermission() {
24
-		return isDebug &&
25
-				Build.VERSION.SDK_INT >= 23 &&
26
-				!Settings.canDrawOverlays(application);
27
-	}
28
-
29
-	@Override
30
-	@TargetApi(23)
31
-	public void askPermission() {
32
-		if (shouldAskPermission()) {
33
-			Intent serviceIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
34
-			serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
35
-			application.startActivity(serviceIntent);
36
-			String msg = "Overlay permissions needs to be granted in order for react native apps to run in dev mode";
37
-			Log.w(ReactConstants.TAG, "======================================\n\n");
38
-			Log.w(ReactConstants.TAG, msg);
39
-			Log.w(ReactConstants.TAG, "\n\n======================================");
40
-			Toast.makeText(application, msg, Toast.LENGTH_LONG).show();
41
-		}
42
-	}
43
-}

+ 0
- 8
lib/android/app/src/main/java/com/reactnativenavigation/react/ReactRootViewCreator.java View File

@@ -1,8 +0,0 @@
1
-package com.reactnativenavigation.react;
2
-
3
-import android.app.Activity;
4
-import android.view.View;
5
-
6
-public interface ReactRootViewCreator {
7
-	View create(Activity activity, final String id, final String name);
8
-}

+ 0
- 23
lib/android/app/src/main/java/com/reactnativenavigation/react/ReactRootViewCreatorImpl.java View File

@@ -1,23 +0,0 @@
1
-package com.reactnativenavigation.react;
2
-
3
-import android.app.Activity;
4
-import android.os.Bundle;
5
-import android.view.View;
6
-
7
-import com.facebook.react.ReactInstanceManager;
8
-import com.facebook.react.ReactRootView;
9
-import com.reactnativenavigation.NavigationApplication;
10
-
11
-public class ReactRootViewCreatorImpl implements ReactRootViewCreator {
12
-
13
-	@Override
14
-	public View create(Activity activity, final String id, final String name) {
15
-		ReactRootView rootView = new ReactRootView(activity);
16
-		Bundle opts = new Bundle();
17
-		opts.putString("id", id);
18
-		//TODO this seems like a hack
19
-		ReactInstanceManager reactInstanceManager = ((NavigationApplication) activity.getApplication()).getReactNativeHost().getReactInstanceManager();
20
-		rootView.startReactApplication(reactInstanceManager, name, opts);
21
-		return rootView;
22
-	}
23
-}

+ 1
- 1
lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java View File

@@ -15,6 +15,6 @@ public class TestApplication extends NavigationApplication {
15 15
 	@Override
16 16
 	protected void init() {
17 17
 		reactNativeHost = mock(NavigationReactNativeHost.class);
18
-		activityLifecycleDelegate = mock(ActivityLifecycleDelegate.class);
18
+		activityLifecycle = mock(ActivityLifecycleDelegate.class);
19 19
 	}
20 20
 }

+ 0
- 20
lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactNativeHost.java View File

@@ -1,20 +0,0 @@
1
-package com.reactnativenavigation.mocks;
2
-
3
-import android.app.Application;
4
-
5
-import com.facebook.react.ReactInstanceManager;
6
-import com.reactnativenavigation.controllers.CommandsHandler;
7
-import com.reactnativenavigation.react.NavigationReactNativeHost;
8
-
9
-import static org.mockito.Mockito.mock;
10
-
11
-public class TestReactNativeHost extends NavigationReactNativeHost {
12
-	public TestReactNativeHost(Application application, boolean isDebug, CommandsHandler commandsHandler) {
13
-		super(application, isDebug, commandsHandler);
14
-	}
15
-
16
-	@Override
17
-	protected ReactInstanceManager createReactInstanceManager() {
18
-		return mock(ReactInstanceManager.class);
19
-	}
20
-}