react-native-navigation 7.24.3 → 7.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/lib/android/app/build.gradle +12 -9
  2. package/lib/android/app/src/main/java/com/reactnativenavigation/options/Options.java +2 -0
  3. package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutInsets.kt +44 -0
  4. package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutOptions.kt +71 -0
  5. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/PrimitiveExt.kt +9 -0
  6. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +4 -3
  7. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java +5 -0
  8. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +23 -7
  9. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java +12 -3
  10. package/lib/dist/src/interfaces/Options.d.ts +10 -0
  11. package/lib/ios/RNNBasePresenter.m +17 -0
  12. package/lib/ios/RNNBottomTabsController.m +1 -0
  13. package/lib/ios/RNNBridgeManager.mm +5 -3
  14. package/lib/ios/RNNComponentViewController.m +5 -0
  15. package/lib/ios/RNNLayoutOptions.h +2 -1
  16. package/lib/ios/RNNLayoutOptions.m +4 -0
  17. package/lib/ios/RNNModalHostViewManagerHandler.h +11 -0
  18. package/lib/ios/RNNModalHostViewManagerHandler.m +40 -0
  19. package/lib/ios/RNNModalManager.h +2 -2
  20. package/lib/ios/RNNModalManager.m +0 -26
  21. package/lib/ios/RNNStackPresenter.m +1 -0
  22. package/lib/ios/ReactNativeNavigation.xcodeproj/project.pbxproj +8 -0
  23. package/lib/src/interfaces/Options.ts +12 -0
  24. package/package.json +3 -1
  25. package/.buildkite/pipeline.yml +0 -59
  26. package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java +0 -48
  27. package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +0 -178
  28. package/lib/android/app/src/test/java/com/reactnativenavigation/EnvironmentTest.java +0 -43
  29. package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +0 -23
  30. package/lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java +0 -35
  31. package/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +0 -62
  32. package/lib/android/app/src/test/java/com/reactnativenavigation/fakes/IconResolverFake.kt +0 -8
  33. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/BackDrawable.java +0 -30
  34. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +0 -49
  35. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +0 -18
  36. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleComponentViewController.java +0 -15
  37. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleOverlay.java +0 -54
  38. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleViewController.java +0 -113
  39. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +0 -79
  40. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentViewCreator.java +0 -18
  41. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactView.java +0 -71
  42. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarButtonCreatorMock.java +0 -34
  43. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarReactViewCreatorMock.java +0 -20
  44. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TopBarBackgroundViewCreatorMock.java +0 -20
  45. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +0 -21
  46. package/lib/android/app/src/test/java/com/reactnativenavigation/options/LayoutNodeParserTest.java +0 -51
  47. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OptionsTest.java +0 -315
  48. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OrientationOptionsTest.java +0 -81
  49. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TopBarButtonsTest.kt +0 -95
  50. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +0 -122
  51. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/BoolParserTest.java +0 -28
  52. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +0 -50
  53. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/JSONParserTest.java +0 -64
  54. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +0 -56
  55. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +0 -59
  56. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/SideMenuPresenterTest.java +0 -35
  57. package/lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationModuleTest.java +0 -102
  58. package/lib/android/app/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java +0 -24
  59. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/AnimationHelper.kt +0 -33
  60. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonPresenterTest.java +0 -241
  61. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonSpanTest.java +0 -57
  62. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/CompatUtilsTest.java +0 -17
  63. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +0 -78
  64. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +0 -47
  65. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/NativeCommandListenerTest.java +0 -60
  66. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/OptionHelper.java +0 -16
  67. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ReflectionUtilsTest.java +0 -26
  68. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/StringUtilsTest.java +0 -19
  69. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/SystemUiUtilsTest.kt +0 -27
  70. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleAndButtonsMeasurerTest.kt +0 -357
  71. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleBarHelper.java +0 -54
  72. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +0 -29
  73. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +0 -22
  74. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ViewHelper.java +0 -9
  75. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/OptionsApplyingTest.java +0 -149
  76. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +0 -206
  77. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +0 -62
  78. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +0 -589
  79. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +0 -173
  80. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AfterInitialTabTest.java +0 -38
  81. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +0 -86
  82. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTabTest.java +0 -31
  83. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/TogetherTest.java +0 -20
  84. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/button/NavigationIconResolverTest.java +0 -78
  85. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +0 -80
  86. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +0 -56
  87. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +0 -216
  88. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewControllerTest.java +0 -97
  89. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/FragmentCreatorMock.java +0 -34
  90. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/SomeFragment.java +0 -8
  91. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +0 -33
  92. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorMock.java +0 -40
  93. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +0 -213
  94. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +0 -319
  95. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +0 -367
  96. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +0 -898
  97. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +0 -254
  98. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +0 -108
  99. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +0 -299
  100. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +0 -446
  101. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +0 -77
  102. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/FloatingActionButtonTest.java +0 -154
  103. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/IdStackTest.java +0 -114
  104. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +0 -241
  105. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +0 -1165
  106. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +0 -1081
  107. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarButtonControllerTest.java +0 -61
  108. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarReactViewControllerTest.java +0 -43
  109. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarButtonControllerTest.java +0 -120
  110. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +0 -432
  111. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +0 -249
  112. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +0 -337
  113. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java +0 -68
  114. package/lib/android/app/src/test/java/com/reactnativenavigation/views/OverlayTouchDelegateTest.java +0 -60
  115. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +0 -477
  116. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TopBarTest.java +0 -82
  117. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +0 -109
  118. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/DefaultViewAnimatorCreatorFake.kt +0 -36
  119. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +0 -101
  120. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +0 -40
  121. package/lib/android/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +0 -1
