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
@@ -1,216 +0,0 @@
1
- package com.reactnativenavigation.viewcontrollers.component;
2
-
3
- import android.app.Activity;
4
-
5
- import com.reactnativenavigation.BaseTest;
6
- import com.reactnativenavigation.TestUtils;
7
- import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
8
- import com.reactnativenavigation.viewcontrollers.stack.StackController;
9
- import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
10
- import com.reactnativenavigation.mocks.TestComponentLayout;
11
- import com.reactnativenavigation.mocks.TestReactView;
12
- import com.reactnativenavigation.options.Options;
13
- import com.reactnativenavigation.options.params.Bool;
14
- import com.reactnativenavigation.utils.SystemUiUtils;
15
- import com.reactnativenavigation.views.component.ComponentLayout;
16
-
17
- import org.assertj.core.api.Java6Assertions;
18
- import org.junit.Test;
19
- import org.mockito.ArgumentMatchers;
20
- import org.mockito.Mockito;
21
-
22
- public class ComponentViewControllerTest extends BaseTest {
23
- private ComponentViewController uut;
24
- private ComponentLayout view;
25
- private ComponentPresenter presenter;
26
- private Options resolvedOptions = new Options();
27
- private StackController parent;
28
- private Activity activity;
29
-
30
- @Override
31
- public void beforeEach() {
32
- super.beforeEach();
33
- activity = newActivity();
34
- SystemUiUtils.saveStatusBarHeight(63);
35
- view = Mockito.spy(new TestComponentLayout(activity, new TestReactView(activity)));
36
- parent = TestUtils.newStackController(activity).build();
37
- Presenter presenter = new Presenter(activity, new Options());
38
- this.presenter = Mockito.spy(new ComponentPresenter(Options.EMPTY));
39
- uut = Mockito.spy(new ComponentViewController(activity, new ChildControllersRegistry(), "componentId1", "componentName", (activity1, componentId, componentName) -> view, new Options(), presenter, this.presenter) {
40
- @Override
41
- public Options resolveCurrentOptions(Options defaultOptions) {
42
- // Hacky way to return the same instance of resolvedOptions without copying it.
43
- return resolvedOptions
44
- .withDefaultOptions(uut.options)
45
- .withDefaultOptions(defaultOptions);
46
- }
47
- });
48
- uut.setParentController(parent);
49
- parent.ensureViewIsCreated();
50
- }
51
-
52
- @Test
53
- public void setDefaultOptions() {
54
- Options defaultOptions = new Options();
55
- uut.setDefaultOptions(defaultOptions);
56
- Mockito.verify(presenter).setDefaultOptions(defaultOptions);
57
- }
58
-
59
- @Test
60
- public void applyOptions() {
61
- Options options = new Options();
62
- uut.applyOptions(options);
63
- Mockito.verify(view).applyOptions(options);
64
- Mockito.verify(presenter).applyOptions(view, resolvedOptions);
65
- }
66
-
67
- @Test
68
- public void createsViewFromComponentViewCreator() {
69
- Java6Assertions.assertThat(uut.getView()).isSameAs(view);
70
- }
71
-
72
- @Test
73
- public void componentViewDestroyedOnDestroy() {
74
- uut.ensureViewIsCreated();
75
- Mockito.verify(view, Mockito.times(0)).destroy();
76
- uut.onViewWillAppear();
77
- uut.destroy();
78
- Mockito.verify(view, Mockito.times(1)).destroy();
79
- }
80
-
81
- @Test
82
- public void lifecycleMethodsSentToComponentView() {
83
- uut.ensureViewIsCreated();
84
- Mockito.verify(view, Mockito.times(0)).sendComponentStart();
85
- Mockito.verify(view, Mockito.times(0)).sendComponentStop();
86
- uut.onViewWillAppear();
87
- Mockito.verify(view, Mockito.times(0)).sendComponentStart();
88
- Mockito.verify(view, Mockito.times(0)).sendComponentStop();
89
- uut.onViewDidAppear();
90
- Mockito.verify(view, Mockito.times(1)).sendComponentStart();
91
- Mockito.verify(view, Mockito.times(0)).sendComponentStop();
92
- uut.onViewDisappear();
93
- Mockito.verify(view, Mockito.times(1)).sendComponentStart();
94
- Mockito.verify(view, Mockito.times(1)).sendComponentStop();
95
- }
96
-
97
- @Test
98
- public void shouldNotSendDidDisappearAboutDisappearedView() {
99
- uut.ensureViewIsCreated();
100
- uut.onViewDisappear();
101
- Mockito.verify(view, Mockito.times(0)).sendComponentStart();
102
- Mockito.verify(view, Mockito.times(0)).sendComponentStop();
103
-
104
- uut.onViewWillAppear();
105
- uut.onViewDidAppear();
106
- uut.onViewDisappear();
107
- Mockito.verify(view, Mockito.times(1)).sendComponentStart();
108
- Mockito.verify(view, Mockito.times(1)).sendComponentStop();
109
-
110
- uut.onViewDisappear();
111
- Mockito.verify(view, Mockito.times(1)).sendComponentStart();
112
- Mockito.verify(view, Mockito.times(1)).sendComponentStop();
113
- }
114
-
115
- @Test
116
- public void onViewDidAppear_componentStartIsEmittedOnlyIfComponentIsNotAppeared() {
117
- uut.ensureViewIsCreated();
118
-
119
- uut.onViewDidAppear();
120
- Mockito.verify(view).sendComponentStart();
121
-
122
- uut.onViewDidAppear();
123
- Mockito.verify(view).sendComponentStart();
124
-
125
- uut.onViewDisappear();
126
- uut.onViewDidAppear();
127
- Mockito.verify(view, Mockito.times(2)).sendComponentStart();
128
- }
129
-
130
- @Test
131
- public void shouldCallApplyWindowInsetsWhenViewFullyAppeared(){
132
- uut.ensureViewIsCreated();
133
- uut.onViewDidAppear();
134
- Mockito.verify(view).requestApplyInsets();
135
- }
136
-
137
- @Test
138
- public void isViewShownOnlyIfComponentViewIsReady() {
139
- Java6Assertions.assertThat(uut.isViewShown()).isFalse();
140
- uut.ensureViewIsCreated();
141
- Mockito.when(view.asView().isShown()).thenReturn(true);
142
- Java6Assertions.assertThat(uut.isViewShown()).isFalse();
143
- Mockito.when(view.isReady()).thenReturn(true);
144
- Java6Assertions.assertThat(uut.isViewShown()).isTrue();
145
- }
146
-
147
- @Test
148
- public void onNavigationButtonPressInvokedOnReactComponent() {
149
- uut.ensureViewIsCreated();
150
- uut.sendOnNavigationButtonPressed("btn1");
151
- Mockito.verify(view, Mockito.times(1)).sendOnNavigationButtonPressed("btn1");
152
- }
153
-
154
- @Test
155
- public void mergeOptions_emptyOptionsAreIgnored() {
156
- ComponentViewController spy = Mockito.spy(uut);
157
- spy.mergeOptions(Options.EMPTY);
158
- Mockito.verify(spy, Mockito.times(0)).performOnParentController(ArgumentMatchers.any());
159
- }
160
-
161
- @Test
162
- public void mergeOptions_delegatesToPresenterIfViewIsNotShown() {
163
- Options options = new Options();
164
- Java6Assertions.assertThat(uut.isViewShown()).isFalse();
165
- uut.mergeOptions(options);
166
- Mockito.verifyNoInteractions(presenter);
167
-
168
- Mockito.when(uut.isViewShown()).thenReturn(true);
169
- uut.mergeOptions(options);
170
- Mockito.verify(presenter).mergeOptions(uut.getView(), options);
171
- }
172
-
173
- @Test
174
- public void applyTopInset_delegatesToPresenter() {
175
- addToParent(activity, uut);
176
- uut.applyTopInset();
177
- Mockito.verify(presenter).applyTopInsets(uut.getView(), uut.getTopInset());
178
- }
179
-
180
- @Test
181
- public void getTopInset_returnsStatusBarHeight() {
182
- //noinspection ConstantConditions
183
- uut.setParentController(null);
184
- Java6Assertions.assertThat(uut.getTopInset()).isEqualTo(SystemUiUtils.getStatusBarHeight(activity));
185
- }
186
-
187
- @Test
188
- public void getTopInset_resolveWithParent() {
189
- Java6Assertions
190
- .assertThat(uut.getTopInset()).isEqualTo(SystemUiUtils.getStatusBarHeight(activity) + parent.getTopInset(uut));
191
- }
192
-
193
- @Test
194
- public void getTopInset_drawBehind() {
195
- uut.options.statusBar.drawBehind = new Bool(true);
196
- uut.options.topBar.drawBehind = new Bool(true);
197
- Java6Assertions.assertThat(uut.getTopInset()).isEqualTo(0);
198
- }
199
-
200
- @Test
201
- public void getTopInset_drawBehind_defaultOptions() {
202
- Options defaultOptions = new Options();
203
- defaultOptions.statusBar.drawBehind = new Bool(true);
204
- uut.setDefaultOptions(defaultOptions);
205
-
206
- uut.options.topBar.drawBehind = new Bool(true);
207
- Java6Assertions.assertThat(uut.getTopInset()).isEqualTo(0);
208
- }
209
-
210
- @Test
211
- public void applyBottomInset_delegatesToPresenter() {
212
- addToParent(activity, uut);
213
- uut.applyBottomInset();
214
- Mockito.verify(presenter).applyBottomInset(uut.getView(), uut.getBottomInset());
215
- }
216
- }
@@ -1,97 +0,0 @@
1
- package com.reactnativenavigation.viewcontrollers.externalcomponent;
2
-
3
- import android.app.Activity;
4
-
5
- import com.facebook.react.ReactInstanceManager;
6
- import com.reactnativenavigation.BaseTest;
7
- import com.reactnativenavigation.options.ExternalComponent;
8
- import com.reactnativenavigation.options.Options;
9
- import com.reactnativenavigation.options.params.Text;
10
- import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
11
- import com.reactnativenavigation.react.events.ComponentType;
12
- import com.reactnativenavigation.react.events.EventEmitter;
13
- import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
14
- import com.reactnativenavigation.views.ExternalComponentLayout;
15
-
16
- import org.json.JSONObject;
17
- import org.junit.Test;
18
- import org.mockito.Mockito;
19
-
20
- import androidx.coordinatorlayout.widget.CoordinatorLayout;
21
- import androidx.fragment.app.FragmentActivity;
22
-
23
- import static org.assertj.core.api.Java6Assertions.assertThat;
24
- import static org.mockito.Mockito.spy;
25
- import static org.mockito.Mockito.times;
26
- import static org.mockito.Mockito.verify;
27
-
28
- public class ExternalComponentViewControllerTest extends BaseTest {
29
- private ExternalComponentViewController uut;
30
- private FragmentCreatorMock componentCreator;
31
- private Activity activity;
32
- private ExternalComponent ec;
33
- private ReactInstanceManager reactInstanceManager;
34
- private EventEmitter emitter;
35
- private ChildControllersRegistry childRegistry;
36
-
37
- @Override
38
- public void beforeEach() {
39
- componentCreator = spy(new FragmentCreatorMock());
40
- activity = newActivity();
41
- ec = createExternalComponent();
42
- reactInstanceManager = Mockito.mock(ReactInstanceManager.class);
43
- emitter = Mockito.mock(EventEmitter.class);
44
- childRegistry = new ChildControllersRegistry();
45
- uut = spy(new ExternalComponentViewController(activity,
46
- childRegistry,
47
- "fragmentId",
48
- new Presenter(activity, Options.EMPTY),
49
- ec,
50
- componentCreator,
51
- reactInstanceManager,
52
- emitter,
53
- new ExternalComponentPresenter(),
54
- new Options())
55
- );
56
- }
57
-
58
- @Test
59
- public void createView_returnsFrameLayout() {
60
- ExternalComponentLayout view = uut.getView();
61
- assertThat(CoordinatorLayout.class.isAssignableFrom(view.getClass())).isTrue();
62
- }
63
-
64
- @Test
65
- public void createView_createsExternalComponent() {
66
- ExternalComponentLayout view = uut.getView();
67
- verify(componentCreator, times(1)).create((FragmentActivity) activity, reactInstanceManager, ec.passProps);
68
- assertThat(view.getChildCount()).isGreaterThan(0);
69
- }
70
-
71
- @Test
72
- public void onViewAppeared_appearEventIsEmitted() {
73
- uut.onViewWillAppear();
74
- verify(emitter).emitComponentDidAppear(uut.getId(), ec.name.get(), ComponentType.Component);
75
- }
76
-
77
- @Test
78
- public void onViewDisappear_disappearEventIsEmitted() {
79
- uut.onViewDisappear();
80
- verify(emitter).emitComponentDidDisappear(uut.getId(), ec.name.get(), ComponentType.Component);
81
- }
82
-
83
- @Test
84
- public void registersInChildRegister() {
85
- uut.onViewWillAppear();
86
- assertThat(childRegistry.size()).isOne();
87
- uut.onViewDisappear();
88
- assertThat(childRegistry.size()).isZero();
89
- }
90
-
91
- private ExternalComponent createExternalComponent() {
92
- ExternalComponent component = new ExternalComponent();
93
- component.name = new Text("fragmentComponent");
94
- component.passProps = new JSONObject();
95
- return component;
96
- }
97
- }
@@ -1,34 +0,0 @@
1
- package com.reactnativenavigation.viewcontrollers.externalcomponent;
2
-
3
- import android.app.Activity;
4
- import android.app.FragmentManager;
5
- import android.app.FragmentTransaction;
6
- import androidx.fragment.app.FragmentActivity;
7
- import android.widget.FrameLayout;
8
-
9
- import com.facebook.react.ReactInstanceManager;
10
- import com.reactnativenavigation.R;
11
-
12
- import org.json.JSONObject;
13
-
14
- public class FragmentCreatorMock implements ExternalComponentCreator {
15
- @Override
16
- public ExternalComponent create(FragmentActivity activity, ReactInstanceManager reactInstanceManager, JSONObject props) {
17
- return createContent(activity);
18
- }
19
-
20
- private ExternalComponent createContent(Activity activity) {
21
- FrameLayout content = new FrameLayout(activity) {
22
- @Override
23
- protected void onAttachedToWindow() {
24
- super.onAttachedToWindow();
25
- FragmentManager fm = activity.getFragmentManager();
26
- FragmentTransaction ft = fm.beginTransaction();
27
- ft.add(R.id.fragment_screen_content, new SomeFragment());
28
- ft.commitAllowingStateLoss();
29
- }
30
- };
31
- content.setId(R.id.fragment_screen_content);
32
- return () -> content;
33
- }
34
- }
@@ -1,8 +0,0 @@
1
- package com.reactnativenavigation.viewcontrollers.externalcomponent;
2
-
3
- import android.app.Fragment;
4
-
5
- public class SomeFragment extends Fragment {
6
- public SomeFragment() {
7
- }
8
- }
@@ -1,33 +0,0 @@
1
- package com.reactnativenavigation.viewcontrollers.fakes
2
-
3
- import android.app.Activity
4
- import androidx.coordinatorlayout.widget.CoordinatorLayout
5
- import org.mockito.kotlin.mock
6
- import com.reactnativenavigation.options.Options
7
- import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter
8
- import com.reactnativenavigation.utils.CompatUtils
9
- import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry
10
- import com.reactnativenavigation.viewcontrollers.parent.ParentController
11
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
12
-
13
- class FakeParentController @JvmOverloads constructor(
14
- activity: Activity,
15
- childRegistry: ChildControllersRegistry,
16
- private val child: ViewController<*>,
17
- id: String = "Parent" + CompatUtils.generateViewId(),
18
- presenter: Presenter = mock(),
19
- initialOptions: Options = Options.EMPTY
20
- ) : ParentController<CoordinatorLayout>(activity, childRegistry, id, presenter, initialOptions) {
21
- init {
22
- child.parentController = this
23
- }
24
- override fun getCurrentChild(): ViewController<*> = child
25
-
26
- override fun createView() = CoordinatorLayout(activity).apply {
27
- addView(child.view)
28
- }
29
-
30
- override fun getChildControllers() = listOf(child)
31
-
32
- override fun sendOnNavigationButtonPressed(buttonId: String?) = child.sendOnNavigationButtonPressed(buttonId)
33
- }
@@ -1,40 +0,0 @@
1
- package com.reactnativenavigation.viewcontrollers.modal;
2
-
3
- import android.content.Context;
4
-
5
- import com.reactnativenavigation.options.TransitionAnimationOptions;
6
- import com.reactnativenavigation.utils.ScreenAnimationListener;
7
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
8
-
9
- import org.jetbrains.annotations.NotNull;
10
-
11
- import androidx.annotation.Nullable;
12
-
13
- public class ModalAnimatorMock extends ModalAnimator {
14
-
15
- ModalAnimatorMock(Context context) {
16
- super(context);
17
- }
18
-
19
- @Override
20
- public void show(@NotNull ViewController<?> appearing, @Nullable ViewController<?> disappearing, @NotNull TransitionAnimationOptions show, @NotNull ScreenAnimationListener listener) {
21
- try {
22
- listener.onStart();
23
- Thread.sleep(10);
24
- listener.onEnd();
25
- } catch (InterruptedException e) {
26
- throw new RuntimeException(e);
27
- }
28
- }
29
-
30
- @Override
31
- public void dismiss(@Nullable ViewController<?> appearing, @NotNull ViewController<?> disappearing, @NotNull TransitionAnimationOptions dismiss, @NotNull ScreenAnimationListener listener) {
32
- try {
33
- listener.onStart();
34
- Thread.sleep(10);
35
- listener.onEnd();
36
- } catch (InterruptedException e) {
37
- throw new RuntimeException(e);
38
- }
39
- }
40
- }
@@ -1,213 +0,0 @@
1
- package com.reactnativenavigation.viewcontrollers.modal
2
-
3
- import android.app.Activity
4
- import org.mockito.kotlin.*
5
- import com.reactnativenavigation.BaseTest
6
- import com.reactnativenavigation.mocks.SimpleViewController
7
- import com.reactnativenavigation.options.*
8
- import com.reactnativenavigation.options.animations.ViewAnimationOptions
9
- import com.reactnativenavigation.utils.ScreenAnimationListener
10
- import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry
11
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
12
- import com.reactnativenavigation.views.element.TransitionAnimatorCreator
13
- import org.assertj.core.api.Java6Assertions.assertThat
14
- import org.junit.Test
15
-
16
- class ModalAnimatorTest : BaseTest() {
17
- private lateinit var uut: ModalAnimator
18
- private lateinit var activity: Activity
19
- private lateinit var modal1: ViewController<*>
20
- private lateinit var root: ViewController<*>
21
- private lateinit var modal1View: SimpleViewController.SimpleView
22
- private lateinit var rootView: SimpleViewController.SimpleView
23
- private lateinit var mockDefaultAnimation: StackAnimationOptions
24
- private lateinit var screenAnimationListener: ScreenAnimationListener
25
- override fun beforeEach() {
26
- val mockTransitionAnimatorCreator = spy(TransitionAnimatorCreator())
27
- val childRegistry = mock<ChildControllersRegistry>()
28
- val enter = spy(AnimationOptions())
29
- val exit = spy(AnimationOptions())
30
-
31
- screenAnimationListener = mock { }
32
- activity = newActivity()
33
- modal1View = SimpleViewController.SimpleView(activity)
34
- rootView = SimpleViewController.SimpleView(activity)
35
-
36
- mockDefaultAnimation = StackAnimationOptions().apply {
37
- val viewAnimationOptions = ViewAnimationOptions()
38
- viewAnimationOptions.enter = enter
39
- viewAnimationOptions.exit = exit
40
- content = viewAnimationOptions
41
- }
42
- uut = spy(ModalAnimator(activity, defaultAnimation = mockDefaultAnimation, transitionAnimatorCreator = mockTransitionAnimatorCreator))
43
- modal1 = object : SimpleViewController(activity, childRegistry, "child1", Options()) {
44
- override fun createView(): SimpleView {
45
- return modal1View
46
- }
47
- }
48
-
49
- root = object : SimpleViewController(activity, childRegistry, "root", Options()) {
50
- override fun createView(): SimpleView {
51
- return rootView
52
- }
53
- }
54
- }
55
-
56
- @Test
57
- fun show_isRunning() {
58
- uut.show(modal1, root, TransitionAnimationOptions(), object : ScreenAnimationListener() {})
59
- assertThat(uut.isRunning).isTrue()
60
- }
61
-
62
- @Test
63
- fun `show shared elements - should make alpha 0 before animation`() {
64
- val sharedElements = SharedElements.parse(newAnimationOptionsJson(true).apply {
65
- put("sharedElementTransitions", newSharedElementAnimationOptionsJson())
66
- })
67
- val spyView = spy(modal1View)
68
- val mockModal = spy(modal1)
69
- whenever(mockModal.createView()).thenReturn(spyView)
70
- mockModal.onViewWillAppear() // to avoid wait for render
71
- uut.show(mockModal, root, TransitionAnimationOptions(sharedElements = sharedElements), screenAnimationListener)
72
- verify(spyView).alpha=0f
73
- }
74
-
75
- @Test
76
- fun `show shared elements - should play default fade-in`() {
77
- val sharedElements = SharedElements.parse(newAnimationOptionsJson(true).apply {
78
- put("sharedElementTransitions", newSharedElementAnimationOptionsJson())
79
- })
80
- val mockModal = spy(modal1)
81
- mockModal.onViewWillAppear() // to avoid wait for render
82
- uut.show(mockModal, root, TransitionAnimationOptions(sharedElements = sharedElements), screenAnimationListener)
83
- verify(mockDefaultAnimation.content.enter).getAnimation(mockModal.view)
84
- }
85
-
86
- @Test
87
- fun `dismiss shared elements - should play default fade-out`() {
88
- val sharedElements = SharedElements.parse(newAnimationOptionsJson(true).apply {
89
- put("sharedElementTransitions", newSharedElementAnimationOptionsJson())
90
- })
91
- val mockModal = spy(modal1)
92
- mockModal.onViewWillAppear() // to avoid wait for render
93
- uut.show(mockModal, root, TransitionAnimationOptions(sharedElements = sharedElements), screenAnimationListener)
94
- verify(mockDefaultAnimation.content.enter).getAnimation(mockModal.view)
95
-
96
- uut.dismiss(root, mockModal, TransitionAnimationOptions(sharedElements = sharedElements), screenAnimationListener)
97
- verify(mockDefaultAnimation.content.exit).getAnimation(mockModal.view)
98
- }
99
-
100
- @Test
101
- fun `show - should play shared transition if it has value`() {
102
- val sharedElements = SharedElements.parse(newAnimationOptionsJson(true).apply {
103
- put("sharedElementTransitions", newSharedElementAnimationOptionsJson())
104
- })
105
- val mockModal = spy(modal1)
106
- uut.show(mockModal, root, TransitionAnimationOptions(sharedElements = sharedElements), screenAnimationListener)
107
-
108
- verify(mockModal).setWaitForRender(any())
109
- }
110
-
111
- @Test
112
- fun `show - should not play shared transition if it does not has value`() {
113
- val enter = spy(AnimationOptions(newAnimationOptionsJson(true)))
114
- val mockModal = spy(modal1)
115
- uut.show(mockModal, root, TransitionAnimationOptions(enter = enter), screenAnimationListener)
116
- verify(mockModal, never()).setWaitForRender(any())
117
- }
118
-
119
- @Test
120
- fun `show - play enter animation on appearing if hasValue`() {
121
- val enter = spy(AnimationOptions(newAnimationOptionsJson(true)))
122
- val exit = spy(AnimationOptions())
123
- val animationOptions = TransitionAnimationOptions(enter = enter, exit = exit)
124
- uut.show(modal1, root, animationOptions, screenAnimationListener)
125
-
126
- verify(enter).getAnimation(modal1.view)
127
- verify(exit, never()).getAnimation(root.view)
128
- }
129
-
130
- @Test
131
- fun `show - play default animation on appearing modal if enter does not hasValue`() {
132
- val enter = spy(AnimationOptions())
133
- val exit = spy(AnimationOptions())
134
- val animationOptions = TransitionAnimationOptions(enter = enter, exit = exit)
135
- uut.show(modal1, root, animationOptions, screenAnimationListener)
136
-
137
- verify(uut).getDefaultPushAnimation(modal1.view)
138
- verify(enter, never()).getAnimation(modal1.view)
139
- verify(exit, never()).getAnimation(root.view)
140
- }
141
-
142
- @Test
143
- fun `show - play enter animation on appearing modal, exit on disappearing one`() {
144
- val enter = spy(AnimationOptions(newAnimationOptionsJson(true)))
145
- val exit = spy(AnimationOptions(newAnimationOptionsJson(true)))
146
- val animationOptions = TransitionAnimationOptions(enter = enter, exit = exit)
147
- uut.show(modal1, root, animationOptions, screenAnimationListener)
148
-
149
- verify(enter).getAnimation(modal1.view)
150
- verify(exit).getAnimation(root.view)
151
- }
152
-
153
- @Test
154
- fun `show - should not play exit on null disappearing one`() {
155
- val enter = spy(AnimationOptions(newAnimationOptionsJson(true)))
156
- val exit = spy(AnimationOptions(newAnimationOptionsJson(true)))
157
- val animationOptions = TransitionAnimationOptions(enter = enter, exit = exit)
158
- uut.show(modal1, null, animationOptions, screenAnimationListener)
159
-
160
- verify(enter).getAnimation(modal1.view)
161
- verify(exit, never()).getAnimation(root.view)
162
- }
163
-
164
- @Test
165
- fun `dismiss - play default animation on disappearing modal if exit does not hasValue`() {
166
- val enter = spy(AnimationOptions())
167
- val exit = spy(AnimationOptions())
168
- val animationOptions = TransitionAnimationOptions(enter = enter, exit = exit)
169
- uut.dismiss(root, modal1, animationOptions, screenAnimationListener)
170
-
171
- verify(uut).getDefaultPopAnimation(modal1.view)
172
- verify(enter, never()).getAnimation(any())
173
- verify(exit, never()).getAnimation(any())
174
- }
175
-
176
- @Test
177
- fun `dismiss - play exit animation on disappearing modal, enter on appearing one`() {
178
- val enter = spy(AnimationOptions(newAnimationOptionsJson(true)))
179
- val exit = spy(AnimationOptions(newAnimationOptionsJson(true)))
180
- val animationOptions = TransitionAnimationOptions(enter = enter, exit = exit)
181
- uut.dismiss(root, modal1, animationOptions, screenAnimationListener)
182
-
183
- verify(exit).getAnimation(modal1.view)
184
- verify(enter).getAnimation(root.view)
185
- }
186
-
187
- @Test
188
- fun `dismiss - should not play enter on null appearing one`() {
189
- val enter = spy(AnimationOptions(newAnimationOptionsJson(true)))
190
- val exit = spy(AnimationOptions(newAnimationOptionsJson(true)))
191
- val animationOptions = TransitionAnimationOptions(enter = enter, exit = exit)
192
- uut.dismiss(null, root, animationOptions, screenAnimationListener)
193
-
194
- verify(enter, never()).getAnimation(any())
195
- verify(exit).getAnimation(root.view)
196
- }
197
-
198
-
199
- @Test
200
- fun dismiss_dismissModalDuringShowAnimation() {
201
- val showListener = spy<ScreenAnimationListener>()
202
- uut.show(modal1, root, TransitionAnimationOptions(), showListener)
203
-
204
- verify(showListener).onStart()
205
- val dismissListener = spy<ScreenAnimationListener>()
206
- uut.dismiss(root, modal1, TransitionAnimationOptions(), dismissListener)
207
-
208
- verify(showListener).onCancel()
209
- verify(showListener, never()).onEnd()
210
- verify(dismissListener).onEnd()
211
- assertThat(uut.isRunning).isFalse()
212
- }
213
- }