@ionic/core 7.5.6-dev.11700168085.18cb70d3 → 7.5.6-dev.11700492285.1581ed02

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 (80) hide show
  1. package/components/ion-datetime.js +2 -2
  2. package/dist/cjs/ion-datetime_3.cjs.entry.js +2 -2
  3. package/dist/collection/collection-manifest.json +4 -4
  4. package/dist/collection/components/accordion/test/accordion.spec.js +195 -0
  5. package/dist/collection/components/action-sheet/test/action-sheet-id.spec.js +32 -0
  6. package/dist/collection/components/action-sheet/test/basic/action-sheet.spec.js +18 -0
  7. package/dist/collection/components/alert/test/alert-id.spec.js +32 -0
  8. package/dist/collection/components/alert/test/alert.spec.js +37 -0
  9. package/dist/collection/components/back-button/test/back-button.spec.js +86 -0
  10. package/dist/collection/components/breadcrumb/test/aria.spec.js +22 -0
  11. package/dist/collection/components/breadcrumbs/test/breadcrumbs.spec.js +58 -0
  12. package/dist/collection/components/button/test/form-reference/button.spec.js +26 -0
  13. package/dist/collection/components/card/test/aria.spec.js +16 -0
  14. package/dist/collection/components/checkbox/test/checkbox.spec.js +20 -0
  15. package/dist/collection/components/datetime/datetime.js +2 -2
  16. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +43 -0
  17. package/dist/collection/components/datetime/test/comparison.spec.js +43 -0
  18. package/dist/collection/components/datetime/test/data.spec.js +456 -0
  19. package/dist/collection/components/datetime/test/format.spec.js +124 -0
  20. package/dist/collection/components/datetime/test/helpers.spec.js +72 -0
  21. package/dist/collection/components/datetime/test/manipulation.spec.js +433 -0
  22. package/dist/collection/components/datetime/test/parse.spec.js +222 -0
  23. package/dist/collection/components/datetime/test/state.spec.js +114 -0
  24. package/dist/collection/components/infinite-scroll-content/test/infinite-scroll-content.spec.js +37 -0
  25. package/dist/collection/components/input/test/input.spec.js +85 -0
  26. package/dist/collection/components/input/test/item/input.spec.js +24 -0
  27. package/dist/collection/components/item/test/a11y/item.spec.js +48 -0
  28. package/dist/collection/components/loading/test/basic/loading.spec.js +16 -0
  29. package/dist/collection/components/loading/test/loading-id.spec.js +32 -0
  30. package/dist/collection/components/loading/test/loading.spec.js +37 -0
  31. package/dist/collection/components/modal/test/a11y/modal.spec.js +22 -0
  32. package/dist/collection/components/modal/test/basic/modal.spec.js +16 -0
  33. package/dist/collection/components/modal/test/can-dismiss/modal.spec.js +191 -0
  34. package/dist/collection/components/modal/test/modal-id.spec.js +32 -0
  35. package/dist/collection/components/nav/test/nav-controller.spec.js +749 -0
  36. package/dist/collection/components/picker/test/picker-id.spec.js +32 -0
  37. package/dist/collection/components/picker-column/test/picker-column-aria.spec.js +35 -0
  38. package/dist/collection/components/picker-column/test/picker-column-dynamic.spec.js +29 -0
  39. package/dist/collection/components/picker-column/test/picker-column.spec.js +17 -0
  40. package/dist/collection/components/popover/test/basic/popover.spec.js +16 -0
  41. package/dist/collection/components/popover/test/popover-id.spec.js +32 -0
  42. package/dist/collection/components/popover/test/util.spec.js +53 -0
  43. package/dist/collection/components/radio/test/radio.spec.js +46 -0
  44. package/dist/collection/components/range/test/label/range.spec.js +23 -0
  45. package/dist/collection/components/range/test/range.spec.js +205 -0
  46. package/dist/collection/components/refresher-content/test/refresher-content.spec.js +46 -0
  47. package/dist/collection/components/router/test/matching.spec.js +250 -0
  48. package/dist/collection/components/router/test/parser.spec.js +133 -0
  49. package/dist/collection/components/router/test/path.spec.js +218 -0
  50. package/dist/collection/components/router/test/router.spec.js +55 -0
  51. package/dist/collection/components/searchbar/test/searchbar.spec.js +15 -0
  52. package/dist/collection/components/segment/test/segment.spec.js +37 -0
  53. package/dist/collection/components/select/test/select.spec.js +59 -0
  54. package/dist/collection/components/textarea/test/textarea.spec.js +59 -0
  55. package/dist/collection/components/toast/test/toast-id.spec.js +32 -0
  56. package/dist/collection/components/toast/test/toast.spec.js +120 -0
  57. package/dist/collection/components/toggle/test/toggle.spec.js +55 -0
  58. package/dist/collection/global/test/config-controller.spec.js +77 -0
  59. package/dist/collection/utils/animation/test/animation.spec.js +431 -0
  60. package/dist/collection/utils/keyboard/test/keyboard-controller.spec.js +21 -0
  61. package/dist/collection/utils/keyboard/test/keyboard.spec.js +214 -0
  62. package/dist/collection/utils/sanitization/test/sanitization.spec.js +43 -0
  63. package/dist/collection/utils/test/aria.spec.js +79 -0
  64. package/dist/collection/utils/test/attributes.spec.js +53 -0
  65. package/dist/collection/utils/test/hardware-back-button.spec.js +53 -0
  66. package/dist/collection/utils/test/overlays/overlays.spec.js +102 -0
  67. package/dist/collection/utils/test/platform.spec.js +132 -0
  68. package/dist/collection/utils/test/ready.spec.js +39 -0
  69. package/dist/collection/utils/test/theme.spec.js +56 -0
  70. package/dist/docs.json +21 -21
  71. package/dist/esm/ion-datetime_3.entry.js +2 -2
  72. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  73. package/dist/ionic/ionic.esm.js +1 -1
  74. package/dist/ionic/p-40903d34.system.js +1 -1
  75. package/dist/ionic/p-ad61e508.entry.js +4 -0
  76. package/dist/ionic/p-d91e93ac.system.entry.js +4 -0
  77. package/hydrate/index.js +2 -2
  78. package/package.json +2 -1
  79. package/dist/ionic/p-b76c6241.system.entry.js +0 -4
  80. package/dist/ionic/p-b781d6b2.entry.js +0 -4
