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
 	@Override
13
 	@Override
14
 	protected void onCreate(@Nullable Bundle savedInstanceState) {
14
 	protected void onCreate(@Nullable Bundle savedInstanceState) {
15
 		super.onCreate(savedInstanceState);
15
 		super.onCreate(savedInstanceState);
16
-		app().activityLifecycleDelegate.onActivityCreated(this);
16
+		app().activityLifecycle.onActivityCreated(this);
17
 	}
17
 	}
18
 
18
 
19
 	@Override
19
 	@Override
20
 	protected void onResume() {
20
 	protected void onResume() {
21
 		super.onResume();
21
 		super.onResume();
22
-		app().activityLifecycleDelegate.onActivityResumed(this, this);
22
+		app().activityLifecycle.onActivityResumed(this);
23
 	}
23
 	}
24
 
24
 
25
 	@Override
25
 	@Override
26
 	protected void onPause() {
26
 	protected void onPause() {
27
 		super.onPause();
27
 		super.onPause();
28
-		app().activityLifecycleDelegate.onActivityPaused(this);
28
+		app().activityLifecycle.onActivityPaused(this);
29
 	}
29
 	}
30
 
30
 
31
 	@Override
31
 	@Override
32
 	protected void onDestroy() {
32
 	protected void onDestroy() {
33
 		super.onDestroy();
33
 		super.onDestroy();
34
-		app().activityLifecycleDelegate.onActivityDestroyed(this);
34
+		app().activityLifecycle.onActivityDestroyed(this);
35
 	}
35
 	}
36
 
36
 
37
 	@Override
37
 	@Override

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

7
 import com.facebook.react.ReactNativeHost;
7
 import com.facebook.react.ReactNativeHost;
8
 import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
8
 import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
9
 import com.reactnativenavigation.controllers.CommandsHandler;
9
 import com.reactnativenavigation.controllers.CommandsHandler;
10
-import com.reactnativenavigation.react.DevPermissionRequestImpl;
10
+import com.reactnativenavigation.react.DevPermissionRequest;
11
 import com.reactnativenavigation.react.NavigationReactNativeHost;
11
 import com.reactnativenavigation.react.NavigationReactNativeHost;
12
-import com.reactnativenavigation.react.ReactRootViewCreatorImpl;
13
 
12
 