@@ -180,6 +180,18 @@ export interface OptionsLayout {
180
180
  * #### (iOS specific)
181
181
  */
182
182
  autoHideHomeIndicator?: boolean;
183
+
184
+ /**
185
+ * Add insets to the top layout
186
+ */
187
+ insets?: Insets;
188
+
189
+ /**
190
+ * Resizes the layout when keyboard is visible
191
+ * @default true
192
+ * #### (Android specific)
193
+ */
194
+ adjustResize?: boolean;
183
195
  }
184
196
 
185
197
  export enum OptionsModalPresentationStyle {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-navigation",
3
- "version": "7.24.3",
3
+ "version": "7.25.1",
4
4
  "description": "React Native Navigation - truly native navigation for iOS and Android",
5
5
  "license": "MIT",
6
6
  "nativePackage": true,
@@ -66,6 +66,8 @@
66
66
  "tslib": "1.9.3"
67
67
  },
68
68
  "devDependencies": {
69
+ "pixelmatch": "^5.2.1",
70
+ "pngjs": "^6.0.0",
69
71
  "@babel/plugin-proposal-export-default-from": "7.10.1",
70
72
  "@babel/plugin-proposal-export-namespace-from": "7.10.1",
71
73
  "@babel/types": "7.15.6",
@@ -1,59 +0,0 @@
1
- steps:
2
- - block: ":rocket: Release!"
3
- prompt: "Fill out the details for release"
4
- if: 'build.message =~ /^release\$/i'
5
- fields:
6
- - text: "VERSION"
7
- key: "version"
8
- - text: "NPM_TAG"
9
- key: "npm-tag"
10
- default: 'null'
11
- required: false
12
- - text: "BUILD_DOCUMENTATION_VERSION"
13
- key: "build-documentation-version"
14
- default: 'null'
15
- hint: 'Leave NULL if no version is specified'
16
- - text: "REMOVE_DOCUMENTATION_VERSION"
17
- key: "remove-documentation-version"
18
- default: 'null'
19
- hint: 'Leave NULL if no version is specified'
20
-
21
- - label: ":android: Android"
22
- command:
23
- - "nvm install"
24
- - "npm install"
25
- - "npm run test-js"
26
- - "npm run test-unit-android -- --release"
27
- - "npm run test-e2e-android-multi -- --release --headless --verbose --ci"
28
- key: "android_build"
29
- timeout_in_minutes: 90
30
-
31
- - label: ":ios: iOS - Unit"
32
- command:
33
- - "nvm install"
34
- - "npm install"
35
- - "npm run test-unit-ios -- --release"
36
- key: "ios_unit"
37
- timeout_in_minutes: 90
38
-
39
- - label: ":ios: iOS - E2E"
40
- command:
41
- - "nvm install"
42
- - "npm install"
43
- - "npm run test-snapshot-ios -- --release"
44
- - "npm run test-e2e-ios -- --release --multi --ci"
45
- key: "ios_e2e"
46
- timeout_in_minutes: 90
47
-
48
- - label: ":package: Publish"
49
- env:
50
- if: "build.pull_request.id == null"
51
- command:
52
- - "nvm install"
53
- - "npm install"
54
- - "npm run release"
55
- depends_on:
56
- - "android_build"
57
- - "ios_unit"
58
- - "ios_e2e"
59
- timeout_in_minutes: 90
@@ -1,48 +0,0 @@
1
- package com.reactnativenavigation.options;
2
-
3
- import android.content.Context;
4
-
5
- import com.reactnativenavigation.options.params.NullNumber;
6
- import com.reactnativenavigation.options.params.Number;
7
- import com.reactnativenavigation.options.params.ThemeColour;
8
- import com.reactnativenavigation.options.params.NullThemeColour;
9
- import com.reactnativenavigation.options.parsers.NumberParser;
10
-
11
- import org.json.JSONObject;
12
-
13
- public class LayoutOptions {
14
- public static LayoutOptions parse(Context context, JSONObject json) {
15
- LayoutOptions result = new LayoutOptions();
16
- if (json == null) return result;
17
-
18
- result.backgroundColor = ThemeColour.parse(context, json.optJSONObject("backgroundColor"));
19
- result.componentBackgroundColor = ThemeColour.parse(context, json.optJSONObject("componentBackgroundColor"));
20
- result.topMargin = NumberParser.parse(json, "topMargin");
21
- result.orientation = OrientationOptions.parse(json);
22
- result.direction = LayoutDirection.fromString(json.optString("direction", ""));
23
-
24
- return result;
25
- }
26
-
27
- public ThemeColour backgroundColor = new NullThemeColour();
28
- public ThemeColour componentBackgroundColor = new NullThemeColour();
29
- public Number topMargin = new NullNumber();
30
- public OrientationOptions orientation = new OrientationOptions();
31
- public LayoutDirection direction = LayoutDirection.DEFAULT;
32
-
33
- public void mergeWith(LayoutOptions other) {
34
- if (other.backgroundColor.hasValue()) backgroundColor = other.backgroundColor;
35
- if (other.componentBackgroundColor.hasValue()) componentBackgroundColor = other.componentBackgroundColor;
36
- if (other.topMargin.hasValue()) topMargin = other.topMargin;
37
- if (other.orientation.hasValue()) orientation = other.orientation;
38
- if (other.direction.hasValue()) direction = other.direction;
39
- }
40
-
41
- public void mergeWithDefault(LayoutOptions defaultOptions) {
42
- if (!backgroundColor.hasValue()) backgroundColor = defaultOptions.backgroundColor;
43
- if (!componentBackgroundColor.hasValue()) componentBackgroundColor = defaultOptions.componentBackgroundColor;
44
- if (!topMargin.hasValue()) topMargin = defaultOptions.topMargin;
45
- if (!orientation.hasValue()) orientation = defaultOptions.orientation;
46
- if (!direction.hasValue()) direction = defaultOptions.direction;
47
- }
48
- }
@@ -1,178 +0,0 @@
1
- package com.reactnativenavigation;
2
-
3
- import static com.reactnativenavigation.utils.CollectionUtils.forEach;
4
- import static org.assertj.core.api.Java6Assertions.assertThat;
5
- import static org.mockito.ArgumentMatchers.any;
6
- import static org.mockito.Mockito.mock;
7
- import static org.mockito.Mockito.when;
8
-
9
- import android.app.Activity;
10
- import android.content.Context;
11
- import android.content.res.Configuration;
12
- import android.content.res.Resources;
13
- import android.os.Handler;
14
- import android.os.Looper;
15
- import android.view.View;
16
- import android.view.ViewGroup;
17
-
18
- import androidx.annotation.CallSuper;
19
- import androidx.appcompat.app.AppCompatActivity;
20
- import androidx.coordinatorlayout.widget.CoordinatorLayout;
21
-
22
- import com.reactnativenavigation.options.params.Bool;
23
- import com.reactnativenavigation.utils.Functions;
24
- import com.reactnativenavigation.utils.SystemUiUtils;
25
- import com.reactnativenavigation.utils.ViewUtils;
26
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
27
-
28
- import org.junit.After;
29
- import org.junit.Before;
30
- import org.junit.runner.RunWith;
31
- import org.mockito.ArgumentMatchers;
32
- import org.mockito.MockedStatic;
33
- import org.mockito.Mockito;
34
- import org.robolectric.Robolectric;
35
- import org.robolectric.RobolectricTestRunner;
36
- import org.robolectric.Shadows;
37
- import org.robolectric.android.controller.ActivityController;
38
- import org.robolectric.annotation.Config;
39
- import org.robolectric.shadows.ShadowLooper;
40
-
41
- import java.util.Arrays;
42
-
43
- @RunWith(RobolectricTestRunner.class)
44
- @Config(sdk = 28, application = TestApplication.class)
45
- public abstract class BaseTest {
46
- private final Handler handler = new Handler(Looper.getMainLooper());
47
- private final ShadowLooper shadowMainLooper = Shadows.shadowOf(Looper.getMainLooper());
48
- protected Configuration mockConfiguration;
49
-
50
- @Before
51
- public void beforeEach() {
52
- NavigationApplication.instance = Mockito.mock(NavigationApplication.class);
53
- mockConfiguration = Mockito.mock(Configuration.class);
54
- Resources res = mock(Resources.class);
55
- mockConfiguration.uiMode = Configuration.UI_MODE_NIGHT_NO;
56
- when(res.getConfiguration()).thenReturn(mockConfiguration);
57
- when(NavigationApplication.instance.getResources()).thenReturn(res);
58
- when(res.getColor(ArgumentMatchers.anyInt())).thenReturn(0x00000);
59
- when(res.getColor(ArgumentMatchers.anyInt(),any())).thenReturn(0x00000);
60
- }
61
-
62
-
63
- public void mockSystemUiUtils(int statusBarHeight, int statusBarHeightDp, Functions.Func1<MockedStatic<SystemUiUtils>> mockedBlock) {
64
- try (MockedStatic<SystemUiUtils> theMock = Mockito.mockStatic(SystemUiUtils.class)) {
65
- theMock.when(() -> {
66
- SystemUiUtils.getStatusBarHeight(any());
67
- }).thenReturn(statusBarHeight);
68
- theMock.when(() -> {
69
- SystemUiUtils.getStatusBarHeightDp(any());
70
- }).thenReturn(statusBarHeightDp);
71
- mockedBlock.run(theMock);
72
- }
73
- }
74
-
75
- @After
76
- @CallSuper
77
- public void afterEach() {
78
- idleMainLooper();
79
- }
80
-
81
- public Activity newActivity() {
82
- return Robolectric.setupActivity(AppCompatActivity.class);
83
- }
84
-
85
- public <T extends AppCompatActivity> ActivityController<T> newActivityController(Class<T> clazz) {
86
- return Robolectric.buildActivity(clazz);
87
- }
88
-
89
- public void assertIsChild(ViewGroup parent, ViewController<?>... children) {
90
- forEach(Arrays.asList(children), c -> assertIsChild(parent, c.getView()));
91
- }
92
-
93
- public void assertIsChild(ViewGroup parent, View child) {
94
- assertThat(parent).isNotNull();
95
- assertThat(child).isNotNull();
96
- assertThat(ViewUtils.isChildOf(parent, child)).isTrue();
97
- }
98
-
99
- public void assertNotChildOf(ViewGroup parent, ViewController<?>... children) {
100
- forEach(Arrays.asList(children), c -> assertNotChildOf(parent, c.getView()));
101
- }
102
-
103
- public void assertNotChildOf(ViewGroup parent, View child) {
104
- assertThat(parent).isNotNull();
105
- assertThat(child).isNotNull();
106
- assertThat(ViewUtils.isChildOf(parent, child)).isFalse();
107
- }
108
-
109
- public void assertMatchParent(View view) {
110
- assertThat(view.getLayoutParams().width).isEqualTo(ViewGroup.LayoutParams.MATCH_PARENT);
111
- assertThat(view.getLayoutParams().height).isEqualTo(ViewGroup.LayoutParams.MATCH_PARENT);
112
- }
113
-
114
- protected void disablePushAnimation(ViewController<?>... controllers) {
115
- for (ViewController<?> controller : controllers) {
116
- controller.options.animations.push.enabled = new Bool(false);
117
- }
118
- }
119
-
120
- protected void disablePopAnimation(ViewController<?>... controllers) {
121
- for (ViewController<?> controller : controllers) {
122
- controller.options.animations.pop.enabled = new Bool(false);
123
- }
124
- }
125
-
126
- protected void disableModalAnimations(ViewController<?>... modals) {
127
- disableShowModalAnimation(modals);
128
- disableDismissModalAnimation(modals);
129
- }
130
-
131
- protected void disableShowModalAnimation(ViewController<?>... modals) {
132
- for (ViewController<?> modal : modals) {
133
- modal.options.animations.showModal.toggle(new Bool(false));
134
- }
135
- }
136
-
137
- protected void disableDismissModalAnimation(ViewController<?>... modals) {
138
- for (ViewController<?> modal : modals) {
139
- modal.options.animations.dismissModal.toggle(new Bool(false));
140
- }
141
- }
142
-
143
- protected void dispatchPreDraw(View view) {
144
- view.getViewTreeObserver().dispatchOnPreDraw();
145
- }
146
-
147
- protected void dispatchOnGlobalLayout(View view) {
148
- view.getViewTreeObserver().dispatchOnGlobalLayout();
149
- }
150
-
151
- protected void addToParent(Context context, ViewController<?>... controllers) {
152
- for (ViewController<?> controller : controllers) {
153
- new CoordinatorLayout(context).addView(controller.getView());
154
- }
155
- }
156
-
157
- protected View mockView(Activity activity) {
158
- View mock = Mockito.mock(View.class);
159
- when(mock.getContext()).thenReturn(activity);
160
- return mock;
161
- }
162
-
163
- protected void assertVisible(View view) {
164
- assertThat(view.getVisibility()).isEqualTo(View.VISIBLE);
165
- }
166
-
167
- protected void assertGone(View view) {
168
- assertThat(view.getVisibility()).isEqualTo(View.GONE);
169
- }
170
-
171
- protected void post(Runnable runnable) {
172
- handler.post(runnable);
173
- }
174
-
175
- protected void idleMainLooper() {
176
- shadowMainLooper.idle();
177
- }
178
- }
@@ -1,43 +0,0 @@
1
- package com.reactnativenavigation;
2
-
3
- import com.google.android.material.floatingactionbutton.FloatingActionButton;
4
- import androidx.appcompat.app.AppCompatActivity;
5
-
6
- import com.facebook.react.common.*;
7
-
8
- import org.junit.*;
9
- import org.robolectric.*;
10
-
11
- import static org.assertj.core.api.Java6Assertions.*;
12
-
13
- public class EnvironmentTest extends BaseTest {
14
- @Test
15
- public void assertJ() {
16
- assertThat(1 + 2).isEqualTo(3).isGreaterThan(2).isLessThan(4).isNotNegative().isPositive().isNotZero();
17
- }
18
-
19
- @Test
20
- public void react() {
21
- assertThat(ReactConstants.TAG).isNotEmpty();
22
- }
23
-
24
- @Test
25
- public void supportV7AppCompat() {
26
- assertThat(AppCompatActivity.class).isNotNull();
27
- }
28
-
29
- @Test
30
- public void supportDesign() {
31
- assertThat(FloatingActionButton.class).isNotNull();
32
- }
33
-
34
- @Test
35
- public void androidR() {
36
- assertThat(R.string.bottom_sheet_behavior).isNotZero();
37
- }
38
-
39
- @Test
40
- public void ableToLoadApplication() throws Exception {
41
- assertThat(RuntimeEnvironment.application).isNotNull();
42
- }
43
- }
@@ -1,23 +0,0 @@
1
- package com.reactnativenavigation;
2
-
3
- import com.reactnativenavigation.react.ReactGateway;
4
- import com.reactnativenavigation.viewcontrollers.navigator.Navigator;
5
-
6
- import org.mockito.Mockito;
7
-
8
- public class TestActivity extends NavigationActivity {
9
-
10
- @Override
11
- public ReactGateway getReactGateway() {
12
- return Mockito.mock(ReactGateway.class);
13
- }
14
-
15
- public void setNavigator(Navigator navigator) {
16
- this.navigator = navigator;
17
- }
18
-
19
- @Override
20
- public void onBackPressed() {
21
- super.onBackPressed();
22
- }
23
- }
@@ -1,35 +0,0 @@
1
- package com.reactnativenavigation;
2
-
3
- import android.app.*;
4
-
5
- import com.facebook.react.ReactApplication;
6
- import com.facebook.react.ReactNativeHost;
7
- import com.facebook.react.ReactPackage;
8
-
9
- import java.util.Collections;
10
- import java.util.List;
11
-
12
- public class TestApplication extends Application implements ReactApplication {
13
- private final ReactNativeHost host = new ReactNativeHost(this) {
14
- @Override
15
- public boolean getUseDeveloperSupport() {
16
- return true;
17
- }
18
-
19
- @Override
20
- protected List<ReactPackage> getPackages() {
21
- return Collections.emptyList();
22
- }
23
- };
24
-
25
- @Override
26
- public void onCreate() {
27
- super.onCreate();
28
- setTheme(R.style.Theme_AppCompat);
29
- }
30
-
31
- @Override
32
- public ReactNativeHost getReactNativeHost() {
33
- return host;
34
- }
35
- }
@@ -1,62 +0,0 @@
1
- package com.reactnativenavigation;
2
-
3
- import android.app.Activity;
4
- import android.content.Context;
5
- import android.view.View;
6
- import android.view.ViewGroup;
7
-
8
- import androidx.annotation.NonNull;
9
-
10
- import com.reactnativenavigation.mocks.TitleBarReactViewCreatorMock;
11
- import com.reactnativenavigation.mocks.TopBarBackgroundViewCreatorMock;
12
- import com.reactnativenavigation.mocks.TitleBarButtonCreatorMock;
13
- import com.reactnativenavigation.mocks.TypefaceLoaderMock;
14
- import com.reactnativenavigation.options.Options;
15
- import com.reactnativenavigation.options.params.Bool;
16
- import com.reactnativenavigation.utils.RenderChecker;
17
- import com.reactnativenavigation.viewcontrollers.stack.StackPresenter;
18
- import com.reactnativenavigation.react.events.EventEmitter;
19
- import com.reactnativenavigation.utils.CompatUtils;
20
- import com.reactnativenavigation.utils.ImageLoader;
21
- import com.reactnativenavigation.utils.UiUtils;
22
- import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
23
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
24
- import com.reactnativenavigation.viewcontrollers.stack.topbar.button.IconResolver;
25
- import com.reactnativenavigation.viewcontrollers.stack.StackControllerBuilder;
26
- import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarController;
27
- import com.reactnativenavigation.views.stack.StackLayout;
28
- import com.reactnativenavigation.views.stack.topbar.TopBar;
29
-
30
- import org.mockito.Mockito;
31
-
32
- public class TestUtils {
33
- public static StackControllerBuilder newStackController(Activity activity) {
34
- TopBarController topBarController = new TopBarController() {
35
- @Override
36
- protected TopBar createTopBar(@NonNull Context context, @NonNull StackLayout stackLayout) {
37
- TopBar topBar = super.createTopBar(context, stackLayout);
38
- topBar.layout(0, 0, 1000, UiUtils.getTopBarHeight(context));
39
- return topBar;
40
- }
41
- };
42
- return new StackControllerBuilder(activity, Mockito.mock(EventEmitter.class))
43
- .setId("stack" + CompatUtils.generateViewId())
44
- .setChildRegistry(new ChildControllersRegistry())
45
- .setTopBarController(topBarController)
46
- .setStackPresenter(new StackPresenter(activity, new TitleBarReactViewCreatorMock(), new TopBarBackgroundViewCreatorMock(), new TitleBarButtonCreatorMock(), new IconResolver(activity, new ImageLoader()), new TypefaceLoaderMock(), new RenderChecker(), new Options()))
47
- .setInitialOptions(new Options());
48
- }
49
-
50
- public static void hideBackButton(ViewController<?> viewController) {
51
- viewController.options.topBar.buttons.back.visible = new Bool(false);
52
- }
53
-
54
- public static <T extends View> T spyOn(T child) {
55
- ViewGroup parent = (ViewGroup) child.getParent();
56
- int indexOf = parent.indexOfChild(child);
57
- parent.removeView(child);
58
- T spy = Mockito.spy(child);
59
- parent.addView(spy, indexOf);
60
- return spy;
61
- }
62
- }
@@ -1,8 +0,0 @@
1
- package com.reactnativenavigation.fakes
2
-
3
- import android.app.Activity
4
- import com.reactnativenavigation.mocks.ImageLoaderMock
5
- import com.reactnativenavigation.utils.ImageLoader
6
- import com.reactnativenavigation.viewcontrollers.stack.topbar.button.IconResolver
7
-
8
- class IconResolverFake(activity: Activity, imageLoader: ImageLoader = ImageLoaderMock.mock()) : IconResolver(activity, imageLoader)
@@ -1,30 +0,0 @@
1
- package com.reactnativenavigation.mocks;
2
-
3
- import android.graphics.Canvas;
4
- import android.graphics.ColorFilter;
5
- import android.graphics.drawable.Drawable;
6
-
7
- import androidx.annotation.NonNull;
8
- import androidx.annotation.Nullable;
9
-
10
- public class BackDrawable extends Drawable {
11
- @Override
12
- public void draw(@NonNull Canvas canvas) {
13
-
14
- }
15
-
16
- @Override
17
- public void setAlpha(int alpha) {
18
-
19
- }
20
-
21
- @Override
22
- public void setColorFilter(@Nullable ColorFilter colorFilter) {
23
-
24
- }
25
-
26
- @Override
27
- public int getOpacity() {
28
- return 0;
29
- }
30
- }
@@ -1,49 +0,0 @@
1
- package com.reactnativenavigation.mocks
2
-
3
- import android.graphics.Canvas
4
- import android.graphics.ColorFilter
5
- import android.graphics.drawable.Drawable
6
-
7
- import com.reactnativenavigation.utils.ImageLoader
8
- import com.reactnativenavigation.utils.ImageLoader.ImagesLoadingListener
9
- import org.mockito.Mockito.doAnswer
10
- import org.mockito.kotlin.any
11
- import org.mockito.kotlin.mock
12
- import org.mockito.kotlin.whenever
13
- import java.util.*
14
-
15
- object ImageLoaderMock {
16
- val mockDrawable: Drawable = object : Drawable() {
17
- override fun draw(canvas: Canvas) {}
18
- override fun setAlpha(alpha: Int) {}
19
- override fun setColorFilter(colorFilter: ColorFilter?) {}
20
- override fun getOpacity(): Int {
21
- return 0
22
- }
23
- }
24
- private val backIcon: Drawable = BackDrawable()
25
-
26
- @JvmStatic
27
- fun mock(): ImageLoader {
28
- return this.mock(mockDrawable)
29
- }
30
-
31
- @JvmStatic
32
- fun mock(returnDrawable: Drawable = mockDrawable): ImageLoader {
33
- val imageLoader = mock<ImageLoader>()
34
- doAnswer { invocation ->
35
- val urlCount = (invocation.arguments[1] as Collection<*>).size
36
- val drawables = Collections.nCopies(urlCount, returnDrawable)
37
- (invocation.arguments[2] as ImagesLoadingListener).onComplete(drawables)
38
- null
39
- }.`when`(imageLoader).loadIcons(any(), any(), any())
40
-
41
- doAnswer { invocation ->
42
- (invocation.arguments[2] as ImagesLoadingListener).onComplete(returnDrawable)
43
- null
44
- }.`when`(imageLoader).loadIcon(any(), any(), any())
45
-
46
- whenever(imageLoader.getBackButtonIcon(any())).thenReturn(backIcon)
47
- return imageLoader
48
- }
49
- }
@@ -1,18 +0,0 @@
1
- package com.reactnativenavigation.mocks
2
-
3
- import android.view.ViewGroup
4
-
5
- import com.reactnativenavigation.options.Options
6
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
7
- import org.mockito.kotlin.mock
8
- import org.mockito.kotlin.whenever
9
-
10
- object Mocks {
11
- fun viewController(): ViewController<*> {
12
- val mock = mock<ViewController<*>>()
13
- whenever(mock.resolveCurrentOptions()).thenReturn(Options.EMPTY)
14
- val view = mock<ViewGroup>()
15
- whenever(mock.view).thenReturn(view)
16
- return mock
17
- }
18
- }
@@ -1,15 +0,0 @@
1
- package com.reactnativenavigation.mocks;
2
-
3
- import android.app.*;
4
-
5
- import com.reactnativenavigation.options.*;
6
- import com.reactnativenavigation.viewcontrollers.component.ComponentPresenter;
7
- import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
8
- import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
9
- import com.reactnativenavigation.viewcontrollers.component.ComponentViewController;
10
-
11
- public class SimpleComponentViewController extends ComponentViewController {
12
- public SimpleComponentViewController(Activity activity, ChildControllersRegistry childRegistry, String id, Options initialOptions) {
13
- super(activity, childRegistry,id, "theComponentName", new TestComponentViewCreator(), initialOptions, new Presenter(activity, new Options()), new ComponentPresenter(Options.EMPTY));
14
- }
15
- }
@@ -1,54 +0,0 @@
1
- package com.reactnativenavigation.mocks;
2
-
3
- import android.content.Context;
4
- import android.view.MotionEvent;
5
- import android.view.ViewGroup;
6
- import android.widget.FrameLayout;
7
- import android.widget.RelativeLayout;
8
-
9
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ScrollEventListener;
10
- import com.reactnativenavigation.viewcontrollers.viewcontroller.IReactView;
11
-
12
- public class SimpleOverlay extends RelativeLayout implements IReactView {
13
- public SimpleOverlay(Context context) {
14
- super(context);
15
- }
16
-
17
- @Override
18
- public boolean isReady() {
19
- return true;
20
- }
21
-
22
- @Override
23
- public ViewGroup asView() {
24
- FrameLayout root = new FrameLayout(getContext());
25
- FrameLayout overlay = new FrameLayout(getContext());
26
- root.addView(overlay);
27
- return root;
28
- }
29
-
30
- @Override
31
- public void destroy() {
32
-
33
- }
34
-
35
- @Override
36
- public void sendOnNavigationButtonPressed(String buttonId) {
37
-
38
- }
39
-
40
- @Override
41
- public ScrollEventListener getScrollEventListener() {
42
- return null;
43
- }
44
-
45
- @Override
46
- public void dispatchTouchEventToJs(MotionEvent event) {
47
-
48
- }
49
-
50
- @Override
51
- public boolean isRendered() {
52
- return getChildCount() >= 1;
53
- }
54
- }