Daniel Zlotin 8 лет назад
Родитель
Сommit
13563ee630
19 измененных файлов: 81 добавлений и 646 удалений
  1. 8
    4
      lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java
  2. 14
    27
      lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java
  3. 2
    1
      lib/android/app/src/main/java/com/reactnativenavigation/layout/Container.java
  4. 13
    5
      lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequestImpl.java
  5. 11
    9
      lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java
  6. 8
    1
      lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationPackage.java
  7. 5
    2
      lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactNativeHost.java
  8. 6
    2
      lib/android/app/src/main/java/com/reactnativenavigation/react/ReactRootViewCreatorImpl.java
  9. 2
    1
      lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java
  10. 0
    62
      lib/android/app/src/test/java/com/reactnativenavigation/NavigationActivityTest.java
  11. 0
    40
      lib/android/app/src/test/java/com/reactnativenavigation/NavigationApplicationTest.java
  12. 4
    7
      lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java
  13. 0
    29
      lib/android/app/src/test/java/com/reactnativenavigation/controllers/CommandsHandlerTest.java
  14. 0
    135
      lib/android/app/src/test/java/com/reactnativenavigation/layout/BottomTabsContainerTest.java
  15. 0
    238
      lib/android/app/src/test/java/com/reactnativenavigation/layout/LayoutFactoryTest.java
  16. 0
    27
      lib/android/app/src/test/java/com/reactnativenavigation/layout/TestUtils.java
  17. 3
    2
      lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactNativeHost.java
  18. 5
    12
      lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationModuleTest.java
  19. 0
    42
      lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationReactRootViewCreatorTest.java

+ 8
- 4
lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java Просмотреть файл

@@ -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
-		NavigationApplication.instance.getConfig().activityLifecycleDelegate.onActivityCreated(this);
16
+		app().activityLifecycleDelegate.onActivityCreated(this);
17 17
 	}
18 18
 
19 19
 	@Override
20 20
 	protected void onResume() {
21 21
 		super.onResume();
22
-		NavigationApplication.instance.getConfig().activityLifecycleDelegate.onActivityResumed(this, this);
22
+		app().activityLifecycleDelegate.onActivityResumed(this, this);
23 23
 	}
24 24
 
25 25
 	@Override
26 26
 	protected void onPause() {
27 27
 		super.onPause();
28
-		NavigationApplication.instance.getConfig().activityLifecycleDelegate.onActivityPaused(this);
28
+		app().activityLifecycleDelegate.onActivityPaused(this);
29 29
 	}
30 30
 
31 31
 	@Override
32 32
 	protected void onDestroy() {
33 33
 		super.onDestroy();
34
-		NavigationApplication.instance.getConfig().activityLifecycleDelegate.onActivityDestroyed(this);
34
+		app().activityLifecycleDelegate.onActivityDestroyed(this);
35 35
 	}
36 36
 
37 37
 	@Override
@@ -49,4 +49,8 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
49 49
 	public void invokeDefaultOnBackPressed() {
50 50
 		onBackPressed();
51 51
 	}
52
+
53
+	private NavigationApplication app() {
54
+		return ((NavigationApplication) getApplication());
55
+	}
52 56
 }

+ 14
- 27
lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java Просмотреть файл

@@ -3,52 +3,39 @@ package com.reactnativenavigation;
3 3
 import android.app.Application;
4 4
 
5 5
 import com.facebook.react.ReactApplication;
6
+import com.facebook.react.ReactInstanceManager;
6 7
 import com.facebook.react.ReactNativeHost;
7 8
 import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
8 9
 import com.reactnativenavigation.controllers.CommandsHandler;
9 10
 import com.reactnativenavigation.react.DevPermissionRequestImpl;
10 11
 import com.reactnativenavigation.react.NavigationReactNativeHost;
11
-import com.reactnativenavigation.react.NavigationReactRootViewCreator;
12
+import com.reactnativenavigation.react.ReactRootViewCreatorImpl;
12 13
 
