react-native-navigation 7.24.0 → 7.24.3-snapshot.492

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 (113) hide show
  1. package/lib/Mock/Components/ComponentScreen.tsx +1 -1
  2. package/lib/Mock/Components/NavigationButton.tsx +1 -1
  3. package/lib/Mock/Components/TopBar.tsx +6 -2
  4. package/lib/android/app/build.gradle +12 -9
  5. package/lib/android/app/src/main/java/com/reactnativenavigation/react/ReactView.java +13 -9
  6. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt +3 -2
  7. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +1 -0
  8. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +2 -0
  9. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +4 -6
  10. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +2 -4
  11. package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabs.java +6 -0
  12. package/lib/dist/Mock/Components/ComponentScreen.js +2 -2
  13. package/lib/dist/Mock/Components/NavigationButton.d.ts +1 -1
  14. package/lib/dist/Mock/Components/NavigationButton.js +3 -3
  15. package/lib/dist/Mock/Components/TopBar.d.ts +1 -2
  16. package/lib/dist/Mock/Components/TopBar.js +3 -3
  17. package/lib/ios/RNNComponentRootView.m +0 -14
  18. package/package.json +1 -1
  19. package/.buildkite/pipeline.yml +0 -59
  20. package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +0 -178
  21. package/lib/android/app/src/test/java/com/reactnativenavigation/EnvironmentTest.java +0 -43
  22. package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +0 -23
  23. package/lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java +0 -35
  24. package/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +0 -62
  25. package/lib/android/app/src/test/java/com/reactnativenavigation/fakes/IconResolverFake.kt +0 -8
  26. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/BackDrawable.java +0 -30
  27. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +0 -49
  28. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +0 -18
  29. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleComponentViewController.java +0 -15
  30. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleOverlay.java +0 -54
  31. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleViewController.java +0 -113
  32. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +0 -79
  33. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentViewCreator.java +0 -18
  34. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactView.java +0 -71
  35. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarButtonCreatorMock.java +0 -34
  36. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarReactViewCreatorMock.java +0 -20
  37. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TopBarBackgroundViewCreatorMock.java +0 -20
  38. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +0 -21
  39. package/lib/android/app/src/test/java/com/reactnativenavigation/options/LayoutNodeParserTest.java +0 -51
  40. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OptionsTest.java +0 -315
  41. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OrientationOptionsTest.java +0 -81
  42. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TopBarButtonsTest.kt +0 -95
  43. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +0 -122
  44. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/BoolParserTest.java +0 -28
  45. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +0 -50
  46. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/JSONParserTest.java +0 -64
  47. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +0 -56
  48. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +0 -59
  49. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/SideMenuPresenterTest.java +0 -35
  50. package/lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationModuleTest.java +0 -102
  51. package/lib/android/app/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java +0 -24
  52. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/AnimationHelper.kt +0 -33
  53. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonPresenterTest.java +0 -241
  54. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonSpanTest.java +0 -57
  55. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/CompatUtilsTest.java +0 -17
  56. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +0 -78
  57. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +0 -47
  58. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/NativeCommandListenerTest.java +0 -60
  59. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/OptionHelper.java +0 -16
  60. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ReflectionUtilsTest.java +0 -26
  61. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/StringUtilsTest.java +0 -19
  62. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleAndButtonsMeasurerTest.kt +0 -357
  63. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleBarHelper.java +0 -54
  64. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +0 -29
  65. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +0 -22
  66. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ViewHelper.java +0 -9
  67. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/OptionsApplyingTest.java +0 -149
  68. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +0 -206
  69. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +0 -62
  70. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +0 -572
  71. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +0 -173
  72. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AfterInitialTabTest.java +0 -38
  73. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +0 -86
  74. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTabTest.java +0 -31
  75. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/TogetherTest.java +0 -20
  76. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/button/NavigationIconResolverTest.java +0 -78
  77. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +0 -80
  78. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +0 -56
  79. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +0 -191
  80. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewControllerTest.java +0 -97
  81. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/FragmentCreatorMock.java +0 -34
  82. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/SomeFragment.java +0 -8
  83. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +0 -33
  84. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorMock.java +0 -40
  85. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +0 -213
  86. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +0 -319
  87. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +0 -368
  88. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +0 -898
  89. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +0 -254
  90. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +0 -108
  91. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +0 -299
  92. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +0 -446
  93. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +0 -77
  94. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/FloatingActionButtonTest.java +0 -154
  95. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/IdStackTest.java +0 -114
  96. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +0 -241
  97. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +0 -1165
  98. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +0 -1081
  99. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarButtonControllerTest.java +0 -61
  100. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarReactViewControllerTest.java +0 -43
  101. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarButtonControllerTest.java +0 -120
  102. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +0 -432
  103. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +0 -247
  104. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +0 -337
  105. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java +0 -68
  106. package/lib/android/app/src/test/java/com/reactnativenavigation/views/OverlayTouchDelegateTest.java +0 -60
  107. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +0 -477
  108. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TopBarTest.java +0 -82
  109. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +0 -109
  110. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/DefaultViewAnimatorCreatorFake.kt +0 -36
  111. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +0 -101
  112. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +0 -40
  113. package/lib/android/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +0 -1
