react-native-navigation 7.24.3 → 7.25.0

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 (115) 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/RNNComponentViewController.m +5 -0
  14. package/lib/ios/RNNLayoutOptions.h +2 -1
  15. package/lib/ios/RNNLayoutOptions.m +4 -0
  16. package/lib/ios/RNNStackPresenter.m +1 -0
  17. package/lib/src/interfaces/Options.ts +12 -0
  18. package/package.json +3 -1
  19. package/.buildkite/pipeline.yml +0 -59
  20. package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java +0 -48
  21. package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +0 -178
  22. package/lib/android/app/src/test/java/com/reactnativenavigation/EnvironmentTest.java +0 -43
  23. package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +0 -23
  24. package/lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java +0 -35
  25. package/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +0 -62
  26. package/lib/android/app/src/test/java/com/reactnativenavigation/fakes/IconResolverFake.kt +0 -8
  27. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/BackDrawable.java +0 -30
  28. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +0 -49
  29. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +0 -18
  30. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleComponentViewController.java +0 -15
  31. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleOverlay.java +0 -54
  32. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleViewController.java +0 -113
  33. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +0 -79
  34. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentViewCreator.java +0 -18
  35. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactView.java +0 -71
  36. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarButtonCreatorMock.java +0 -34
  37. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarReactViewCreatorMock.java +0 -20
  38. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TopBarBackgroundViewCreatorMock.java +0 -20
  39. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +0 -21
  40. package/lib/android/app/src/test/java/com/reactnativenavigation/options/LayoutNodeParserTest.java +0 -51
  41. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OptionsTest.java +0 -315
  42. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OrientationOptionsTest.java +0 -81
  43. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TopBarButtonsTest.kt +0 -95
  44. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +0 -122
  45. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/BoolParserTest.java +0 -28
  46. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +0 -50
  47. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/JSONParserTest.java +0 -64
  48. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +0 -56
  49. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +0 -59
  50. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/SideMenuPresenterTest.java +0 -35
  51. package/lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationModuleTest.java +0 -102
  52. package/lib/android/app/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java +0 -24
  53. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/AnimationHelper.kt +0 -33
  54. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonPresenterTest.java +0 -241
  55. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonSpanTest.java +0 -57
  56. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/CompatUtilsTest.java +0 -17
  57. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +0 -78
  58. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +0 -47
  59. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/NativeCommandListenerTest.java +0 -60
  60. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/OptionHelper.java +0 -16
  61. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ReflectionUtilsTest.java +0 -26
  62. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/StringUtilsTest.java +0 -19
  63. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/SystemUiUtilsTest.kt +0 -27
  64. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleAndButtonsMeasurerTest.kt +0 -357
  65. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleBarHelper.java +0 -54
  66. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +0 -29
  67. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +0 -22
  68. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ViewHelper.java +0 -9
  69. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/OptionsApplyingTest.java +0 -149
  70. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +0 -206
  71. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +0 -62
  72. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +0 -589
  73. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +0 -173
  74. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AfterInitialTabTest.java +0 -38
  75. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +0 -86
  76. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTabTest.java +0 -31
  77. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/TogetherTest.java +0 -20
  78. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/button/NavigationIconResolverTest.java +0 -78
  79. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +0 -80
  80. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +0 -56
  81. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +0 -216
  82. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewControllerTest.java +0 -97
  83. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/FragmentCreatorMock.java +0 -34
  84. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/SomeFragment.java +0 -8
  85. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +0 -33
  86. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorMock.java +0 -40
  87. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +0 -213
  88. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +0 -319
  89. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +0 -367
  90. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +0 -898
  91. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +0 -254
  92. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +0 -108
  93. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +0 -299
  94. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +0 -446
  95. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +0 -77
  96. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/FloatingActionButtonTest.java +0 -154
  97. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/IdStackTest.java +0 -114
  98. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +0 -241
  99. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +0 -1165
  100. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +0 -1081
  101. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarButtonControllerTest.java +0 -61
  102. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarReactViewControllerTest.java +0 -43
  103. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarButtonControllerTest.java +0 -120
  104. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +0 -432
  105. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +0 -249
  106. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +0 -337
  107. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java +0 -68
  108. package/lib/android/app/src/test/java/com/reactnativenavigation/views/OverlayTouchDelegateTest.java +0 -60
  109. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +0 -477
  110. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TopBarTest.java +0 -82
  111. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +0 -109
  112. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/DefaultViewAnimatorCreatorFake.kt +0 -36
  113. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +0 -101
  114. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +0 -40
  115. 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
- }