@@ -0,0 +1,749 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Nav } from "../nav";
6
+ import { ViewController } from "../view-controller";
7
+ describe('NavController', () => {
8
+ describe('push and pop', () => {
9
+ it('should push multiple times and pop multiple times', async () => {
10
+ const push1Done = jest.fn();
11
+ const push2Done = jest.fn();
12
+ const push3Done = jest.fn();
13
+ const push4Done = jest.fn();
14
+ const pop1Done = jest.fn();
15
+ const pop2Done = jest.fn();
16
+ const pop3Done = jest.fn();
17
+ // Push 1
18
+ const view1 = mockView(MockView1);
19
+ await nav.push(view1, null, { animated: false }, push1Done);
20
+ const hasCompleted = true;
21
+ const requiresTransition = true;
22
+ expect(push1Done).toHaveBeenCalledWith(hasCompleted, requiresTransition, view1, undefined, 'forward');
23
+ expect(nav.getLength()).toEqual(1);
24
+ expect(nav['views'][0].component).toEqual(MockView1);
25
+ // Push 2
26
+ const view2 = mockView(MockView2);
27
+ await nav.push(view2, null, { animated: false }, push2Done);
28
+ expect(push2Done).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view1, 'forward');
29
+ expect(nav.getLength()).toEqual(2);
30
+ expect(nav['views'][0].component).toEqual(MockView1);
31
+ expect(nav['views'][1].component).toEqual(MockView2);
32
+ // Push 3
33
+ const view3 = mockView(MockView3);
34
+ await nav.push(view3, null, { animated: false }, push3Done);
35
+ expect(push3Done).toHaveBeenCalledWith(hasCompleted, requiresTransition, view3, view2, 'forward');
36
+ expect(nav.getLength()).toEqual(3);
37
+ expect(nav['views'][0].component).toEqual(MockView1);
38
+ expect(nav['views'][1].component).toEqual(MockView2);
39
+ expect(nav['views'][2].component).toEqual(MockView3);
40
+ // Push 4
41
+ const view4 = mockView(MockView4);
42
+ await nav.push(view4, null, { animated: false }, push4Done);
43
+ expect(push4Done).toHaveBeenCalledWith(hasCompleted, requiresTransition, view4, view3, 'forward');
44
+ expect(nav.getLength()).toEqual(4);
45
+ expect(nav['views'][0].component).toEqual(MockView1);
46
+ expect(nav['views'][1].component).toEqual(MockView2);
47
+ expect(nav['views'][2].component).toEqual(MockView3);
48
+ expect(nav['views'][3].component).toEqual(MockView4);
49
+ // Pop 1
50
+ await nav.pop({ animated: false }, pop1Done);
51
+ expect(pop1Done).toHaveBeenCalledWith(hasCompleted, requiresTransition, view3, view4, 'back');
52
+ expect(nav.getLength()).toEqual(3);
53
+ expect(nav['views'][0].component).toEqual(MockView1);
54
+ expect(nav['views'][1].component).toEqual(MockView2);
55
+ expect(nav['views'][2].component).toEqual(MockView3);
56
+ // Pop 2
57
+ await nav.pop({ animated: false }, pop2Done);
58
+ expect(pop2Done).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view3, 'back');
59
+ expect(nav.getLength()).toEqual(2);
60
+ expect(nav['views'][0].component).toEqual(MockView1);
61
+ expect(nav['views'][1].component).toEqual(MockView2);
62
+ // Pop 3
63
+ await nav.pop({ animated: false }, pop3Done);
64
+ expect(pop3Done).toHaveBeenCalledWith(hasCompleted, requiresTransition, view1, view2, 'back');
65
+ expect(nav.getLength()).toEqual(1);
66
+ expect(nav['views'][0].component).toEqual(MockView1);
67
+ }, 10000);
68
+ });
69
+ describe('push', () => {
70
+ it('should push a component as the first view', async () => {
71
+ const view1 = mockView(MockView1);
72
+ await nav.push(view1, null, null, trnsDone);
73
+ const hasCompleted = true;
74
+ const requiresTransition = true;
75
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view1, undefined, 'forward');
76
+ expect(nav.getLength()).toEqual(1);
77
+ expect(nav['views'][0].component).toEqual(MockView1);
78
+ expect(nav['isTransitioning']).toEqual(false);
79
+ }, 10000);
80
+ it('should push a component as the second view at the end', async () => {
81
+ const view1 = mockView(MockView1);
82
+ mockViews(nav, [view1]);
83
+ const view2 = mockView(MockView2);
84
+ await nav.push(view2, null, null, trnsDone);
85
+ const hasCompleted = true;
86
+ const requiresTransition = true;
87
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view1, 'forward');
88
+ expect(nav.getLength()).toEqual(2);
89
+ expect(nav['views'][0].component).toEqual(MockView1);
90
+ expect(nav['views'][1].component).toEqual(MockView2);
91
+ expect(nav['isTransitioning']).toEqual(false);
92
+ }, 10000);
93
+ it('should push a ViewController as the second view and fire lifecycles', async () => {
94
+ const view1 = mockView();
95
+ const view2 = mockView();
96
+ const instance1 = spyOnLifecycles(view1);
97
+ const instance2 = spyOnLifecycles(view2);
98
+ mockViews(nav, [view1]);
99
+ await nav.push(view2, null, null, trnsDone);
100
+ expect(instance1.ionViewWillEnter).not.toHaveBeenCalled();
101
+ expect(instance1.ionViewDidEnter).not.toHaveBeenCalled();
102
+ expect(instance1.ionViewWillLeave).toHaveBeenCalled();
103
+ expect(instance1.ionViewDidLeave).toHaveBeenCalled();
104
+ expect(instance1.ionViewWillUnload).not.toHaveBeenCalled();
105
+ expect(instance2.ionViewWillEnter).toHaveBeenCalled();
106
+ expect(instance2.ionViewDidEnter).toHaveBeenCalled();
107
+ expect(instance2.ionViewWillLeave).not.toHaveBeenCalled();
108
+ expect(instance2.ionViewDidLeave).not.toHaveBeenCalled();
109
+ expect(instance2.ionViewWillUnload).not.toHaveBeenCalled();
110
+ const hasCompleted = true;
111
+ const requiresTransition = true;
112
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view1, 'forward');
113
+ expect(nav.getLength()).toEqual(2);
114
+ }, 10000);
115
+ });
116
+ describe('insert', () => {
117
+ it('should insert at the beginning with no async transition', async () => {
118
+ const view4 = mockView(MockView4);
119
+ const instance4 = spyOnLifecycles(view4);
120
+ const opts = {};
121
+ mockViews(nav, [mockView(MockView1), mockView(MockView2), mockView(MockView3)]);
122
+ await nav.insert(0, view4, null, opts, trnsDone);
123
+ expect(instance4.ionViewWillEnter).not.toHaveBeenCalled();
124
+ expect(instance4.ionViewDidEnter).not.toHaveBeenCalled();
125
+ expect(instance4.ionViewWillLeave).not.toHaveBeenCalled();
126
+ expect(instance4.ionViewDidLeave).not.toHaveBeenCalled();
127
+ expect(instance4.ionViewWillUnload).not.toHaveBeenCalled();
128
+ const hasCompleted = true;
129
+ const requiresTransition = false;
130
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, undefined, undefined, undefined);
131
+ expect(nav.getLength()).toEqual(4);
132
+ expect(nav['views'][0].component).toEqual(MockView4);
133
+ expect(nav['views'][nav.getLength() - 1].component).toEqual(MockView3);
134
+ }, 10000);
135
+ it('should insert at the end when given -1', async () => {
136
+ const opts = {};
137
+ const view1 = mockView(MockView1);
138
+ mockViews(nav, [view1]);
139
+ const view2 = mockView(MockView2);
140
+ await nav.insert(-1, view2, null, opts, trnsDone);
141
+ const hasCompleted = true;
142
+ const requiresTransition = true;
143
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view1, 'forward');
144
+ expect(nav.getLength()).toEqual(2);
145
+ expect(nav['views'][nav.getLength() - 1].component).toEqual(MockView2);
146
+ }, 10000);
147
+ it('should insert at the end when given a number greater than actual length', async () => {
148
+ const view1 = mockView(MockView1);
149
+ mockViews(nav, [view1]);
150
+ const view2 = mockView(MockView2);
151
+ await nav.insert(9999, view2, null, null, trnsDone);
152
+ const hasCompleted = true;
153
+ const requiresTransition = true;
154
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view1, 'forward');
155
+ expect(nav.getLength()).toEqual(2);
156
+ expect(nav['views'][nav.getLength() - 1].component).toEqual(MockView2);
157
+ }, 10000);
158
+ it('should not insert if null view', (done) => {
159
+ mockViews(nav, [mockView(MockView1)]);
160
+ nav
161
+ .insert(-1, null, null, null, trnsDone)
162
+ .then(() => {
163
+ fail('it should not succeed');
164
+ })
165
+ .catch((err) => {
166
+ const hasCompleted = false;
167
+ const requiresTransition = false;
168
+ const rejectReason = new Error('invalid views to insert');
169
+ expect(err).toEqual(rejectReason);
170
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, rejectReason);
171
+ expect(nav.getLength()).toEqual(1);
172
+ expect(nav['views'][nav.getLength() - 1].component).toEqual(MockView1);
173
+ done();
174
+ });
175
+ }, 10000);
176
+ });
177
+ describe('insertPages', () => {
178
+ it('should insert all pages in the middle', async () => {
179
+ const view4 = mockView(MockView4);
180
+ const instance4 = spyOnLifecycles(view4);
181
+ const view1 = mockView(MockView1);
182
+ const view2 = mockView(MockView2);
183
+ const view3 = mockView(MockView3);
184
+ mockViews(nav, [view1, view2, view3]);
185
+ const view5 = mockView(MockView5);
186
+ await nav.insertPages(1, [view4, view5], null, trnsDone);
187
+ expect(instance4.ionViewWillEnter).not.toHaveBeenCalled();
188
+ expect(instance4.ionViewDidEnter).not.toHaveBeenCalled();
189
+ expect(instance4.ionViewWillLeave).not.toHaveBeenCalled();
190
+ expect(instance4.ionViewDidLeave).not.toHaveBeenCalled();
191
+ expect(instance4.ionViewWillUnload).not.toHaveBeenCalled();
192
+ const hasCompleted = true;
193
+ const requiresTransition = false;
194
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, undefined, undefined, undefined);
195
+ expect(nav.getLength()).toEqual(5);
196
+ expect(nav['views'][0].component).toEqual(MockView1);
197
+ expect(nav['views'][1].component).toEqual(MockView4);
198
+ expect(nav['views'][2].component).toEqual(MockView5);
199
+ expect(nav['views'][3].component).toEqual(MockView2);
200
+ expect(nav['views'][4].component).toEqual(MockView3);
201
+ expect(nav['views'][1].nav).toEqual(nav);
202
+ expect(nav['views'][2].nav).toEqual(nav);
203
+ }, 10000);
204
+ });
205
+ describe('pop', () => {
206
+ it('should not pop when no views in the stack', (done) => {
207
+ nav
208
+ .pop(null, trnsDone)
209
+ .then(() => {
210
+ fail('it should not succeed');
211
+ })
212
+ .catch((err) => {
213
+ const hasCompleted = false;
214
+ const requiresTransition = false;
215
+ const rejectReason = new Error('no views in the stack to be removed');
216
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, rejectReason);
217
+ expect(err).toEqual(rejectReason);
218
+ expect(nav.getLength()).toEqual(0);
219
+ expect(nav['isTransitioning']).toEqual(false);
220
+ done();
221
+ });
222
+ }, 10000);
223
+ it('should remove the last view and fire lifecycles', async () => {
224
+ const view1 = mockView(MockView1);
225
+ const view2 = mockView(MockView2);
226
+ mockViews(nav, [view1, view2]);
227
+ const instance1 = spyOnLifecycles(view1);
228
+ const instance2 = spyOnLifecycles(view2);
229
+ await nav.pop(null, trnsDone);
230
+ expect(instance1.ionViewWillEnter).toHaveBeenCalled();
231
+ expect(instance1.ionViewDidEnter).toHaveBeenCalled();
232
+ expect(instance1.ionViewWillLeave).not.toHaveBeenCalled();
233
+ expect(instance1.ionViewDidLeave).not.toHaveBeenCalled();
234
+ expect(instance1.ionViewWillUnload).not.toHaveBeenCalled();
235
+ expect(instance2.ionViewWillEnter).not.toHaveBeenCalled();
236
+ expect(instance2.ionViewDidEnter).not.toHaveBeenCalled();
237
+ expect(instance2.ionViewWillLeave).toHaveBeenCalled();
238
+ expect(instance2.ionViewDidLeave).toHaveBeenCalled();
239
+ expect(instance2.ionViewWillUnload).toHaveBeenCalled();
240
+ const hasCompleted = true;
241
+ const requiresTransition = true;
242
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view1, view2, 'back');
243
+ expect(nav.getLength()).toEqual(1);
244
+ expect(nav['views'][0].component).toEqual(MockView1);
245
+ expect(nav['isTransitioning']).toEqual(false);
246
+ }, 10000);
247
+ });
248
+ describe('popTo', () => {
249
+ it('should pop to a view', async () => {
250
+ const view1 = mockView(MockView1);
251
+ const view2 = mockView(MockView2);
252
+ const view3 = mockView(MockView3);
253
+ mockViews(nav, [view1, view2, view3]);
254
+ await nav.popTo(view2, null, trnsDone);
255
+ const hasCompleted = true;
256
+ const requiresTransition = true;
257
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view3, 'back');
258
+ expect(nav.getLength()).toEqual(2);
259
+ expect(nav['views'][0].component).toEqual(MockView1);
260
+ expect(nav['views'][1].component).toEqual(MockView2);
261
+ }, 10000);
262
+ it('should pop to using an index number', async () => {
263
+ const view1 = mockView(MockView1);
264
+ const view2 = mockView(MockView2);
265
+ const view3 = mockView(MockView3);
266
+ const view4 = mockView(MockView4);
267
+ mockViews(nav, [view1, view2, view3, view4]);
268
+ await nav.popTo(1, null, trnsDone);
269
+ const hasCompleted = true;
270
+ const requiresTransition = true;
271
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view4, 'back');
272
+ expect(nav.getLength()).toEqual(2);
273
+ expect(nav['views'][0].component).toEqual(MockView1);
274
+ expect(nav['views'][1].component).toEqual(MockView2);
275
+ }, 10000);
276
+ it('should pop to first using an index number', async () => {
277
+ const view1 = mockView(MockView1);
278
+ const view2 = mockView(MockView2);
279
+ const view3 = mockView(MockView3);
280
+ const view4 = mockView(MockView4);
281
+ mockViews(nav, [view1, view2, view3, view4]);
282
+ const instance1 = spyOnLifecycles(view1);
283
+ const instance2 = spyOnLifecycles(view2);
284
+ const instance3 = spyOnLifecycles(view3);
285
+ const instance4 = spyOnLifecycles(view4);
286
+ await nav.popTo(0, null, trnsDone);
287
+ expect(instance1.ionViewWillEnter).toHaveBeenCalled();
288
+ expect(instance1.ionViewDidEnter).toHaveBeenCalled();
289
+ expect(instance1.ionViewWillLeave).not.toHaveBeenCalled();
290
+ expect(instance1.ionViewDidLeave).not.toHaveBeenCalled();
291
+ expect(instance1.ionViewWillUnload).not.toHaveBeenCalled();
292
+ expect(instance2.ionViewWillEnter).not.toHaveBeenCalled();
293
+ expect(instance2.ionViewDidEnter).not.toHaveBeenCalled();
294
+ expect(instance2.ionViewWillLeave).toHaveBeenCalled();
295
+ expect(instance2.ionViewDidLeave).toHaveBeenCalled();
296
+ expect(instance2.ionViewWillUnload).toHaveBeenCalled();
297
+ expect(instance3.ionViewWillEnter).not.toHaveBeenCalled();
298
+ expect(instance3.ionViewDidEnter).not.toHaveBeenCalled();
299
+ expect(instance3.ionViewWillLeave).toHaveBeenCalled();
300
+ expect(instance3.ionViewDidLeave).toHaveBeenCalled();
301
+ expect(instance3.ionViewWillUnload).toHaveBeenCalled();
302
+ expect(instance4.ionViewWillEnter).not.toHaveBeenCalled();
303
+ expect(instance4.ionViewDidEnter).not.toHaveBeenCalled();
304
+ expect(instance4.ionViewWillLeave).toHaveBeenCalled();
305
+ expect(instance4.ionViewDidLeave).toHaveBeenCalled();
306
+ expect(instance4.ionViewWillUnload).toHaveBeenCalled();
307
+ const hasCompleted = true;
308
+ const requiresTransition = true;
309
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view1, view4, 'back');
310
+ expect(nav.getLength()).toEqual(1);
311
+ expect(nav['views'][0].component).toEqual(MockView1);
312
+ }, 10000);
313
+ });
314
+ describe('popToRoot', () => {
315
+ it('should pop to the first view', async () => {
316
+ const view1 = mockView(MockView1);
317
+ const view2 = mockView(MockView2);
318
+ const view3 = mockView(MockView3);
319
+ const view4 = mockView(MockView4);
320
+ mockViews(nav, [view1, view2, view3, view4]);
321
+ const instance1 = spyOnLifecycles(view1);
322
+ const instance2 = spyOnLifecycles(view2);
323
+ const instance3 = spyOnLifecycles(view3);
324
+ const instance4 = spyOnLifecycles(view4);
325
+ await nav.popToRoot(null, trnsDone);
326
+ expect(instance1.ionViewWillEnter).toHaveBeenCalled();
327
+ expect(instance1.ionViewDidEnter).toHaveBeenCalled();
328
+ expect(instance1.ionViewWillLeave).not.toHaveBeenCalled();
329
+ expect(instance1.ionViewDidLeave).not.toHaveBeenCalled();
330
+ expect(instance1.ionViewWillUnload).not.toHaveBeenCalled();
331
+ expect(instance2.ionViewWillEnter).not.toHaveBeenCalled();
332
+ expect(instance2.ionViewDidEnter).not.toHaveBeenCalled();
333
+ expect(instance2.ionViewWillLeave).toHaveBeenCalled();
334
+ expect(instance2.ionViewDidLeave).toHaveBeenCalled();
335
+ expect(instance2.ionViewWillUnload).toHaveBeenCalled();
336
+ expect(instance3.ionViewWillEnter).not.toHaveBeenCalled();
337
+ expect(instance3.ionViewDidEnter).not.toHaveBeenCalled();
338
+ expect(instance3.ionViewWillLeave).toHaveBeenCalled();
339
+ expect(instance3.ionViewDidLeave).toHaveBeenCalled();
340
+ expect(instance3.ionViewWillUnload).toHaveBeenCalled();
341
+ expect(instance4.ionViewWillEnter).not.toHaveBeenCalled();
342
+ expect(instance4.ionViewDidEnter).not.toHaveBeenCalled();
343
+ expect(instance4.ionViewWillLeave).toHaveBeenCalled();
344
+ expect(instance4.ionViewDidLeave).toHaveBeenCalled();
345
+ expect(instance4.ionViewWillUnload).toHaveBeenCalled();
346
+ const hasCompleted = true;
347
+ const requiresTransition = true;
348
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view1, view4, 'back');
349
+ expect(nav.getLength()).toEqual(1);
350
+ expect(nav['views'][0].component).toEqual(MockView1);
351
+ }, 10000);
352
+ it("should not pop first view if it's the only view", async () => {
353
+ const view1 = mockView(MockView1);
354
+ mockViews(nav, [view1]);
355
+ await nav.popToRoot(null, trnsDone);
356
+ const hasCompleted = true;
357
+ const requiresTransition = false;
358
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, undefined, undefined, undefined);
359
+ expect(nav.getLength()).toEqual(1);
360
+ expect(nav['views'][0].component).toEqual(MockView1);
361
+ }, 10000);
362
+ });
363
+ describe('remove', () => {
364
+ it('should remove the first three views in the beginning, no last view transition', async () => {
365
+ const view1 = mockView(MockView1);
366
+ const view2 = mockView(MockView2);
367
+ const view3 = mockView(MockView3);
368
+ const view4 = mockView(MockView4);
369
+ mockViews(nav, [view1, view2, view3, view4]);
370
+ const instance1 = spyOnLifecycles(view1);
371
+ const instance2 = spyOnLifecycles(view2);
372
+ const instance3 = spyOnLifecycles(view3);
373
+ const instance4 = spyOnLifecycles(view4);
374
+ await nav.removeIndex(0, 3, null, trnsDone);
375
+ expect(instance1.ionViewWillEnter).not.toHaveBeenCalled();
376
+ expect(instance1.ionViewDidEnter).not.toHaveBeenCalled();
377
+ expect(instance1.ionViewWillLeave).toHaveBeenCalled();
378
+ expect(instance1.ionViewDidLeave).toHaveBeenCalled();
379
+ expect(instance1.ionViewWillUnload).toHaveBeenCalled();
380
+ expect(instance2.ionViewWillEnter).not.toHaveBeenCalled();
381
+ expect(instance2.ionViewDidEnter).not.toHaveBeenCalled();
382
+ expect(instance2.ionViewWillLeave).toHaveBeenCalled();
383
+ expect(instance2.ionViewDidLeave).toHaveBeenCalled();
384
+ expect(instance2.ionViewWillUnload).toHaveBeenCalled();
385
+ expect(instance3.ionViewWillEnter).not.toHaveBeenCalled();
386
+ expect(instance3.ionViewDidEnter).not.toHaveBeenCalled();
387
+ expect(instance3.ionViewWillLeave).toHaveBeenCalled();
388
+ expect(instance3.ionViewDidLeave).toHaveBeenCalled();
389
+ expect(instance3.ionViewWillUnload).toHaveBeenCalled();
390
+ expect(instance4.ionViewWillEnter).not.toHaveBeenCalled();
391
+ expect(instance4.ionViewDidEnter).not.toHaveBeenCalled();
392
+ expect(instance4.ionViewWillLeave).not.toHaveBeenCalled();
393
+ expect(instance4.ionViewDidLeave).not.toHaveBeenCalled();
394
+ expect(instance4.ionViewWillUnload).not.toHaveBeenCalled();
395
+ const hasCompleted = true;
396
+ const requiresTransition = false;
397
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, undefined, undefined, undefined);
398
+ expect(nav.getLength()).toEqual(1);
399
+ expect(nav['views'][0].component).toEqual(MockView4);
400
+ }, 10000);
401
+ it('should remove two views in the middle', async () => {
402
+ const view1 = mockView(MockView1);
403
+ const view2 = mockView(MockView2);
404
+ const view3 = mockView(MockView3);
405
+ const view4 = mockView(MockView4);
406
+ const view5 = mockView(MockView5);
407
+ mockViews(nav, [view1, view2, view3, view4, view5]);
408
+ const instance1 = spyOnLifecycles(view1);
409
+ const instance2 = spyOnLifecycles(view2);
410
+ const instance3 = spyOnLifecycles(view3);
411
+ const instance4 = spyOnLifecycles(view4);
412
+ const instance5 = spyOnLifecycles(view5);
413
+ await nav.removeIndex(2, 2, null, trnsDone);
414
+ expect(instance1.ionViewWillEnter).not.toHaveBeenCalled();
415
+ expect(instance1.ionViewDidEnter).not.toHaveBeenCalled();
416
+ expect(instance1.ionViewWillLeave).not.toHaveBeenCalled();
417
+ expect(instance1.ionViewDidLeave).not.toHaveBeenCalled();
418
+ expect(instance1.ionViewWillUnload).not.toHaveBeenCalled();
419
+ expect(instance2.ionViewWillEnter).not.toHaveBeenCalled();
420
+ expect(instance2.ionViewDidEnter).not.toHaveBeenCalled();
421
+ expect(instance2.ionViewWillLeave).not.toHaveBeenCalled();
422
+ expect(instance2.ionViewDidLeave).not.toHaveBeenCalled();
423
+ expect(instance2.ionViewWillUnload).not.toHaveBeenCalled();
424
+ expect(instance3.ionViewWillEnter).not.toHaveBeenCalled();
425
+ expect(instance3.ionViewDidEnter).not.toHaveBeenCalled();
426
+ expect(instance3.ionViewWillLeave).toHaveBeenCalled();
427
+ expect(instance3.ionViewDidLeave).toHaveBeenCalled();
428
+ expect(instance3.ionViewWillUnload).toHaveBeenCalled();
429
+ expect(instance4.ionViewWillEnter).not.toHaveBeenCalled();
430
+ expect(instance4.ionViewDidEnter).not.toHaveBeenCalled();
431
+ expect(instance4.ionViewWillLeave).toHaveBeenCalled();
432
+ expect(instance4.ionViewDidLeave).toHaveBeenCalled();
433
+ expect(instance4.ionViewWillUnload).toHaveBeenCalled();
434
+ expect(instance5.ionViewWillEnter).not.toHaveBeenCalled();
435
+ expect(instance5.ionViewDidEnter).not.toHaveBeenCalled();
436
+ expect(instance5.ionViewWillLeave).not.toHaveBeenCalled();
437
+ expect(instance5.ionViewDidLeave).not.toHaveBeenCalled();
438
+ expect(instance5.ionViewWillUnload).not.toHaveBeenCalled();
439
+ const hasCompleted = true;
440
+ const requiresTransition = false;
441
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, undefined, undefined, undefined);
442
+ expect(nav.getLength()).toEqual(3);
443
+ expect(nav['views'][0].component).toEqual(MockView1);
444
+ expect(nav['views'][1].component).toEqual(MockView2);
445
+ expect(nav['views'][2].component).toEqual(MockView5);
446
+ }, 10000);
447
+ it('should remove the last two views at the end', async () => {
448
+ const view1 = mockView(MockView1);
449
+ const view2 = mockView(MockView2);
450
+ const view3 = mockView(MockView3);
451
+ const view4 = mockView(MockView4);
452
+ mockViews(nav, [view1, view2, view3, view4]);
453
+ const instance1 = spyOnLifecycles(view1);
454
+ const instance2 = spyOnLifecycles(view2);
455
+ const instance3 = spyOnLifecycles(view3);
456
+ const instance4 = spyOnLifecycles(view4);
457
+ await nav.removeIndex(2, 2, null, trnsDone);
458
+ expect(instance1.ionViewWillEnter).not.toHaveBeenCalled();
459
+ expect(instance1.ionViewDidEnter).not.toHaveBeenCalled();
460
+ expect(instance1.ionViewWillLeave).not.toHaveBeenCalled();
461
+ expect(instance1.ionViewDidLeave).not.toHaveBeenCalled();
462
+ expect(instance1.ionViewWillUnload).not.toHaveBeenCalled();
463
+ expect(instance2.ionViewWillEnter).toHaveBeenCalled();
464
+ expect(instance2.ionViewDidEnter).toHaveBeenCalled();
465
+ expect(instance2.ionViewWillLeave).not.toHaveBeenCalled();
466
+ expect(instance2.ionViewDidLeave).not.toHaveBeenCalled();
467
+ expect(instance2.ionViewWillUnload).not.toHaveBeenCalled();
468
+ expect(instance3.ionViewWillEnter).not.toHaveBeenCalled();
469
+ expect(instance3.ionViewDidEnter).not.toHaveBeenCalled();
470
+ expect(instance3.ionViewWillLeave).toHaveBeenCalled();
471
+ expect(instance3.ionViewDidLeave).toHaveBeenCalled();
472
+ expect(instance3.ionViewWillUnload).toHaveBeenCalled();
473
+ expect(instance4.ionViewWillEnter).not.toHaveBeenCalled();
474
+ expect(instance4.ionViewDidEnter).not.toHaveBeenCalled();
475
+ expect(instance4.ionViewWillLeave).toHaveBeenCalled();
476
+ expect(instance4.ionViewDidLeave).toHaveBeenCalled();
477
+ expect(instance4.ionViewWillUnload).toHaveBeenCalled();
478
+ const hasCompleted = true;
479
+ const requiresTransition = true;
480
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view4, 'back');
481
+ expect(nav.getLength()).toEqual(2);
482
+ expect(nav['views'][0].component).toEqual(MockView1);
483
+ expect(nav['views'][1].component).toEqual(MockView2);
484
+ }, 10000);
485
+ });
486
+ describe('setRoot', () => {
487
+ it('should set a ViewController as the root when its the last view, no transition', async () => {
488
+ const view1 = mockView(MockView1);
489
+ const view2 = mockView(MockView2);
490
+ const view3 = mockView(MockView3);
491
+ mockViews(nav, [view1, view2, view3]);
492
+ const instance1 = spyOnLifecycles(view1);
493
+ const instance2 = spyOnLifecycles(view2);
494
+ const instance3 = spyOnLifecycles(view3);
495
+ await nav.setRoot(view3, null, null, trnsDone);
496
+ expect(instance1.ionViewWillEnter).not.toHaveBeenCalled();
497
+ expect(instance1.ionViewDidEnter).not.toHaveBeenCalled();
498
+ expect(instance1.ionViewWillLeave).toHaveBeenCalled();
499
+ expect(instance1.ionViewDidLeave).toHaveBeenCalled();
500
+ expect(instance1.ionViewWillUnload).toHaveBeenCalled();
501
+ expect(instance2.ionViewWillEnter).not.toHaveBeenCalled();
502
+ expect(instance2.ionViewDidEnter).not.toHaveBeenCalled();
503
+ expect(instance2.ionViewWillLeave).toHaveBeenCalled();
504
+ expect(instance2.ionViewDidLeave).toHaveBeenCalled();
505
+ expect(instance2.ionViewWillUnload).toHaveBeenCalled();
506
+ expect(instance3.ionViewWillEnter).not.toHaveBeenCalled();
507
+ expect(instance3.ionViewDidEnter).not.toHaveBeenCalled();
508
+ expect(instance3.ionViewWillLeave).not.toHaveBeenCalled();
509
+ expect(instance3.ionViewDidLeave).not.toHaveBeenCalled();
510
+ expect(instance3.ionViewWillUnload).not.toHaveBeenCalled();
511
+ const hasCompleted = true;
512
+ const requiresTransition = false;
513
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, undefined, undefined, undefined);
514
+ expect(nav.getLength()).toEqual(1);
515
+ expect(nav['views'][0].component).toEqual(MockView3);
516
+ }, 10000);
517
+ it('should set a ViewController as the root when its the middle view, with transition', async () => {
518
+ const view1 = mockView(MockView1);
519
+ const view2 = mockView(MockView2);
520
+ const view3 = mockView(MockView3);
521
+ mockViews(nav, [view1, view2, view3]);
522
+ const instance1 = spyOnLifecycles(view1);
523
+ const instance2 = spyOnLifecycles(view2);
524
+ const instance3 = spyOnLifecycles(view3);
525
+ await nav.setRoot(view2, null, null, trnsDone);
526
+ expect(instance1.ionViewWillEnter).not.toHaveBeenCalled();
527
+ expect(instance1.ionViewDidEnter).not.toHaveBeenCalled();
528
+ expect(instance1.ionViewWillLeave).toHaveBeenCalled();
529
+ expect(instance1.ionViewDidLeave).toHaveBeenCalled();
530
+ expect(instance1.ionViewWillUnload).toHaveBeenCalled();
531
+ expect(instance2.ionViewWillEnter).toHaveBeenCalled();
532
+ expect(instance2.ionViewDidEnter).toHaveBeenCalled();
533
+ expect(instance2.ionViewWillLeave).not.toHaveBeenCalled();
534
+ expect(instance2.ionViewDidLeave).not.toHaveBeenCalled();
535
+ expect(instance2.ionViewWillUnload).not.toHaveBeenCalled();
536
+ expect(instance3.ionViewWillEnter).not.toHaveBeenCalled();
537
+ expect(instance3.ionViewDidEnter).not.toHaveBeenCalled();
538
+ expect(instance3.ionViewWillLeave).toHaveBeenCalled();
539
+ expect(instance3.ionViewDidLeave).toHaveBeenCalled();
540
+ expect(instance3.ionViewWillUnload).toHaveBeenCalled();
541
+ const hasCompleted = true;
542
+ const requiresTransition = true;
543
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view2, view3, 'back');
544
+ expect(nav.getLength()).toEqual(1);
545
+ expect(nav['views'][0].component).toEqual(MockView2);
546
+ }, 10000);
547
+ it('should set a ViewController as the root when its the first view, with transition', async () => {
548
+ const view1 = mockView(MockView1);
549
+ const view2 = mockView(MockView2);
550
+ const view3 = mockView(MockView3);
551
+ mockViews(nav, [view1, view2, view3]);
552
+ const instance1 = spyOnLifecycles(view1);
553
+ const instance2 = spyOnLifecycles(view2);
554
+ const instance3 = spyOnLifecycles(view3);
555
+ await nav.setRoot(view1, null, null, trnsDone);
556
+ expect(instance1.ionViewWillEnter).toHaveBeenCalled();
557
+ expect(instance1.ionViewDidEnter).toHaveBeenCalled();
558
+ expect(instance1.ionViewWillLeave).not.toHaveBeenCalled();
559
+ expect(instance1.ionViewDidLeave).not.toHaveBeenCalled();
560
+ expect(instance1.ionViewWillUnload).not.toHaveBeenCalled();
561
+ expect(instance2.ionViewWillEnter).not.toHaveBeenCalled();
562
+ expect(instance2.ionViewDidEnter).not.toHaveBeenCalled();
563
+ expect(instance2.ionViewWillLeave).toHaveBeenCalled();
564
+ expect(instance2.ionViewDidLeave).toHaveBeenCalled();
565
+ expect(instance2.ionViewWillUnload).toHaveBeenCalled();
566
+ expect(instance3.ionViewWillEnter).not.toHaveBeenCalled();
567
+ expect(instance3.ionViewDidEnter).not.toHaveBeenCalled();
568
+ expect(instance3.ionViewWillLeave).toHaveBeenCalled();
569
+ expect(instance3.ionViewDidLeave).toHaveBeenCalled();
570
+ expect(instance3.ionViewWillUnload).toHaveBeenCalled();
571
+ const hasCompleted = true;
572
+ const requiresTransition = true;
573
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view1, view3, 'back');
574
+ expect(nav.getLength()).toEqual(1);
575
+ expect(nav['views'][0].component).toEqual(MockView1);
576
+ }, 10000);
577
+ it('should set a page component as the root, with transition', async () => {
578
+ const view1 = mockView(MockView1);
579
+ const view2 = mockView(MockView2);
580
+ const view3 = mockView(MockView3);
581
+ mockViews(nav, [view1, view2, view3]);
582
+ const instance1 = spyOnLifecycles(view1);
583
+ const instance2 = spyOnLifecycles(view2);
584
+ const instance3 = spyOnLifecycles(view3);
585
+ const view4 = mockView(MockView4);
586
+ await nav.setRoot(view4, null, null, trnsDone);
587
+ expect(instance1.ionViewWillUnload).toHaveBeenCalled();
588
+ expect(instance2.ionViewWillUnload).toHaveBeenCalled();
589
+ expect(instance3.ionViewWillUnload).toHaveBeenCalled();
590
+ const hasCompleted = true;
591
+ const requiresTransition = true;
592
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view4, view3, 'back');
593
+ expect(nav.getLength()).toEqual(1);
594
+ expect(nav['views'][0].component).toEqual(MockView4);
595
+ }, 10000);
596
+ });
597
+ describe('setPages', () => {
598
+ it('should set the pages from an array, starting at the root, with transition', async () => {
599
+ const view1 = mockView(MockView1);
600
+ const view2 = mockView(MockView2);
601
+ mockViews(nav, [view1, view2]);
602
+ const instance1 = spyOnLifecycles(view1);
603
+ const instance2 = spyOnLifecycles(view2);
604
+ const view4 = mockView(MockView4);
605
+ const view5 = mockView(MockView5);
606
+ await nav.setPages([{ component: view4 }, { component: view5 }], null, trnsDone);
607
+ expect(instance1.ionViewWillUnload).toHaveBeenCalled();
608
+ expect(instance2.ionViewWillUnload).toHaveBeenCalled();
609
+ const hasCompleted = true;
610
+ const requiresTransition = true;
611
+ expect(trnsDone).toHaveBeenCalledWith(hasCompleted, requiresTransition, view5, view2, 'back');
612
+ expect(nav.getLength()).toEqual(2);
613
+ expect(nav['views'][0].component).toEqual(MockView4);
614
+ expect(nav['views'][1].component).toEqual(MockView5);
615
+ }, 10000);
616
+ });
617
+ describe('canStart', () => {
618
+ it('should not swipe back when its not enabled', () => {
619
+ nav.swipeGesture = false;
620
+ const view1 = mockView();
621
+ const view2 = mockView();
622
+ mockViews(nav, [view1, view2]);
623
+ const result = nav['canStart']();
624
+ expect(result).toEqual(false);
625
+ });
626
+ it('should swipe back when has a view to go back to', () => {
627
+ nav.swipeGesture = true;
628
+ const view1 = mockView();
629
+ const view2 = mockView();
630
+ mockViews(nav, [view1, view2]);
631
+ const result = nav['canStart']();
632
+ expect(result).toEqual(true);
633
+ });
634
+ });
635
+ function spyOnLifecycles(view) {
636
+ const element = view.element;
637
+ Object.assign(element, {
638
+ ionViewWillEnter: () => {
639
+ return;
640
+ },
641
+ ionViewDidEnter: () => {
642
+ return;
643
+ },
644
+ ionViewWillLeave: () => {
645
+ return;
646
+ },
647
+ ionViewDidLeave: () => {
648
+ return;
649
+ },
650
+ ionViewWillUnload: () => {
651
+ return;
652
+ },
653
+ });
654
+ const instance = {
655
+ ionViewWillEnter: jest.spyOn(element, 'ionViewWillEnter'),
656
+ ionViewDidEnter: jest.spyOn(element, 'ionViewDidEnter'),
657
+ ionViewWillLeave: jest.spyOn(element, 'ionViewWillLeave'),
658
+ ionViewDidLeave: jest.spyOn(element, 'ionViewDidLeave'),
659
+ ionViewWillUnload: jest.spyOn(element, 'ionViewWillUnload'),
660
+ };
661
+ element.dispatchEvent = (ev) => {
662
+ switch (ev.type) {
663
+ case 'ionViewWillEnter':
664
+ element.ionViewWillEnter();
665
+ break;
666
+ case 'ionViewDidEnter':
667
+ element.ionViewDidEnter();
668
+ break;
669
+ case 'ionViewWillLeave':
670
+ element.ionViewWillLeave();
671
+ break;
672
+ case 'ionViewDidLeave':
673
+ element.ionViewDidLeave();
674
+ break;
675
+ case 'ionViewWillUnload':
676
+ element.ionViewWillUnload();
677
+ break;
678
+ }
679
+ };
680
+ return instance;
681
+ }
682
+ let trnsDone;
683
+ let nav;
684
+ beforeEach(async () => {
685
+ trnsDone = jest.fn();
686
+ const page = await newSpecPage({
687
+ components: [Nav],
688
+ html: `<ion-nav></ion-nav>`,
689
+ autoApplyChanges: true,
690
+ });
691
+ nav = page.rootInstance;
692
+ });
693
+ const MockView = 'mock-view';
694
+ const MockView1 = 'mock-view1';
695
+ const MockView2 = 'mock-view2';
696
+ const MockView3 = 'mock-view3';
697
+ const MockView4 = 'mock-view4';
698
+ const MockView5 = 'mock-view5';
699
+ const mockWebAnimation = (el) => {
700
+ Element.prototype.animate = jest.fn();
701
+ el.animate = () => {
702
+ const animation = {
703
+ stop: jest.fn(),
704
+ pause: jest.fn(),
705
+ cancel: jest.fn(),
706
+ onfinish: undefined,
707
+ };
708
+ animation.play = () => {
709
+ if (animation.onfinish) {
710
+ animation.onfinish();
711
+ }
712
+ };
713
+ return animation;
714
+ };
715
+ };
716
+ function mockView(component, params) {
717
+ if (!component) {
718
+ component = MockView;
719
+ }
720
+ const view = new ViewController(component, params);
721
+ view.element = document.createElement(component);
722
+ mockWebAnimation(view.element);
723
+ return view;
724
+ }
725
+ function mockViews(navI, views) {
726
+ navI['views'] = views;
727
+ views.forEach((v) => {
728
+ v.nav = navI;
729
+ });
730
+ }
731
+ // function mockNavController(): Promise<Nav> {
732
+ // const navI = new Nav() as any;
733
+ // navI.animated = false;
734
+ // navI.el = win.document.createElement('ion-nav');
735
+ // navI.win = win;
736
+ // navI.queue = { write: (fn: any) => fn(), read: (fn: any) => fn() };
737
+ // navI.config = new Config();
738
+ // navI.config.reset({ animated: false });
739
+ // navI._viewInit = (enteringView: ViewController) => {
740
+ // if (!enteringView.element) {
741
+ // enteringView.element = (typeof enteringView.component === 'string')
742
+ // ? win.document.createElement(enteringView.component)
743
+ // : enteringView.element = enteringView.component as HTMLElement;
744
+ // }
745
+ // enteringView.state = VIEW_STATE_ATTACHED;
746
+ // };
747
+ // return navI;
748
+ // }
749
+ });