13 14
 public abstract class NavigationApplication extends Application implements ReactApplication {
14
-	public static NavigationApplication instance;
15 15
 
16
-	public static class Config {
17
-		public ReactNativeHost reactNativeHost;
18
-		public ActivityLifecycleDelegate activityLifecycleDelegate;
19
-		public CommandsHandler commandsHandler;
20
-	}
21
-
22
-	private Config config;
16
+	NavigationReactNativeHost reactNativeHost;
17
+	ActivityLifecycleDelegate activityLifecycleDelegate;
23 18
 
24 19
 	@Override
25 20
 	public void onCreate() {
26 21
 		super.onCreate();
27
-		instance = this;
28
-		config = createConfig();
29
-	}
30
-
31
-	public final Config getConfig() {
32
-		return config;
22
+		init();
33 23
 	}
34 24
 
35 25
 	@Override
36 26
 	public ReactNativeHost getReactNativeHost() {
37
-		return getConfig().reactNativeHost;
27
+		return reactNativeHost;
38 28
 	}
39 29
 
40 30
 	public abstract boolean isDebug();
41 31
 
42
-	/**
43
-	 * override this to inject your own configuration
44
-	 *
45
-	 * @return the Config
46
-	 */
47
-	protected Config createConfig() {
48
-		Config config = new Config();
49
-		config.reactNativeHost = new NavigationReactNativeHost(this, isDebug());
50
-		config.activityLifecycleDelegate = new ActivityLifecycleDelegate(config.reactNativeHost.getReactInstanceManager(), new DevPermissionRequestImpl());
51
-		config.commandsHandler = new CommandsHandler(new NavigationReactRootViewCreator());
52
-		return config;
32
+	void init() {
33
+		ReactRootViewCreatorImpl reactRootViewCreator = new ReactRootViewCreatorImpl();
34
+		CommandsHandler commandsHandler = new CommandsHandler(reactRootViewCreator);
35
+		reactNativeHost = new NavigationReactNativeHost(this, isDebug(), commandsHandler);
36
+
37
+		ReactInstanceManager reactInstanceManager = reactNativeHost.getReactInstanceManager();
38
+		DevPermissionRequestImpl devPermissionRequest = new DevPermissionRequestImpl(this, isDebug());
39
+		activityLifecycleDelegate = new ActivityLifecycleDelegate(reactInstanceManager, devPermissionRequest);
53 40
 	}
54 41
 }

+ 2
- 1
lib/android/app/src/main/java/com/reactnativenavigation/layout/Container.java Просмотреть файл

@@ -30,7 +30,8 @@ public class Container extends FrameLayout {
30 30
 	@Override
31 31
 	protected void onDetachedFromWindow() {
32 32
 		super.onDetachedFromWindow();
33
-		NavigationEventEmitter.emit(NavigationApplication.instance.getReactNativeHost().getReactInstanceManager().getCurrentReactContext())
33
+		//TODO this is wrong
34
+		NavigationEventEmitter.emit(((NavigationApplication) getContext().getApplicationContext()).getReactNativeHost().getReactInstanceManager().getCurrentReactContext())
34 35
 				.containerStop(id);
35 36
 	}
36 37
 }

+ 13
- 5
lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequestImpl.java Просмотреть файл

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

+ 11
- 9
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java Просмотреть файл

@@ -5,14 +5,16 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
5 5
 import com.facebook.react.bridge.ReactMethod;
6 6
 import com.facebook.react.bridge.ReadableMap;
7 7
 import com.reactnativenavigation.NavigationActivity;
8
-import com.reactnativenavigation.NavigationApplication;
8
+import com.reactnativenavigation.controllers.CommandsHandler;
9 9
 import com.reactnativenavigation.utils.UiThread;
10 10
 
11 11
 public class NavigationModule extends ReactContextBaseJavaModule {
12 12
 	private static final String NAME = "RNNBridgeModule";
13
+	private CommandsHandler commandsHandler;
13 14
 
14
-	public NavigationModule(final ReactApplicationContext reactContext) {
15
+	public NavigationModule(final ReactApplicationContext reactContext, CommandsHandler commandsHandler) {
15 16
 		super(reactContext);
17
+		this.commandsHandler = commandsHandler;
16 18
 	}
17 19
 
18 20
 	@Override
@@ -20,16 +22,12 @@ public class NavigationModule extends ReactContextBaseJavaModule {
20 22
 		return NAME;
21 23
 	}
22 24
 
23
-	public NavigationActivity activity() {
24
-		return (NavigationActivity) getCurrentActivity();
25
-	}
26
-
27 25
 	@ReactMethod
28 26
 	public void setRoot(final ReadableMap layoutTree) {
29 27
 		handle(new Runnable() {
30 28
 			@Override
31 29
 			public void run() {
32
-				NavigationApplication.instance.getConfig().commandsHandler.setRoot(activity(), ArgsParser.parse(layoutTree));
30
+				commandsHandler.setRoot(activity(), ArgsParser.parse(layoutTree));
33 31
 			}
34 32
 		});
35 33
 	}
@@ -39,7 +37,7 @@ public class NavigationModule extends ReactContextBaseJavaModule {
39 37
 		handle(new Runnable() {
40 38
 			@Override
41 39
 			public void run() {
42
-				NavigationApplication.instance.getConfig().commandsHandler.push(activity(), onContainerId, ArgsParser.parse(layoutTree));
40
+				commandsHandler.push(activity(), onContainerId, ArgsParser.parse(layoutTree));
43 41
 			}
44 42
 		});
45 43
 	}
@@ -49,11 +47,15 @@ public class NavigationModule extends ReactContextBaseJavaModule {
49 47
 		handle(new Runnable() {
50 48
 			@Override
51 49
 			public void run() {
52
-				NavigationApplication.instance.getConfig().commandsHandler.pop(activity(), onContainerId);
50
+				commandsHandler.pop(activity(), onContainerId);
53 51
 			}
54 52
 		});
55 53
 	}
56 54
 
55
+	NavigationActivity activity() {
56
+		return (NavigationActivity) getCurrentActivity();
57
+	}
58
+
57 59
 	private void handle(Runnable task) {
58 60
 		if (activity() == null) return;
59 61
 		UiThread.post(task);

+ 8
- 1
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationPackage.java Просмотреть файл

@@ -5,6 +5,7 @@ import com.facebook.react.bridge.JavaScriptModule;
5 5
 import com.facebook.react.bridge.NativeModule;
6 6
 import com.facebook.react.bridge.ReactApplicationContext;
7 7
 import com.facebook.react.uimanager.ViewManager;
8
+import com.reactnativenavigation.controllers.CommandsHandler;
8 9
 
9 10
 import java.util.Arrays;
10 11
 import java.util.Collections;
@@ -12,10 +13,16 @@ import java.util.List;
12 13
 
13 14
 public class NavigationPackage implements ReactPackage {
14 15
 
16
+	private CommandsHandler commandsHandler;
17
+
18
+	public NavigationPackage(final CommandsHandler commandsHandler) {
19
+		this.commandsHandler = commandsHandler;
20
+	}
21
+
15 22
 	@Override
16 23
 	public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
17 24
 		return Arrays.<NativeModule>asList(
18
-				new NavigationModule(reactContext)
25
+				new NavigationModule(reactContext, commandsHandler)
19 26
 		);
20 27
 	}
21 28
 

+ 5
- 2
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactNativeHost.java Просмотреть файл

@@ -5,6 +5,7 @@ import android.app.Application;
5 5
 import com.facebook.react.ReactNativeHost;
6 6
 import com.facebook.react.ReactPackage;
7 7
 import com.facebook.react.shell.MainReactPackage;
8
+import com.reactnativenavigation.controllers.CommandsHandler;
8 9
 
9 10
 import java.util.Arrays;
10 11
 import java.util.List;
@@ -12,10 +13,12 @@ import java.util.List;
12 13
 public class NavigationReactNativeHost extends ReactNativeHost {
13 14
 
14 15
 	private final boolean isDebug;
16
+	private CommandsHandler commandsHandler;
15 17
 
16
-	public NavigationReactNativeHost(Application application, boolean isDebug) {
18
+	public NavigationReactNativeHost(Application application, boolean isDebug, CommandsHandler commandsHandler) {
17 19
 		super(application);
18 20
 		this.isDebug = isDebug;
21
+		this.commandsHandler = commandsHandler;
19 22
 	}
20 23
 
21 24
 	@Override
@@ -27,7 +30,7 @@ public class NavigationReactNativeHost extends ReactNativeHost {
27 30
 	protected List<ReactPackage> getPackages() {
28 31
 		return Arrays.<ReactPackage>asList(
29 32
 				new MainReactPackage(),
30
-				new NavigationPackage()
33
+				new NavigationPackage(commandsHandler)
31 34
 		);
32 35
 	}
33 36
 }

lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactRootViewCreator.java → lib/android/app/src/main/java/com/reactnativenavigation/react/ReactRootViewCreatorImpl.java Просмотреть файл

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

+ 2
- 1
lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java Просмотреть файл

@@ -5,6 +5,7 @@ import com.facebook.react.uimanager.DisplayMetricsHolder;
5 5
 import org.junit.Before;
6 6
 import org.junit.runner.RunWith;
7 7
 import org.robolectric.RobolectricTestRunner;
8
+import org.robolectric.RuntimeEnvironment;
8 9
 import org.robolectric.annotation.Config;
9 10
 
10 11
 @RunWith(RobolectricTestRunner.class)
@@ -13,6 +14,6 @@ public abstract class BaseTest {
13 14
 
14 15
 	@Before
15 16
 	public void beforeEach() {
16
-		DisplayMetricsHolder.initDisplayMetrics(NavigationApplication.instance);
17
+		DisplayMetricsHolder.initDisplayMetrics(RuntimeEnvironment.application);
17 18
 	}
18 19
 }

+ 0
- 62
lib/android/app/src/test/java/com/reactnativenavigation/NavigationActivityTest.java Просмотреть файл

@@ -1,62 +0,0 @@
1
-package com.reactnativenavigation;
2
-
3
-import android.view.View;
4
-
5
-import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
6
-import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
7
-
8
-import org.junit.Test;
9
-import org.robolectric.Robolectric;
10
-import org.robolectric.android.controller.ActivityController;
11
-
12
-import static org.assertj.core.api.Java6Assertions.assertThat;
13
-import static org.mockito.Mockito.mock;
14
-import static org.mockito.Mockito.times;
15
-import static org.mockito.Mockito.verify;
16
-import static org.mockito.Mockito.verifyNoMoreInteractions;
17
-import static org.mockito.Mockito.verifyZeroInteractions;
18
-
19
-public class NavigationActivityTest extends BaseTest {
20
-
21
-	@Test
22
-	public void holdsContentView() throws Exception {
23
-		NavigationActivity activity = Robolectric.setupActivity(NavigationActivity.class);
24
-		assertThat(activity.getContentView()).isNull();
25
-		View view = new View(activity);
26
-		activity.setContentView(view);
27
-		assertThat(activity.getContentView()).isSameAs(view);
28
-	}
29
-
30
-	@Test
31
-	public void reportsLifecycleEventsToDelegate() throws Exception {
32
-		ActivityController<NavigationActivity> activityController = Robolectric.buildActivity(NavigationActivity.class);
33
-		NavigationApplication.instance.getConfig().activityLifecycleDelegate = mock(ActivityLifecycleDelegate.class);
34
-		ActivityLifecycleDelegate activityLifecycleDelegate = NavigationApplication.instance.getConfig().activityLifecycleDelegate;
35
-
36
-		verifyZeroInteractions(activityLifecycleDelegate);
37
-
38
-		activityController.create();
39
-		verify(activityLifecycleDelegate, times(1)).onActivityCreated(activityController.get());
40
-		verifyNoMoreInteractions(activityLifecycleDelegate);
41
-
42
-		activityController.resume();
43
-		verify(activityLifecycleDelegate, times(1)).onActivityResumed(activityController.get(), activityController.get());
44
-		verifyNoMoreInteractions(activityLifecycleDelegate);
45
-
46
-		activityController.pause();
47
-		verify(activityLifecycleDelegate, times(1)).onActivityPaused(activityController.get());
48
-		verifyNoMoreInteractions(activityLifecycleDelegate);
49
-
50
-		activityController.destroy();
51
-		verify(activityLifecycleDelegate, times(1)).onActivityDestroyed(activityController.get());
52
-		verifyNoMoreInteractions(activityLifecycleDelegate);
53
-	}
54
-
55
-	@Test
56
-	public void defaultBackBtnHandler() throws Exception {
57
-		NavigationActivity navigationActivity = Robolectric.setupActivity(NavigationActivity.class);
58
-		assertThat(navigationActivity).isInstanceOf(DefaultHardwareBackBtnHandler.class);
59
-		navigationActivity.invokeDefaultOnBackPressed();
60
-		assertThat(navigationActivity.isFinishing()).isTrue();
61
-	}
62
-}

+ 0
- 40
lib/android/app/src/test/java/com/reactnativenavigation/NavigationApplicationTest.java Просмотреть файл

@@ -1,40 +0,0 @@
1
-package com.reactnativenavigation;
2
-
3
-import com.facebook.react.ReactApplication;
4
-import com.facebook.react.ReactNativeHost;
5
-import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
6
-
7
-import org.junit.Test;
8
-import org.robolectric.RuntimeEnvironment;
9
-
10
-import static org.assertj.core.api.Java6Assertions.assertThat;
11
-
12
-public class NavigationApplicationTest extends BaseTest {
13
-
14
-	@Test
15
-	public void reactApplication() throws Exception {
16
-		assertThat(RuntimeEnvironment.application).isInstanceOf(ReactApplication.class);
17
-		assertThat(((ReactApplication) RuntimeEnvironment.application).getReactNativeHost()).isNotNull();
18
-	}
19
-
20
-	@Test
21
-	public void isDebug() throws Exception {
22
-		assertThat(((NavigationApplication) RuntimeEnvironment.application).isDebug()).isTrue();
23
-	}
24
-
25
-	@Test
26
-	public void singleGlobalInstance() throws Exception {
27
-		assertThat(RuntimeEnvironment.application).isSameAs(NavigationApplication.instance);
28
-	}
29
-
30
-	@Test
31
-	public void holdsConfiguration() throws Exception {
32
-		assertThat(NavigationApplication.instance.getConfig()).isInstanceOf(NavigationApplication.Config.class);
33
-	}
34
-
35
-	@Test
36
-	public void config() throws Exception {
37
-		assertThat(NavigationApplication.instance.getConfig().reactNativeHost).isInstanceOf(ReactNativeHost.class);
38
-		assertThat(NavigationApplication.instance.getConfig().activityLifecycleDelegate).isInstanceOf(ActivityLifecycleDelegate.class);
39
-	}
40
-}

+ 4
- 7
lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java Просмотреть файл

@@ -4,7 +4,7 @@ import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
4 4
 import com.reactnativenavigation.controllers.CommandsHandler;
5 5
 import com.reactnativenavigation.mocks.TestDevPermissionRequest;
6 6
 import com.reactnativenavigation.mocks.TestReactNativeHost;
7
-import com.reactnativenavigation.react.NavigationReactRootViewCreator;
7
+import com.reactnativenavigation.react.ReactRootViewCreatorImpl;
8 8
 
9 9
 public class TestApplication extends NavigationApplication {
10 10
 
@@ -14,11 +14,8 @@ public class TestApplication extends NavigationApplication {
14 14
 	}
15 15
 
16 16
 	@Override
17
-	protected Config createConfig() {
18
-		Config config = new Config();
19
-		config.reactNativeHost = new TestReactNativeHost(this, isDebug());
20
-		config.activityLifecycleDelegate = new ActivityLifecycleDelegate(config.reactNativeHost.getReactInstanceManager(), new TestDevPermissionRequest());
21
-		config.commandsHandler = new CommandsHandler(new NavigationReactRootViewCreator());
22
-		return config;
17
+	protected void init() {
18
+		reactNativeHost = new TestReactNativeHost(this, isDebug(), new CommandsHandler(new ReactRootViewCreatorImpl()));
19
+		activityLifecycleDelegate = new ActivityLifecycleDelegate(reactNativeHost.getReactInstanceManager(), new TestDevPermissionRequest());
23 20
 	}
24 21
 }

+ 0
- 29
lib/android/app/src/test/java/com/reactnativenavigation/controllers/CommandsHandlerTest.java Просмотреть файл

@@ -1,29 +0,0 @@
1
-package com.reactnativenavigation.controllers;
2
-
3
-import com.reactnativenavigation.BaseTest;
4
-import com.reactnativenavigation.NavigationActivity;
5
-import com.reactnativenavigation.NavigationApplication;
6
-import com.reactnativenavigation.layout.Container;
7
-
8
-import org.json.JSONObject;
9
-import org.junit.Test;
10
-import org.robolectric.Robolectric;
11
-
12
-import static org.assertj.core.api.Java6Assertions.assertThat;
13
-
14
-public class CommandsHandlerTest extends BaseTest {
15
-
16
-	@Test
17
-	public void setRootCreatesTheLayout_SetContentView() throws Exception {
18
-		CommandsHandler uut = NavigationApplication.instance.getConfig().commandsHandler;
19
-		JSONObject json = new JSONObject("{" +
20
-				"id: containerId123," +
21
-				"type: Container" +
22
-				"}");
23
-		NavigationActivity activity = Robolectric.setupActivity(NavigationActivity.class);
24
-		uut.setRoot(activity, json);
25
-
26
-		assertThat(activity.getContentView()).isInstanceOf(Container.class);
27
-		assertThat(((Container) activity.getContentView()).getContainerId()).isEqualTo("containerId123");
28
-	}
29
-}

+ 0
- 135
lib/android/app/src/test/java/com/reactnativenavigation/layout/BottomTabsContainerTest.java Просмотреть файл

@@ -1,135 +0,0 @@
1
-package com.reactnativenavigation.layout;
2
-
3
-import android.app.Activity;
4
-import android.view.View;
5
-
6
-import com.reactnativenavigation.BaseTest;
7
-import com.reactnativenavigation.layout.bottomtabs.BottomTabs;
8
-import com.reactnativenavigation.layout.bottomtabs.BottomTabsLayout;
9
-import com.reactnativenavigation.layout.bottomtabs.TooManyTabsException;
10
-
11
-import org.junit.Before;
12
-import org.junit.Test;
13
-import org.robolectric.Robolectric;
14
-
15
-import static org.assertj.core.api.Java6Assertions.assertThat;
16
-import static org.mockito.Mockito.mock;
17
-import static org.mockito.Mockito.verify;
18
-
19
-public class BottomTabsContainerTest extends BaseTest {
20
-
21
-	private static final String TAB_NAME = "myTab";
22
-	private static final String OTHER_TAB_NAME = "myOtherTab";
23
-
24
-	private BottomTabs bottomTabs;
25
-	private Activity activity;
26
-
27
-	@Before
28
-	public void setUp() throws Exception {
29
-		bottomTabs = mock(BottomTabs.class);
30
-		activity = Robolectric.buildActivity(Activity.class).get();
31
-	}
32
-
33
-	@Test
34
-	public void addsTabToBottomTabs() throws Exception {
35
-		ContainerStackLayout tabContent = new ContainerStackLayout(activity);
36
-
37
-		BottomTabsLayout bottomTabsContainer = createBottomTabsContainer();
38
-		bottomTabsContainer.addTabContent(TAB_NAME, tabContent);
39
-
40
-		verify(bottomTabs).add(TAB_NAME);
41
-	}
42
-
43
-	@Test
44
-	public void addsTabContentToLayout() throws Exception {
45
-		ContainerStackLayout stackLayout = new ContainerStackLayout(activity);
46
-
47
-		BottomTabsLayout bottomTabsContainer = createBottomTabsContainer();
48
-		bottomTabsContainer.addTabContent(TAB_NAME, stackLayout);
49
-
50
-		verify(bottomTabs).attach(bottomTabsContainer);
51
-		TestUtils.assertViewChildren(bottomTabsContainer, stackLayout);
52
-	}
53
-
54
-	@Test
55
-	public void addsTwoTabsContentToLayout() throws Exception {
56
-		View tabContent = new ContainerStackLayout(activity);
57
-		View otherTabContent = new ContainerStackLayout(activity);
58
-
59
-		BottomTabsLayout bottomTabsContainer = createBottomTabsContainer();
60
-		bottomTabsContainer.addTabContent(TAB_NAME, tabContent);
61
-		bottomTabsContainer.addTabContent(OTHER_TAB_NAME, otherTabContent);
62
-
63
-		TestUtils.assertViewChildren(bottomTabsContainer, tabContent, otherTabContent);
64
-	}
65
-
66
-	@Test(expected = TooManyTabsException.class)
67
-	public void throwsExceptionWhenMoreThenFiveTabs() throws Exception {
68
-		BottomTabsLayout bottomTabsContainer = createBottomTabsContainer();
69
-		for (int i = 0; i < 6; i++) {
70
-			ContainerStackLayout content = new ContainerStackLayout(activity);
71
-			bottomTabsContainer.addTabContent("#" + i, content);
72
-		}
73
-	}
74
-
75
-	@Test
76
-	public void addFiveTabs() throws Exception {
77
-		BottomTabsLayout bottomTabsContainer = createBottomTabsContainer();
78
-		for (int i = 0; i < 5; i++) {
79
-			ContainerStackLayout content = new ContainerStackLayout(activity);
80
-			bottomTabsContainer.addTabContent("#" + i, content);
81
-		}
82
-	}
83
-
84
-	@Test
85
-	public void onlyFirstTabShouldBeVisible() throws Exception {
86
-		ContainerStackLayout tabContent = new ContainerStackLayout(activity);
87
-		ContainerStackLayout otherTabContent = new ContainerStackLayout(activity);
88
-
89
-		BottomTabsLayout bottomTabsContainer = createBottomTabsContainer();
90
-		bottomTabsContainer.addTabContent(TAB_NAME, tabContent);
91
-		bottomTabsContainer.addTabContent(OTHER_TAB_NAME, otherTabContent);
92
-
93
-		assertThat(tabContent.getVisibility()).isEqualTo(View.VISIBLE);
94
-		assertThat(otherTabContent.getVisibility()).isEqualTo(View.GONE);
95
-	}
96
-
97
-	@Test
98
-	public void listensToTabsSwitchingEvents() throws Exception {
99
-		BottomTabsLayout bottomTabsContainer = createBottomTabsContainer();
100
-		verify(bottomTabs).setSelectionListener(bottomTabsContainer);
101
-	}
102
-
103
-	@Test
104
-	public void switchesBetweenFirstAndSecondTabs() throws Exception {
105
-		ContainerStackLayout tabContent = new ContainerStackLayout(activity);
106
-		ContainerStackLayout otherTabContent = new ContainerStackLayout(activity);
107
-
108
-		BottomTabsLayout bottomTabsContainer = createBottomTabsContainer();
109
-		bottomTabsContainer.addTabContent(TAB_NAME, tabContent);
110
-		bottomTabsContainer.addTabContent(OTHER_TAB_NAME, otherTabContent);
111
-		bottomTabsContainer.onTabSelected(1);
112
-
113
-		assertThat(tabContent.getVisibility()).isEqualTo(View.GONE);
114
-		assertThat(otherTabContent.getVisibility()).isEqualTo(View.VISIBLE);
115
-	}
116
-
117
-	@Test
118
-	public void switchesBetweenSecondAndFirstTabs() throws Exception {
119
-		ContainerStackLayout tabContent = new ContainerStackLayout(activity);
120
-		ContainerStackLayout otherTabContent = new ContainerStackLayout(activity);
121
-
122
-		BottomTabsLayout bottomTabsContainer = createBottomTabsContainer();
123
-		bottomTabsContainer.addTabContent(TAB_NAME, tabContent);
124
-		bottomTabsContainer.addTabContent(OTHER_TAB_NAME, otherTabContent);
125
-		bottomTabsContainer.onTabSelected(1);
126
-		bottomTabsContainer.onTabSelected(0);
127
-
128
-		assertThat(tabContent.getVisibility()).isEqualTo(View.VISIBLE);
129
-		assertThat(otherTabContent.getVisibility()).isEqualTo(View.GONE);
130
-	}
131
-
132
-	private BottomTabsLayout createBottomTabsContainer() {
133
-		return new BottomTabsLayout(activity, bottomTabs);
134
-	}
135
-}

+ 0
- 238
lib/android/app/src/test/java/com/reactnativenavigation/layout/LayoutFactoryTest.java Просмотреть файл

@@ -1,238 +0,0 @@
1
-package com.reactnativenavigation.layout;
2
-
3
-import android.app.Activity;
4
-import android.support.v7.app.AppCompatActivity;
5
-import android.view.View;
6
-import android.view.ViewGroup;
7
-
8
-import com.reactnativenavigation.BaseTest;
9
-import com.reactnativenavigation.layout.bottomtabs.BottomTabsLayout;
10
-import com.reactnativenavigation.react.ReactRootViewCreator;
11
-
12
-import org.json.JSONException;
13
-import org.json.JSONObject;
14
-import org.junit.Before;
15
-import org.junit.Test;
16
-import org.robolectric.Robolectric;
17
-
18
-import java.util.Arrays;
19
-import java.util.List;
20
-
21
-import static org.assertj.core.api.Java6Assertions.assertThat;
22
-import static org.mockito.ArgumentMatchers.any;
23
-import static org.mockito.ArgumentMatchers.eq;
24
-import static org.mockito.Mockito.mock;
25
-import static org.mockito.Mockito.when;
26
-
27
-public class LayoutFactoryTest extends BaseTest {
28
-
29
-	private final static String NODE_ID = "myUniqueId";
30
-	private final static String REACT_ROOT_VIEW_KEY = "myName";
31
-
32
-	private final static String OTHER_NODE_ID = "anotherUniqueId";
33
-	private final static String OTHER_REACT_ROOT_VIEW_KEY = "anotherName";
34
-
35
-	private Activity activity;
36
-	private View mockView;
37
-	private View otherMockView;
38
-	private ReactRootViewCreator reactRootViewCreator;
39
-
40
-	@Before
41
-	public void setUp() {
42
-		activity = Robolectric.buildActivity(AppCompatActivity.class).get();
43
-		mockView = new View(activity);
44
-		otherMockView = new View(activity);
45
-		reactRootViewCreator = mock(ReactRootViewCreator.class);
46
-	}
47
-
48
-	@Test
49
-	public void returnsContainerThatHoldsTheRootView() throws Exception {
50
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
51
-		final LayoutNode node = createContainerNode();
52
-
53
-		final ViewGroup result = (ViewGroup) createLayoutFactory().create(node);
54
-
55
-		assertThat(result).isInstanceOf(Container.class);
56
-		TestUtils.assertViewChildren(result, mockView);
57
-	}
58
-
59
-	@Test
60
-	public void returnsContainerStack() throws Exception {
61
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
62
-		final LayoutNode containerNode = createContainerNode();
63
-		final LayoutNode stackNode = createContainerStackNode(containerNode);
64
-
65
-		final ViewGroup result = (ViewGroup) createLayoutFactory().create(stackNode);
66
-
67
-		assertThat(result).isInstanceOf(ContainerStackLayout.class);
68
-		ViewGroup container = (ViewGroup) TestUtils.assertViewChildrenCount(result, 1).get(0);
69
-		TestUtils.assertViewChildren(container, mockView);
70
-	}
71
-
72
-	@Test
73
-	public void returnsContainerStackWithMultipleViews() throws Exception {
74
-		final View mockView1 = mock(View.class);
75
-		final View mockView2 = mock(View.class);
76
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView1);
77
-		when(reactRootViewCreator.create(any(Activity.class), eq(OTHER_NODE_ID), eq(OTHER_REACT_ROOT_VIEW_KEY))).thenReturn(mockView2);
78
-
79
-		final LayoutNode containerNode1 = createContainerNode(NODE_ID, REACT_ROOT_VIEW_KEY);
80
-		final LayoutNode containerNode2 = createContainerNode(OTHER_NODE_ID, OTHER_REACT_ROOT_VIEW_KEY);
81
-		final LayoutNode stackNode = createContainerStackNode(containerNode1, containerNode2);
82
-
83
-		final ViewGroup result = (ViewGroup) createLayoutFactory().create(stackNode);
84
-
85
-		assertThat(result).isInstanceOf(ContainerStackLayout.class);
86
-		List<View> containers = TestUtils.assertViewChildrenCount(result, 2);
87
-		ViewGroup container1 = (ViewGroup) containers.get(0);
88
-		ViewGroup container2 = (ViewGroup) containers.get(1);
89
-		TestUtils.assertViewChildren(container1, mockView1);
90
-		TestUtils.assertViewChildren(container2, mockView2);
91
-	}
92
-
93
-	@Test
94
-	public void returnsSideMenuRoot() throws Exception {
95
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
96
-		final LayoutNode containerNode = createSideMenuContainerNode(Arrays.asList(createContainerNode()));
97
-		final ViewGroup result = (ViewGroup) createLayoutFactory().create(containerNode);
98
-		assertThat(result).isInstanceOf(SideMenuLayout.class);
99
-	}
100
-
101
-	@Test
102
-	public void hasContentContainer() throws Exception {
103
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
104
-		LayoutNode contentContainer = createContainerNode();
105
-		final LayoutNode sideMenu = createSideMenuContainerNode(Arrays.asList(contentContainer));
106
-		final ViewGroup result = (ViewGroup) createLayoutFactory().create(sideMenu);
107
-		assertThat(result.getChildAt(0)).isInstanceOf(Container.class);
108
-	}
109
-
110
-	@Test
111
-	public void hasLeftMenu() throws Exception {
112
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
113
-		LayoutNode sideMenuLeft = createSideMenuLeftNode();
114
-		final LayoutNode sideMenu = createSideMenuContainerNode(Arrays.asList(sideMenuLeft));
115
-		final ViewGroup result = (ViewGroup) createLayoutFactory().create(sideMenu);
116
-		assertThat(result.getChildAt(0)).isInstanceOf(Container.class);
117
-	}
118
-
119
-	@Test
120
-	public void hasRightMenu() throws Exception {
121
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
122
-		LayoutNode sideMenuRight = createSideMenuRightNode();
123
-		final LayoutNode sideMenu = createSideMenuContainerNode(Arrays.asList(sideMenuRight));
124
-		final ViewGroup result = (ViewGroup) createLayoutFactory().create(sideMenu);
125
-		assertThat(result.getChildAt(0)).isInstanceOf(Container.class);
126
-	}
127
-
128
-	@Test
129
-	public void pushScreenToScreenStackLayout() throws Exception {
130
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
131
-		final LayoutNode container = createContainerNode();
132
-		final LayoutNode stackNode = createContainerStackNode(container);
133
-		final ContainerStackLayout containerStackLayout = (ContainerStackLayout) createLayoutFactory().create(stackNode);
134
-
135
-		when(reactRootViewCreator.create(any(Activity.class), eq(OTHER_NODE_ID), eq(OTHER_REACT_ROOT_VIEW_KEY))).thenReturn(otherMockView);
136
-		final LayoutNode pushedContainer = createContainerNode(OTHER_NODE_ID, OTHER_REACT_ROOT_VIEW_KEY);
137
-		containerStackLayout.push(createLayoutFactory().create(pushedContainer));
138
-
139
-		ViewGroup result = (ViewGroup) TestUtils.assertViewChildrenCount(containerStackLayout, 1).get(0);
140
-		assertThat(result.getChildAt(0)).isEqualTo(otherMockView);
141
-	}
142
-
143
-	@Test
144
-	public void pushTwoScreensToStackLayout() throws Exception {
145
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
146
-		final LayoutNode container = createContainerNode();
147
-		final LayoutNode stackNode = createContainerStackNode(container);
148
-		final ContainerStackLayout containerStackLayout = (ContainerStackLayout) createLayoutFactory().create(stackNode);
149
-
150
-		View first = new View(activity);
151
-		pushContainer(containerStackLayout, OTHER_NODE_ID, OTHER_REACT_ROOT_VIEW_KEY, first);
152
-
153
-		View second = new View(activity);
154
-		pushContainer(containerStackLayout, "secondPushedScreenId", "secondPushedScreenKey", second);
155
-
156
-		ViewGroup result = (ViewGroup) TestUtils.assertViewChildrenCount(containerStackLayout, 1).get(0);
157
-		assertThat(result.getChildAt(0)).isEqualTo(second);
158
-	}
159
-
160
-	@Test
161
-	public void popTwoScreensFromStackLayout() throws Exception {
162
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
163
-		final LayoutNode container = createContainerNode();
164
-		final LayoutNode stackNode = createContainerStackNode(container);
165
-		final ContainerStackLayout containerStackLayout = (ContainerStackLayout) createLayoutFactory().create(stackNode);
166
-
167
-		pushContainer(containerStackLayout, OTHER_NODE_ID, OTHER_REACT_ROOT_VIEW_KEY, new View(activity));
168
-		pushContainer(containerStackLayout, "secondPushedScreenId", "secondPushedScreenKey", new View(activity));
169
-
170
-		containerStackLayout.pop();
171
-		containerStackLayout.pop();
172
-
173
-		ViewGroup result = (ViewGroup) TestUtils.assertViewChildrenCount(containerStackLayout, 1).get(0);
174
-		assertThat(result.getChildAt(0)).isEqualTo(mockView);
175
-	}
176
-
177
-	private void pushContainer(ContainerStackLayout containerStackLayout, String screenId, String reactRootViewKey, View rootView) throws Exception {
178
-		when(reactRootViewCreator.create(any(Activity.class), eq(screenId), eq(reactRootViewKey))).thenReturn(rootView);
179
-		View pushedContainer = createLayoutFactory().create(createContainerNode(screenId, reactRootViewKey));
180
-		containerStackLayout.push(pushedContainer);
181
-	}
182
-
183
-	private void pushContainer(BottomTabsLayout containerStackLayout, String screenId, String reactRootViewKey, View rootView) throws Exception {
184
-		when(reactRootViewCreator.create(any(Activity.class), eq(screenId), eq(reactRootViewKey))).thenReturn(rootView);
185
-		View pushedContainer = createLayoutFactory().create(createContainerNode(screenId, reactRootViewKey));
186
-		containerStackLayout.push(pushedContainer);
187
-	}
188
-
189
-	@Test
190
-	public void popScreenFromScreenStackLayout() throws Exception {
191
-		when(reactRootViewCreator.create(any(Activity.class), eq(NODE_ID), eq(REACT_ROOT_VIEW_KEY))).thenReturn(mockView);
192
-		final LayoutNode container = createContainerNode();
193
-		final LayoutNode stackNode = createContainerStackNode(container);
194
-		final ContainerStackLayout containerStackLayout = (ContainerStackLayout) createLayoutFactory().create(stackNode);
195
-
196
-		when(reactRootViewCreator.create(any(Activity.class), eq(OTHER_NODE_ID), eq(OTHER_REACT_ROOT_VIEW_KEY))).thenReturn(otherMockView);
197
-		final LayoutNode pushedContainer = createContainerNode(OTHER_NODE_ID, OTHER_REACT_ROOT_VIEW_KEY);
198
-		containerStackLayout.push(createLayoutFactory().create(pushedContainer));
199
-
200
-		containerStackLayout.pop();
201
-		ViewGroup result = (ViewGroup) TestUtils.assertViewChildrenCount(containerStackLayout, 1).get(0);
202
-		assertThat(result.getChildAt(0)).isEqualTo(mockView);
203
-	}
204
-
205
-	private LayoutFactory createLayoutFactory() {
206
-		return new LayoutFactory(activity, reactRootViewCreator);
207
-	}
208
-
209
-	private LayoutNode createContainerNode() throws Exception {
210
-		return createContainerNode(NODE_ID, REACT_ROOT_VIEW_KEY);
211
-	}
212
-
213
-	private LayoutNode createSideMenuLeftNode() throws Exception {
214
-		List<LayoutNode> children = Arrays.asList(createContainerNode());
215
-		return new LayoutNode("SideMenuLeft", LayoutNode.Type.SideMenuLeft, null, children);
216
-	}
217
-
218
-	private LayoutNode createSideMenuRightNode() throws Exception {
219
-		List<LayoutNode> children = Arrays.asList(createContainerNode());
220
-		return new LayoutNode("SideMenuRight", LayoutNode.Type.SideMenuRight, null, children);
221
-	}
222
-
223
-	private LayoutNode createContainerNode(final String id, final String name) throws JSONException {
224
-		return new LayoutNode(id, LayoutNode.Type.Container, new JSONObject().put("name", name), null);
225
-	}
226
-
227
-	private LayoutNode createSideMenuContainerNode(List<LayoutNode> children) {
228
-		return new LayoutNode("SideMenuRoot", LayoutNode.Type.SideMenuRoot, null, children);
229
-	}
230
-
231
-	private LayoutNode createContainerStackNode(LayoutNode... children) {
232
-		return new LayoutNode("ContainerStack", LayoutNode.Type.ContainerStack, null, Arrays.asList(children));
233
-	}
234
-
235
-	private LayoutNode createBottomTabNode(LayoutNode... children) {
236
-		return new LayoutNode("BottomTabs", LayoutNode.Type.BottomTabs, null, Arrays.asList(children));
237
-	}
238
-}

+ 0
- 27
lib/android/app/src/test/java/com/reactnativenavigation/layout/TestUtils.java Просмотреть файл

@@ -1,27 +0,0 @@
1
-package com.reactnativenavigation.layout;
2
-
3
-import android.view.View;
4
-import android.view.ViewGroup;
5
-
6
-import java.util.ArrayList;
7
-import java.util.Arrays;
8
-import java.util.List;
9
-
10
-import static org.assertj.core.api.Java6Assertions.assertThat;
11
-
12
-public class TestUtils {
13
-	public static List<View> assertViewChildrenCount(ViewGroup view, int count) {
14
-		assertThat(view.getChildCount()).isEqualTo(count);
15
-
16
-		final List<View> children = new ArrayList<>(count);
17
-		for (int i = 0; i < count; i++) {
18
-			children.add(view.getChildAt(i));
19
-		}
20
-		return children;
21
-	}
22
-
23
-	public static void assertViewChildren(ViewGroup view, View... children) {
24
-		final List<View> childViews = assertViewChildrenCount(view, children.length);
25
-		assertThat(childViews).isEqualTo(Arrays.asList(children));
26
-	}
27
-}

+ 3
- 2
lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactNativeHost.java Просмотреть файл

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

+ 5
- 12
lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationModuleTest.java Просмотреть файл

@@ -5,7 +5,6 @@ import com.facebook.react.bridge.ReactApplicationContext;
5 5
 import com.facebook.react.bridge.ReactMethod;
6 6
 import com.reactnativenavigation.BaseTest;
7 7
 import com.reactnativenavigation.NavigationActivity;
8
-import com.reactnativenavigation.NavigationApplication;
9 8
 import com.reactnativenavigation.controllers.CommandsHandler;
10 9
 
11 10
 import org.json.JSONObject;
@@ -28,29 +27,24 @@ public class NavigationModuleTest extends BaseTest {
28 27
 
29 28
 	private NavigationModule uut;
30 29
 	private ReactApplicationContext mockReactApplicationContext;
30
+	private CommandsHandler commandsHandler;
31 31
 
32 32
 	@Before
33 33
 	public void beforeEach() {
34 34
 		mockReactApplicationContext = mock(ReactApplicationContext.class);
35
-		uut = new NavigationModule(mockReactApplicationContext);
36
-	}
37
-
38
-	@Test
39
-	public void bridgeModule() throws Exception {
40
-		assertThat(uut.getName()).isEqualTo("RNNBridgeModule");
35
+		commandsHandler = mock(CommandsHandler.class);
36
+		uut = new NavigationModule(mockReactApplicationContext, commandsHandler);
41 37
 	}
42 38
 
43 39
 	@Test
44 40
 	public void allReactMethodsProtectAgainstNullActivity() throws Exception {
45
-		NavigationApplication.instance.getConfig().commandsHandler = mock(CommandsHandler.class);
46
-
47 41
 		assertThat(uut.activity()).isNull();
48 42
 
49 43
 		for (Method method : NavigationModule.class.getDeclaredMethods()) {
50 44
 			if (method.getAnnotation(ReactMethod.class) != null) {
51 45
 				Object[] args = new Object[method.getParameterTypes().length];
52 46
 				method.invoke(uut, args);
53
-				verifyZeroInteractions(NavigationApplication.instance.getConfig().commandsHandler);
47
+				verifyZeroInteractions(commandsHandler);
54 48
 			}
55 49
 		}
56 50
 	}
@@ -58,13 +52,12 @@ public class NavigationModuleTest extends BaseTest {
58 52
 	@SuppressWarnings("unchecked")
59 53
 	@Test
60 54
 	public void parsesArgumentsIntoMap() throws Exception {
61
-		NavigationApplication.instance.getConfig().commandsHandler = mock(CommandsHandler.class);
62 55
 		when(mockReactApplicationContext.getCurrentActivity()).thenReturn(Robolectric.buildActivity(NavigationActivity.class).get());
63 56
 		JavaOnlyMap input = new JavaOnlyMap();
64 57
 		input.putString("key", "value");
65 58
 		uut.setRoot(input);
66 59
 		ArgumentCaptor<JSONObject> captor = ArgumentCaptor.forClass(JSONObject.class);
67
-		verify(NavigationApplication.instance.getConfig().commandsHandler, times(1)).setRoot((NavigationActivity) any(), captor.capture());
60
+		verify(commandsHandler, times(1)).setRoot((NavigationActivity) any(), captor.capture());
68 61
 		assertThat(captor.getAllValues()).hasSize(1);
69 62
 		assertThat(captor.getValue()).isNotNull();
70 63
 	}

+ 0
- 42
lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationReactRootViewCreatorTest.java Просмотреть файл

@@ -1,42 +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.ReactRootView;
8
-import com.reactnativenavigation.BaseTest;
9
-
10
-import org.assertj.core.api.Condition;
11
-import org.junit.Test;
12
-import org.robolectric.Robolectric;
13
-
14
-import java.lang.reflect.Method;
15
-
16
-import static org.assertj.core.api.Java6Assertions.assertThat;
17
-
18
-public class NavigationReactRootViewCreatorTest extends BaseTest {
19
-	@Test
20
-	public void createsReactRootView() throws Exception {
21
-		NavigationReactRootViewCreator uut = new NavigationReactRootViewCreator();
22
-		View result = uut.create(Robolectric.buildActivity(Activity.class).get(), "the container id", "the container name");
23
-		assertThat(result).isNotNull().isInstanceOf(ReactRootView.class);
24
-	}
25
-
26
-	@Test
27
-	public void startReactContainer() throws Exception {
28
-		NavigationReactRootViewCreator uut = new NavigationReactRootViewCreator();
29
-		ReactRootView result = (ReactRootView) uut.create(Robolectric.buildActivity(Activity.class).get(), "the container id", "the container name");
30
-		Method getJSModuleName = ReactRootView.class.getDeclaredMethod("getJSModuleName");
31
-		Method getLaunchOptions = ReactRootView.class.getDeclaredMethod("getLaunchOptions");
32
-		getJSModuleName.setAccessible(true);
33
-		getLaunchOptions.setAccessible(true);
34
-		assertThat(getJSModuleName.invoke(result)).isEqualTo("the container name");
35
-		assertThat(getLaunchOptions.invoke(result)).isNotNull().isInstanceOf(Bundle.class).has(new Condition<Object>() {
36
-			@Override
37
-			public boolean matches(final Object value) {
38
-				return ((Bundle) value).getString("id").equals("the container id");
39
-			}
40
-		});
41
-	}
42
-}