@@ -1,319 +0,0 @@
1
- package com.reactnativenavigation.viewcontrollers.modal;
2
-
3
- import android.app.Activity;
4
- import android.os.Looper;
5
- import android.widget.FrameLayout;
6
-
7
- import com.reactnativenavigation.BaseTest;
8
- import com.reactnativenavigation.mocks.SimpleViewController;
9
- import com.reactnativenavigation.options.TransitionAnimationOptionsKt;
10
- import com.reactnativenavigation.options.TransitionAnimationOptionsTestKt;
11
- import com.reactnativenavigation.options.ModalPresentationStyle;
12
- import com.reactnativenavigation.options.Options;
13
- import com.reactnativenavigation.options.params.Bool;
14
- import com.reactnativenavigation.react.CommandListener;
15
- import com.reactnativenavigation.react.CommandListenerAdapter;
16
- import com.reactnativenavigation.viewcontrollers.child.ChildController;
17
- import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
18
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
19
-
20
- import org.json.JSONException;
21
- import org.json.JSONObject;
22
- import org.junit.Test;
23
- import org.mockito.InOrder;
24
- import org.mockito.Mockito;
25
- import org.robolectric.Shadows;
26
-
27
- import androidx.coordinatorlayout.widget.CoordinatorLayout;
28
-
29
- import static org.assertj.core.api.Java6Assertions.assertThat;
30
- import static org.mockito.ArgumentMatchers.any;
31
- import static org.mockito.ArgumentMatchers.eq;
32
- import static org.mockito.Mockito.inOrder;
33
- import static org.mockito.Mockito.never;
34
- import static org.mockito.Mockito.spy;
35
- import static org.mockito.Mockito.times;
36
- import static org.mockito.Mockito.verify;
37
- import static org.mockito.Mockito.verifyNoInteractions;
38
-
39
- public class ModalPresenterTest extends BaseTest {
40
- private static final String MODAL_ID_1 = "modalId1";
41
- private static final String MODAL_ID_2 = "modalId2";
42
-
43
- private ChildController<?> modal1;
44
- private ChildController<?> modal2;
45
- private ModalPresenter uut;
46
- private ModalAnimator animator;
47
- private ViewController<?> root;
48
- private CoordinatorLayout modalsLayout;
49
-
50
-
51
- @Override
52
- public void beforeEach() {
53
- super.beforeEach();
54
- Activity activity = newActivity();
55
- ChildControllersRegistry childRegistry = new ChildControllersRegistry();
56
-
57
- root = spy(new SimpleViewController(activity, childRegistry, "root", new Options()));
58
- FrameLayout contentLayout = new FrameLayout(activity);
59
- FrameLayout rootLayout = new FrameLayout(activity);
60
- rootLayout.addView(root.getView());
61
- modalsLayout = new CoordinatorLayout(activity);
62
- contentLayout.addView(rootLayout);
63
- contentLayout.addView(modalsLayout);
64
- activity.setContentView(contentLayout);
65
-
66
- animator = spy(new ModalAnimator(activity));
67
- uut = new ModalPresenter(animator);
68
- uut.setModalsLayout(modalsLayout);
69
- uut.setRootLayout(rootLayout);
70
- modal1 = spy(new SimpleViewController(activity, childRegistry, MODAL_ID_1, new Options()));
71
- modal2 = spy(new SimpleViewController(activity, childRegistry, MODAL_ID_2, new Options()));
72
- }
73
-
74
- @Test
75
- public void showModal() {
76
- Options defaultOptions = new Options();
77
- uut.setDefaultOptions(defaultOptions);
78
- disableShowModalAnimation(modal1);
79
- uut.showModal(modal1, root, new CommandListenerAdapter());
80
- verify(modal1).setWaitForRender(any());
81
- assertThat(modal1.getView().getFitsSystemWindows()).isTrue();
82
- }
83
-
84
- @Test
85
- public void showModal_noAnimation() {
86
- disableShowModalAnimation(modal1);
87
- CommandListener listener = spy(new CommandListenerAdapter() {
88
- @Override
89
- public void onSuccess(String childId) {
90
- Shadows.shadowOf(Looper.getMainLooper()).idle();
91
- assertThat(modal1.getView().getParent()).isEqualTo(modalsLayout);
92
- verify(modal1).onViewWillAppear();
93
- }
94
- });
95
- uut.showModal(modal1, root, listener);
96
- verify(animator, never()).show(
97
- eq(modal1),
98
- eq(root),
99
- eq(modal1.options.animations.showModal),
100
- any()
101
- );
102
- verify(listener).onSuccess(MODAL_ID_1);
103
- }
104
-
105
- @Test
106
- public void showModal_resolvesDefaultOptions() throws JSONException {
107
- Options defaultOptions = new Options();
108
- JSONObject disabledShowModalAnimation = TransitionAnimationOptionsTestKt.newModalAnimationJson(false);
109
- defaultOptions.animations.showModal = TransitionAnimationOptionsKt.parseTransitionAnimationOptions(disabledShowModalAnimation);
110
- uut.setDefaultOptions(defaultOptions);
111
- uut.showModal(modal1, root, new CommandListenerAdapter());
112
- verifyNoInteractions(animator);
113
- }
114
-
115
- @Test
116
- public void showModal_previousModalIsRemovedFromHierarchy() {
117
- uut.showModal(modal1, root, new CommandListenerAdapter() {
118
- @Override
119
- public void onSuccess(String childId) {
120
- uut.showModal(modal2, modal1, new CommandListenerAdapter() {
121
- @Override
122
- public void onSuccess(String childId) {
123
- idleMainLooper();
124
- assertThat(modal1.getView().getParent()).isNull();
125
- verify(modal1).onViewDisappear();
126
- }
127
- });
128
- assertThat(modal1.getView().getParent()).isEqualTo(modal2.getView().getParent());
129
- }
130
- });
131
- }
132
-
133
- @Test
134
- public void showModal_overCurrentContext_previousModalIsNotRemovedFromHierarchy() {
135
- Options options = new Options();
136
- options.modal.presentationStyle = ModalPresentationStyle.OverCurrentContext;
137
- uut.setDefaultOptions(options);
138
- disableShowModalAnimation(modal1);
139
- uut.showModal(modal1, root, new CommandListenerAdapter());
140
- verify(root, times(0)).detachView();
141
- verify(root, times(0)).onViewDisappear();
142
- }
143
-
144
- @Test
145
- public void showModal_animatesByDefault() {
146
- uut.showModal(modal1, root, new CommandListenerAdapter() {
147
- @Override
148
- public void onSuccess(String childId) {
149
- verify(animator).show(
150
- eq(modal1),
151
- eq(root),
152
- any(),
153
- any()
154
- );
155
- assertThat(animator.isRunning()).isFalse();
156
- }
157
- });
158
- assertThat(animator.isRunning()).isTrue();
159
- }
160
-
161
- @Test
162
- public void showModal_waitForRender() {
163
- modal1.options.animations.showModal.setWaitForRender(new Bool(true));
164
- uut.showModal(modal1, root, new CommandListenerAdapter());
165
- verify(modal1).addOnAppearedListener(any());
166
- verifyNoInteractions(animator);
167
- }
168
-
169
- @Test
170
- public void showModal_rejectIfContentIsNull() {
171
- uut.setModalsLayout(null);
172
- CommandListenerAdapter listener = Mockito.mock(CommandListenerAdapter.class);
173
- uut.showModal(modal1, modal2, listener);
174
- verify(listener).onError(any());
175
- }
176
-
177
- @Test
178
- public void showModal_onViewDidAppearIsInvokedBeforeViewDisappear() {
179
- disableShowModalAnimation(modal1);
180
- root.onViewWillAppear();
181
-
182
- uut.showModal(modal1, root, new CommandListenerAdapter());
183
- idleMainLooper();
184
- InOrder inOrder = inOrder(modal1, root);
185
- inOrder.verify(modal1).onViewDidAppear();
186
- inOrder.verify(root).onViewDisappear();
187
- }
188
-
189
- @Test
190
- public void dismissModal_animatesByDefault() {
191
- disableShowModalAnimation(modal1);
192
-
193
- uut.showModal(modal1, root, new CommandListenerAdapter());
194
- uut.dismissModal(modal1, root, root, new CommandListenerAdapter() {
195
- @Override
196
- public void onSuccess(String childId) {
197
- post(() -> {
198
- verify(modal1).onViewDisappear();
199
- verify(modal1).destroy();
200
- });
201
- }
202
- });
203
-
204
- verify(animator).dismiss(eq(root), eq(modal1), any(), any());
205
- }
206
-
207
- @Test
208
- public void dismissModal_previousViewIsAddedAtIndex0() {
209
- disableShowModalAnimation(modal1);
210
- FrameLayout spy = spy(new FrameLayout(newActivity()));
211
- uut.setRootLayout(spy);
212
-
213
- uut.showModal(modal1, root, new CommandListenerAdapter());
214
- idleMainLooper();
215
- uut.dismissModal(modal1, root, root, new CommandListenerAdapter());
216
-
217
- verify(spy).addView(root.getView(), 0);
218
- }
219
-
220
- @Test
221
- public void dismissModal_noAnimation() {
222
- disableModalAnimations(modal1);
223
-
224
- uut.showModal(modal1, root, new CommandListenerAdapter());
225
- Shadows.shadowOf(Looper.getMainLooper()).idle();
226
- uut.dismissModal(modal1, root, root, new CommandListenerAdapter());
227
- verify(modal1).onViewDisappear();
228
- verify(modal1).destroy();
229
- verify(animator, never()).dismiss(eq(root), any(), eq(modal1.options.animations.dismissModal), any());
230
- }
231
-
232
- @Test
233
- public void dismissModal_previousModalIsAddedBackToHierarchy() {
234
- disableShowModalAnimation(modal1, modal2);
235
-
236
- uut.showModal(modal1, root, new CommandListenerAdapter());
237
- idleMainLooper();
238
- assertThat(modal1.getView().getParent()).isNotNull();
239
- verify(modal1).onViewWillAppear();
240
-
241
- uut.showModal(modal2, modal1, new CommandListenerAdapter());
242
- idleMainLooper();
243
- assertThat(modal1.getView().getParent()).isNull();
244
-
245
- Shadows.shadowOf(Looper.getMainLooper()).idle();
246
- uut.dismissModal(modal2, modal1, root, new CommandListenerAdapter());
247
- assertThat(modal1.getView().getParent()).isNotNull();
248
- idleMainLooper();
249
- verify(modal1, times(2)).onViewWillAppear();
250
- }
251
-
252
- @Test
253
- public void dismissModal_previousControllerIsNotAddedIfDismissedModalIsNotTop() {
254
- disableShowModalAnimation(modal1, modal2);
255
- disableDismissModalAnimation(modal1, modal2);
256
-
257
- uut.showModal(modal1, root, new CommandListenerAdapter());
258
- uut.showModal(modal2, modal1, new CommandListenerAdapter());
259
- idleMainLooper();
260
- assertThat(modal1.getView().getParent()).isNull();
261
- assertThat(root.getView().getParent()).isNull();
262
-
263
- uut.dismissModal(modal1, null, root, new CommandListenerAdapter());
264
- assertThat(root.getView().getParent()).isNull();
265
-
266
- uut.dismissModal(modal2, root, root, new CommandListenerAdapter());
267
- assertThat(root.getView().getParent()).isNotNull();
268
- }
269
-
270
- @Test
271
- public void dismissModal_previousViewIsNotDetachedIfOverCurrentContext() {
272
- modal1.options.modal.presentationStyle = ModalPresentationStyle.OverCurrentContext;
273
- disableShowModalAnimation(modal1, modal2);
274
-
275
- uut.showModal(modal1, root, new CommandListenerAdapter());
276
- assertThat(root.getView().getParent()).isNotNull();
277
- verify(root, times(0)).onViewDisappear();
278
- }
279
-
280
- @Test
281
- public void dismissModal_rejectIfContentIsNull() {
282
- uut.setModalsLayout(null);
283
- CommandListenerAdapter listener = Mockito.mock(CommandListenerAdapter.class);
284
- uut.dismissModal(modal1, root, root, listener);
285
- verify(listener).onError(any());
286
- }
287
-
288
- @Test
289
- public void dismissModal_successIsReportedBeforeViewIsDestroyed() {
290
- disableModalAnimations(modal1);
291
- CommandListenerAdapter listener = Mockito.mock(CommandListenerAdapter.class);
292
- ViewController<?> modal = spy(modal1);
293
- InOrder inOrder = inOrder(listener, modal);
294
-
295
- uut.showModal(modal, root, new CommandListenerAdapter());
296
-
297
- uut.dismissModal(modal, root, root, listener);
298
- inOrder.verify(listener).onSuccess(modal.getId());
299
- inOrder.verify(modal).destroy();
300
- }
301
-
302
- @Test
303
- public void dismissModal_modalsLayoutIfHiddenIsAllModalsAreDismissed() {
304
- disableShowModalAnimation(modal1, modal2);
305
- disableDismissModalAnimation(modal1, modal2);
306
-
307
- uut.showModal(modal1, root, new CommandListenerAdapter());
308
- assertVisible(modalsLayout);
309
- uut.showModal(modal2, modal1, new CommandListenerAdapter());
310
- assertVisible(modalsLayout);
311
-
312
- uut.dismissModal(modal2, modal1, root, new CommandListenerAdapter());
313
- assertVisible(modalsLayout);
314
- uut.dismissModal(modal1, root, root, new CommandListenerAdapter());
315
- assertGone(modalsLayout);
316
- }
317
-
318
-
319
- }
@@ -1,368 +0,0 @@
1
- package com.reactnativenavigation.viewcontrollers.modal;
2
-
3
- import android.app.Activity;
4
- import android.widget.FrameLayout;
5
-
6
- import com.reactnativenavigation.BaseTest;
7
- import com.reactnativenavigation.TestUtils;
8
- import com.reactnativenavigation.mocks.SimpleViewController;
9
- import com.reactnativenavigation.options.Options;
10
- import com.reactnativenavigation.react.CommandListener;
11
- import com.reactnativenavigation.react.CommandListenerAdapter;
12
- import com.reactnativenavigation.react.events.EventEmitter;
13
- import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
14
- import com.reactnativenavigation.viewcontrollers.stack.StackController;
15
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
16
- import com.reactnativenavigation.options.TransitionAnimationOptions;
17
- import org.junit.Test;
18
- import org.mockito.Mockito;
19
-
20
- import java.util.EmptyStackException;
21
-
22
- import androidx.coordinatorlayout.widget.CoordinatorLayout;
23
-
24
- import static org.assertj.core.api.Java6Assertions.assertThat;
25
- import static org.assertj.core.api.Java6Assertions.assertThatThrownBy;
26
- import static org.mockito.ArgumentMatchers.any;
27
- import static org.mockito.ArgumentMatchers.anyString;
28
- import static org.mockito.ArgumentMatchers.eq;
29
- import static org.mockito.Mockito.never;
30
- import static org.mockito.Mockito.spy;
31
- import static org.mockito.Mockito.times;
32
- import static org.mockito.Mockito.verify;
33
- import static org.mockito.Mockito.verifyNoInteractions;
34
- import static org.mockito.Mockito.verifyNoMoreInteractions;
35
- import static org.mockito.Mockito.when;
36
-
37
- public class ModalStackTest extends BaseTest {
38
- private static final String MODAL_ID_1 = "modalId1";
39
- private static final String MODAL_ID_2 = "modalId2";
40
- private static final String MODAL_ID_3 = "modalId3";
41
- private static final String MODAL_ID_4 = "modalId4";
42
-
43
- private ModalStack uut;
44
- private ViewController<?> modal1;
45
- private ViewController<?> modal2;
46
- private ViewController<?> modal3;
47
- private ViewController<?> modal4;
48
- private StackController stack;
49
- private Activity activity;
50
- private ChildControllersRegistry childRegistry;
51
- private ModalPresenter presenter;
52
- private ModalAnimator animator;
53
- private ViewController<?> root;
54
- private EventEmitter emitter;
55
-
56
- @Override
57
- public void beforeEach() {
58
- super.beforeEach();
59
- activity = newActivity();
60
- childRegistry = new ChildControllersRegistry();
61
- root = new SimpleViewController(activity, childRegistry, "root", new Options());
62
-
63
- FrameLayout rootLayout = new FrameLayout(activity);
64
- CoordinatorLayout modalsLayout = new CoordinatorLayout(activity);
65
- FrameLayout contentLayout = new FrameLayout(activity);
66
- contentLayout.addView(rootLayout);
67
- contentLayout.addView(modalsLayout);
68
- activity.setContentView(contentLayout);
69
-
70
- animator = spy(new ModalAnimatorMock(activity));
71
- presenter = spy(new ModalPresenter(animator));
72
- uut = new ModalStack(activity, presenter);
73
- uut.setModalsLayout(modalsLayout);
74
- uut.setRootLayout(rootLayout);
75
- emitter = Mockito.mock(EventEmitter.class);
76
- uut.setEventEmitter(emitter);
77
- modal1 = spy(new SimpleViewController(activity, childRegistry, MODAL_ID_1, new Options()));
78
- modal2 = spy(new SimpleViewController(activity, childRegistry, MODAL_ID_2, new Options()));
79
- modal3 = spy(new SimpleViewController(activity, childRegistry, MODAL_ID_3, new Options()));
80
- modal4 = spy(new SimpleViewController(activity, childRegistry, MODAL_ID_4, new Options()));
81
- stack = TestUtils.newStackController(activity)
82
- .setChildren(modal4)
83
- .build();
84
- }
85
-
86
- @Test
87
- public void showModal_DidAppearEventShouldWaitForReactViewToBeShown(){
88
- CommandListener listener = spy(new CommandListenerAdapter());
89
- uut.showModal(modal1, root, listener);
90
- verify(modal1).addOnAppearedListener(any());
91
- verify(listener).onSuccess(modal1.getId());
92
- idleMainLooper();
93
- verify(modal1).onViewDidAppear();
94
- }
95
-
96
- @Test
97
- public void modalRefIsSaved() {
98
- disableShowModalAnimation(modal1);
99
- CommandListener listener = spy(new CommandListenerAdapter());
100
- uut.showModal(modal1, root, listener);
101
- verify(listener, times(1)).onSuccess(modal1.getId());
102
- assertThat(findModal(MODAL_ID_1)).isNotNull();
103
- }
104
-
105
- @Test
106
- public void showModal() {
107
- CommandListener listener = spy(new CommandListenerAdapter());
108
- uut.showModal(modal1, root, listener);
109
- idleMainLooper();
110
- verify(listener).onSuccess(modal1.getId());
111
- verify(modal1).onViewDidAppear();
112
- assertThat(uut.size()).isOne();
113
- verify(presenter).showModal(eq(modal1), eq(root), any());
114
- assertThat(findModal(MODAL_ID_1)).isNotNull();
115
- }
116
-
117
- @Test
118
- public void showModal_canShowModalBeforeRootIsSet() {
119
- CommandListener listener = spy(new CommandListenerAdapter());
120
- uut.showModal(modal1, null, listener);
121
- verify(listener).onSuccess(modal1.getId());
122
- }
123
-
124
- @Test
125
- public void dismissModal() {
126
- uut.showModal(modal1, root, new CommandListenerAdapter());
127
- CommandListener listener = spy(new CommandListenerAdapter());
128
- uut.dismissModal(modal1.getId(), root, listener);
129
- assertThat(findModal(modal1.getId())).isNull();
130
- verify(presenter).dismissModal(eq(modal1), eq(root), eq(root), any());
131
- verify(listener).onSuccess(modal1.getId());
132
- }
133
-
134
- @Test
135
- public void dismissModal_listenerAndEmitterAreInvokedWithRootViewControllerId() {
136
- uut.showModal(stack, root, new CommandListenerAdapter());
137
- CommandListener listener = spy(new CommandListenerAdapter());
138
- uut.dismissModal(modal4.getId(), root, listener);
139
- verify(listener).onSuccess(stack.getId());
140
- verify(emitter).emitModalDismissed(stack.getId(), modal4.getCurrentComponentName(), 1);
141
- }
142
-
143
- @SuppressWarnings("Convert2Lambda")
144
- @Test
145
- public void dismissModal_rejectIfModalNotFound() {
146
- CommandListener listener = spy(new CommandListenerAdapter());
147
- Runnable onModalWillDismiss = spy(new Runnable() {
148
- @Override
149
- public void run() {
150
-
151
- }
152
- });
153
- uut.dismissModal(MODAL_ID_1, root, listener);
154
- verify(onModalWillDismiss, times(0)).run();
155
- verify(listener, times(1)).onError(anyString());
156
- verifyNoMoreInteractions(listener);
157
- }
158
-
159
- @Test
160
- public void dismissModal_dismissDeepModal() {
161
- disableShowModalAnimation(modal1, modal2, modal3);
162
- disableDismissModalAnimation(modal1, modal2, modal3);
163
-
164
- uut.showModal(modal1, root, new CommandListenerAdapter());
165
- uut.showModal(modal2, root, new CommandListenerAdapter());
166
- uut.showModal(modal3, root, new CommandListenerAdapter());
167
-
168
- assertThat(root.getView().getParent()).isNull();
169
- uut.dismissModal(modal1.getId(), root, new CommandListenerAdapter());
170
- assertThat(root.getView().getParent()).isNull();
171
-
172
- uut.dismissModal(modal3.getId(), root, new CommandListenerAdapter());
173
- uut.dismissModal(modal2.getId(), root, new CommandListenerAdapter());
174
- assertThat(root.getView().getParent()).isNotNull();
175
- assertThat(root.getView().isShown()).isTrue();
176
- }
177
-
178
- @Test
179
- public void dismissAllModals() {
180
- uut.showModal(modal1, root, new CommandListenerAdapter());
181
- uut.showModal(modal2, root, new CommandListenerAdapter());
182
- CommandListener listener = spy(new CommandListenerAdapter() {
183
- @Override
184
- public void onSuccess(String childId) {
185
- assertThat(findModal(modal1.getId())).isNull();
186
- assertThat(findModal(modal2.getId())).isNull();
187
- assertThat(uut.isEmpty()).isTrue();
188
- }
189
- });
190
- uut.dismissAllModals(root, Options.EMPTY, listener);
191
- verify(listener, times(1)).onSuccess(anyString());
192
- verifyNoMoreInteractions(listener);
193
- }
194
-
195
- @Test
196
- public void dismissAllModal_resolvesPromiseSuccessfullyWhenCalledBeforeRootIsSet() {
197
- CommandListenerAdapter spy = spy(new CommandListenerAdapter());
198
- uut.dismissAllModals(null, Options.EMPTY, spy);
199
- verify(spy).onSuccess("");
200
- }
201
-
202
- @Test
203
- public void dismissAllModals_resolveSuccessfullyIfEmpty() {
204
- CommandListener spy = spy(new CommandListenerAdapter());
205
- uut.dismissAllModals(root, Options.EMPTY, spy);
206
- verify(spy, times(1)).onSuccess(root.getId());
207
- }
208
-
209
- @Test
210
- public void dismissAllModals_optionsAreMergedOnTopModal() {
211
- uut.showModal(modal1, root, new CommandListenerAdapter());
212
- uut.showModal(modal2, root, new CommandListenerAdapter());
213
- uut.showModal(modal3, root, new CommandListenerAdapter());
214
-
215
- Options mergeOptions = new Options();
216
- uut.dismissAllModals(root, mergeOptions, new CommandListenerAdapter());
217
- verify(modal3).mergeOptions(mergeOptions);
218
- verify(modal1, times(0)).mergeOptions(mergeOptions);
219
- verify(modal2, times(0)).mergeOptions(mergeOptions);
220
- }
221
-
222
- @Test
223
- public void dismissAllModals_onlyTopModalIsAnimated() {
224
- modal2 = spy(modal2);
225
- Options defaultOptions = new Options();
226
- uut.setDefaultOptions(defaultOptions);
227
- Options resolvedOptions = new Options();
228
- when(modal2.resolveCurrentOptions(defaultOptions)).then(invocation -> resolvedOptions);
229
- uut.showModal(modal1, root, new CommandListenerAdapter());
230
- uut.showModal(modal2, root, new CommandListenerAdapter());
231
-
232
- CommandListener listener = spy(new CommandListenerAdapter());
233
- uut.dismissAllModals(root, Options.EMPTY, listener);
234
- verify(presenter).dismissModal(eq(modal2), eq(root), eq(root), any());
235
- verify(listener).onSuccess(modal2.getId());
236
- verify(animator, never()).dismiss(eq(modal1), eq(modal2), eq(modal1.options.animations.dismissModal), any());
237
- verify(animator).dismiss(eq(root), eq(modal2), eq(resolvedOptions.animations.dismissModal), any());
238
- assertThat(uut.size()).isEqualTo(0);
239
- }
240
-
241
- @Test
242
- public void dismissAllModals_bottomModalsAreDestroyed() {
243
- disableModalAnimations(modal1, modal2);
244
- uut.showModal(modal1, root, new CommandListenerAdapter());
245
- idleMainLooper();
246
- uut.showModal(modal2, root, new CommandListenerAdapter());
247
-
248
- uut.dismissAllModals(root, Options.EMPTY, new CommandListenerAdapter());
249
-
250
- verify(modal1).destroy();
251
- verify(modal1).onViewDisappear();
252
- assertThat(uut.size()).isEqualTo(0);
253
- }
254
-
255
- @Test
256
- public void isEmpty() {
257
- assertThat(uut.isEmpty()).isTrue();
258
- uut.showModal(modal1, root, new CommandListenerAdapter());
259
- assertThat(uut.isEmpty()).isFalse();
260
- uut.dismissAllModals(root, Options.EMPTY, new CommandListenerAdapter());
261
- assertThat(uut.isEmpty()).isTrue();
262
- }
263
-
264
- @Test
265
- public void peek() {
266
- assertThat(uut.isEmpty()).isTrue();
267
- assertThatThrownBy(() -> uut.peek()).isInstanceOf(EmptyStackException.class);
268
- uut.showModal(modal1, root, new CommandListenerAdapter() {
269
- @Override
270
- public void onSuccess(String childId) {
271
- assertThat(uut.peek()).isEqualTo(modal1);
272
- }
273
- });
274
- }
275
-
276
- @Test
277
- public void onDismiss_onViewAppearedInvokedOnPreviousModal() {
278
- disableShowModalAnimation(modal1, modal2);
279
-
280
- uut.showModal(modal1, root, new CommandListenerAdapter());
281
- idleMainLooper();
282
- uut.showModal(modal2, root, new CommandListenerAdapter());
283
- idleMainLooper();
284
- uut.dismissModal(modal2.getId(), root, new CommandListenerAdapter());
285
- idleMainLooper();
286
- verify(modal1, times(2)).onViewWillAppear();
287
- }
288
-
289
- @Test
290
- public void onDismiss_dismissModalInTheMiddleOfStack() {
291
- disableShowModalAnimation(modal1, modal2, modal3);
292
- disableDismissModalAnimation(modal1, modal2, modal3);
293
-
294
- uut.showModal(modal1, root, new CommandListenerAdapter());
295
- uut.showModal(modal2, root, new CommandListenerAdapter());
296
- idleMainLooper();
297
- uut.showModal(modal3, root, new CommandListenerAdapter());
298
-
299
- uut.dismissModal(modal2.getId(), root, new CommandListenerAdapter());
300
- idleMainLooper();
301
- assertThat(uut.size()).isEqualTo(2);
302
- verify(modal2).onViewDisappear();
303
- verify(modal2).destroy();
304
- assertThat(modal1.getView().getParent()).isNull();
305
- }
306
-
307
- @Test
308
- public void handleBack_doesNothingIfModalStackIsEmpty() {
309
- assertThat(uut.isEmpty()).isTrue();
310
- assertThat(uut.handleBack(new CommandListenerAdapter(), root)).isFalse();
311
- }
312
-
313
- @Test
314
- public void handleBack_dismissModal() {
315
- disableDismissModalAnimation(modal1);
316
- uut.showModal(modal1, root, new CommandListenerAdapter());
317
- idleMainLooper();
318
- assertThat(uut.handleBack(new CommandListenerAdapter(), root)).isTrue();
319
- verify(modal1).onViewDisappear();
320
- }
321
-
322
- @Test
323
- public void handleBack_ViewControllerTakesPrecedenceOverModal() {
324
- ViewController<?> backHandlingModal = spy(new SimpleViewController(activity, childRegistry, "stack", new Options()){
325
- @Override
326
- public boolean handleBack(CommandListener listener) {
327
- return true;
328
- }
329
- });
330
- uut.showModal(backHandlingModal, root, new CommandListenerAdapter());
331
-
332
- root.getView().getViewTreeObserver().dispatchOnGlobalLayout();
333
-
334
- assertThat(uut.handleBack(new CommandListenerAdapter(), any())).isTrue();
335
- verify(backHandlingModal, times(1)).handleBack(any());
336
- verify(backHandlingModal, times(0)).onViewDisappear();
337
- }
338
-
339
- @Test
340
- public void setDefaultOptions() {
341
- Options defaultOptions = new Options();
342
- uut.setDefaultOptions(defaultOptions);
343
- verify(presenter).setDefaultOptions(defaultOptions);
344
- }
345
-
346
- @Test
347
- public void destroy() {
348
- showModalsWithoutAnimation(modal1, modal2);
349
- uut.destroy();
350
- verify(modal1).destroy();
351
- verify(modal2).destroy();
352
- }
353
-
354
- private ViewController<?> findModal(String id) {
355
- return uut.findControllerById(id);
356
- }
357
-
358
- private void showModalsWithoutAnimation(ViewController<?>... modals) {
359
- for (ViewController<?> modal : modals) {
360
- showModalWithoutAnimation(modal);
361
- }
362
- }
363
-
364
- private void showModalWithoutAnimation(ViewController<?> modal) {
365
- disableShowModalAnimation(modal);
366
- uut.showModal(modal, root, new CommandListenerAdapter());
367
- }
368
- }