14
 public abstract class NavigationApplication extends Application implements ReactApplication {
13
 public abstract class NavigationApplication extends Application implements ReactApplication {
15
 
14
 
16
 	NavigationReactNativeHost reactNativeHost;
15
 	NavigationReactNativeHost reactNativeHost;
17
-	ActivityLifecycleDelegate activityLifecycleDelegate;
16
+	ActivityLifecycleDelegate activityLifecycle;
18
 
17
 
19
 	@Override
18
 	@Override
20
 	public void onCreate() {
19
 	public void onCreate() {
30
 	public abstract boolean isDebug();
29
 	public abstract boolean isDebug();
31
 
30
 
32
 	void init() {
31
 	void init() {
33
-		ReactRootViewCreatorImpl reactRootViewCreator = new ReactRootViewCreatorImpl();
34
-		CommandsHandler commandsHandler = new CommandsHandler(reactRootViewCreator);
32
+		CommandsHandler commandsHandler = new CommandsHandler(this);
35
 		reactNativeHost = new NavigationReactNativeHost(this, isDebug(), commandsHandler);
33
 		reactNativeHost = new NavigationReactNativeHost(this, isDebug(), commandsHandler);
36
 
34
 
37
 		ReactInstanceManager reactInstanceManager = reactNativeHost.getReactInstanceManager();
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
 package com.reactnativenavigation.controllers;
1
 package com.reactnativenavigation.controllers;
2
 
2
 
3
-import android.app.Activity;
4
-
5
 import com.facebook.react.ReactInstanceManager;
3
 import com.facebook.react.ReactInstanceManager;
6
 import com.facebook.react.bridge.ReactContext;
4
 import com.facebook.react.bridge.ReactContext;
7
-import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
5
+import com.reactnativenavigation.NavigationActivity;
8
 import com.reactnativenavigation.react.DevPermissionRequest;
6
 import com.reactnativenavigation.react.DevPermissionRequest;
9
 import com.reactnativenavigation.react.NavigationEventEmitter;
7
 import com.reactnativenavigation.react.NavigationEventEmitter;
10
 
8
 
21
 		this.devPermissionRequest = devPermissionRequest;
19
 		this.devPermissionRequest = devPermissionRequest;
22
 	}
20
 	}
23
 
21
 
24
-	public void onActivityCreated(Activity activity) {
22
+	public void onActivityCreated(NavigationActivity activity) {
25
 		appLaunchEmitted.set(false);
23
 		appLaunchEmitted.set(false);
26
 	}
24
 	}
27
 
25
 
28
-	public void onActivityResumed(Activity activity, DefaultHardwareBackBtnHandler backBtnHandler) {
26
+	public void onActivityResumed(NavigationActivity activity) {
29
 		if (devPermissionRequest.shouldAskPermission()) {
27
 		if (devPermissionRequest.shouldAskPermission()) {
30
 			devPermissionRequest.askPermission();
28
 			devPermissionRequest.askPermission();
31
 		} else {
29
 		} else {
32
-			reactInstanceManager.onHostResume(activity, backBtnHandler);
30
+			reactInstanceManager.onHostResume(activity, activity);
33
 			prepareReactApp();
31
 			prepareReactApp();
34
 		}
32
 		}
35
 	}
33
 	}
36
 
34
 
37
-	public void onActivityPaused(Activity activity) {
35
+	public void onActivityPaused(NavigationActivity activity) {
38
 		if (reactInstanceManager.hasStartedCreatingInitialContext()) {
36
 		if (reactInstanceManager.hasStartedCreatingInitialContext()) {
39
 			reactInstanceManager.onHostPause(activity);
37
 			reactInstanceManager.onHostPause(activity);
40
 		}
38
 		}
41
 	}
39
 	}
42
 
40
 
43
-	public void onActivityDestroyed(Activity activity) {
41
+	public void onActivityDestroyed(NavigationActivity activity) {
44
 		if (reactInstanceManager.hasStartedCreatingInitialContext()) {
42
 		if (reactInstanceManager.hasStartedCreatingInitialContext()) {
45
 			reactInstanceManager.onHostDestroy(activity);
43
 			reactInstanceManager.onHostDestroy(activity);
46
 		}
44
 		}

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

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

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

1
 package com.reactnativenavigation.layout;
1
 package com.reactnativenavigation.layout;
2
 
2
 
3
 import android.app.Activity;
3
 import android.app.Activity;
4
+import android.os.Bundle;
5
+import android.view.View;
4
 import android.widget.FrameLayout;
6
 import android.widget.FrameLayout;
5
 
7
 
8
+import com.facebook.react.ReactNativeHost;
9
+import com.facebook.react.ReactRootView;
6
 import com.reactnativenavigation.NavigationApplication;
10
 import com.reactnativenavigation.NavigationApplication;
7
 import com.reactnativenavigation.react.NavigationEventEmitter;
11
 import com.reactnativenavigation.react.NavigationEventEmitter;
8
-import com.reactnativenavigation.react.ReactRootViewCreator;
9
 
12
 
10
 public class Container extends FrameLayout {
13
 public class Container extends FrameLayout {
14
+	private final ReactNativeHost reactNativeHost;
11
 	private final String id;
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
 		super(activity);
19
 		super(activity);
20
+		this.reactNativeHost = reactNativeHost;
15
 		this.id = id;
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
 	//    @Override
34
 	//    @Override

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

6
 import android.view.View;
6
 import android.view.View;
7
 import android.view.ViewGroup.LayoutParams;
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
 import com.reactnativenavigation.layout.bottomtabs.BottomTabsLayout;
11
 import com.reactnativenavigation.layout.bottomtabs.BottomTabsLayout;
11
-import com.reactnativenavigation.react.ReactRootViewCreator;
12
 import com.reactnativenavigation.utils.CompatUtils;
12
 import com.reactnativenavigation.utils.CompatUtils;
13
 
13
 
14
 import java.util.List;
14
 import java.util.List;
16
 public class LayoutFactory {
16
 public class LayoutFactory {
17
 
17
 
18
 	private final Activity activity;
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
 		this.activity = activity;
22
 		this.activity = activity;
24
-		this.reactRootViewCreator = reactRootViewCreator;
25
-		this.bottomTabsCreator = new BottomTabsCreator();
23
+		this.reactNativeHost = reactNativeHost;
26
 	}
24
 	}
27
 
25
 
28
 	public View create(LayoutNode node) {
26
 	public View create(LayoutNode node) {
78
 
76
 
79
 	private View createContainerView(LayoutNode node) {
77
 	private View createContainerView(LayoutNode node) {
80
 		final String name = node.data.optString("name");
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
 		container.setId(CompatUtils.generateViewId());
80
 		container.setId(CompatUtils.generateViewId());
83
 		return container;
81
 		return container;
84
 
82
 
92
 	}
90
 	}
93
 
91
 
94
 	private View createBottomTabs(LayoutNode node) {
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
 		for (int i = 0; i < node.children.size(); i++) {
94
 		for (int i = 0; i < node.children.size(); i++) {
97
 			final View tabContent = create(node.children.get(i));
95
 			final View tabContent = create(node.children.get(i));
98
 			tabsContainer.addTabContent("#" + i, tabContent);
96
 			tabsContainer.addTabContent("#" + i, tabContent);

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

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
 package com.reactnativenavigation.react;
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
-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
-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
-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
 	@Override
15
 	@Override
16
 	protected void init() {
16
 	protected void init() {
17
 		reactNativeHost = mock(NavigationReactNativeHost.class);
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
-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
-}