1
1
import { strict as assert } from 'assert' ;
2
2
import ServerDriver from '../../src/driver/Server' ;
3
- import { IRouteConfig , IRouter } from '../../src/interface/router' ;
3
+ import { ILocation , RouteActionType } from '../../src/interface/common' ;
4
+ import { IPopNavigationOptions , IRouteConfig , IRouter , RouteEventType } from '../../src/interface/router' ;
4
5
import RouteManager from '../../src/lib/route/RouteManager' ;
5
6
import Router from '../../src/lib/Router' ;
6
7
// tslint:disable: max-classes-per-file
@@ -197,21 +198,22 @@ describe('src/lib/Router.ts', () => {
197
198
it ( 'the wrong parameter n should be ok' , ( ) => {
198
199
class TestDriver extends ServerDriver {
199
200
public pop ( n : number , payload ?: unknown ) : void {
200
- assert . equal ( 1 , 2 ) ;
201
- assert . equal ( n , 1 ) ;
202
- assert . equal ( payload , undefined ) ;
201
+ assert . equal ( n , 2 ) ;
202
+ assert . equal ( ( payload as any ) . transition , undefined ) ;
203
203
}
204
204
}
205
- const router = new Router ( { routes : [ ] } , new TestDriver ( ) ) ;
206
- router . pop ( { n : 100 } ) ;
207
- class TestDriver1 extends ServerDriver {
208
- public pop ( n : number , payload ?: unknown ) : void {
209
- assert . equal ( n , 1 ) ;
210
- assert . equal ( payload , undefined ) ;
205
+ const routes = [
206
+ {
207
+ path : 'test1' ,
208
+ component : 'aa'
211
209
}
212
- }
213
- const router1 = new Router ( { routes : [ ] } , new TestDriver1 ( ) ) ;
214
- router1 . pop ( { n : 0 } ) ;
210
+ ] ;
211
+ const driver = new TestDriver ( ) ;
212
+ driver . push ( '/test1?a=2' ) ;
213
+ const router = new Router ( { routes } , driver ) ;
214
+ driver . push ( '/test1?a=3' ) ;
215
+ driver . push ( '/test1?a=4' ) ;
216
+ router . pop ( { n : 100 } ) ;
215
217
} ) ;
216
218
} ) ;
217
219
it ( 'Router#replace' ) ;
@@ -227,8 +229,204 @@ describe('src/lib/Router.ts', () => {
227
229
assert . equal ( router . currentRouteInfo ! . index , 0 ) ;
228
230
assert . equal ( router . currentRouteInfo ! . route . name , '' ) ;
229
231
} ) ;
230
- it ( 'Router#prepush' ) ;
231
- it ( 'Router#prepop' ) ;
232
+ describe ( 'Router#prepush' , ( ) => {
233
+ it ( 'route info should be correct' , done => {
234
+ let id : string | undefined ;
235
+ class TestDriver extends ServerDriver {
236
+ public generateNextId ( ) {
237
+ id = super . generateNextId ( ) ;
238
+ return id ;
239
+ }
240
+ }
241
+ const driver = new TestDriver ( ) ;
242
+ driver . push ( '/test1?a=2' ) ;
243
+ const routes = [
244
+ {
245
+ path : 'test1' ,
246
+ component : 'aa'
247
+ }
248
+ ] ;
249
+
250
+ const router = new Router ( { routes } , driver ) ;
251
+ router . on ( RouteEventType . WILL_CHANGE , ( type , route , transitionOption ) => {
252
+ assert . equal ( type , RouteActionType . PUSH ) ;
253
+ assert ( route ) ;
254
+ assert . equal ( route ! . index , 1 ) ;
255
+ assert . equal ( route ! . route . id , id ) ;
256
+ assert . equal ( route ! . route . path , '/test1?a=3' ) ;
257
+ done ( ) ;
258
+ } ) ;
259
+ router . prepush ( '/test1?a=3' ) ;
260
+ assert ( id ) ;
261
+ } ) ;
262
+ it ( 'incorrect path should be ok' , done => {
263
+ class TestDriver extends ServerDriver {
264
+ public deprecateNextId ( ) {
265
+ done ( ) ;
266
+ }
267
+ }
268
+ const driver = new TestDriver ( ) ;
269
+ driver . push ( '/test1?a=2' ) ;
270
+ const routes = [
271
+ {
272
+ path : 'test1' ,
273
+ component : 'aa'
274
+ }
275
+ ] ;
276
+
277
+ const router = new Router ( { routes } , driver ) ;
278
+ router . on ( RouteEventType . WILL_CHANGE , ( type , route , transitionOption ) => {
279
+ assert . fail ( 'should not emit events' ) ;
280
+ } ) ;
281
+ router . prepush ( '/test2?a=3' ) ;
282
+ } ) ;
283
+ it ( 'cancel prepush should be ok' , done => {
284
+ let deprecatedNextId = false ;
285
+ class TestDriver extends ServerDriver {
286
+ public deprecateNextId ( ) {
287
+ deprecatedNextId = true ;
288
+ }
289
+ }
290
+ const driver = new TestDriver ( ) ;
291
+ driver . push ( '/test1?a=2' ) ;
292
+ const routes = [
293
+ {
294
+ path : 'test1' ,
295
+ component : 'aa'
296
+ }
297
+ ] ;
298
+
299
+ const router = new Router ( { routes } , driver ) ;
300
+ router . on ( RouteEventType . CANCEL_CHANGE , route => {
301
+ assert ( deprecatedNextId ) ;
302
+ done ( ) ;
303
+ } ) ;
304
+ const confirm = router . prepush ( '/test1?a=3' ) ;
305
+ confirm ( true ) ;
306
+ } ) ;
307
+ it ( 'confirm prepush should be ok' , done => {
308
+ class TestRouter extends Router < string > {
309
+ public push ( path : ILocation ) {
310
+ assert . equal ( path , '/test1?a=3' ) ;
311
+ done ( ) ;
312
+ }
313
+ }
314
+ const driver = new ServerDriver ( ) ;
315
+ driver . push ( '/test1?a=2' ) ;
316
+ const routes = [
317
+ {
318
+ path : 'test1' ,
319
+ component : 'aa'
320
+ }
321
+ ] ;
322
+
323
+ const router = new TestRouter ( { routes } , driver ) ;
324
+ const confirm = router . prepush ( '/test1?a=3' ) ;
325
+ confirm ( ) ;
326
+ } ) ;
327
+ } ) ;
328
+ describe ( 'Router#prepop' , ( ) => {
329
+ it ( 'empty stack should be ok' , ( ) => {
330
+ const routes = [
331
+ {
332
+ path : 'test1' ,
333
+ component : 'aa'
334
+ }
335
+ ] ;
336
+ const driver = new ServerDriver ( ) ;
337
+ driver . push ( '/test1?a=2' ) ;
338
+ const router = new Router ( { routes } , driver ) ;
339
+ router . on ( RouteEventType . WILL_CHANGE , type => {
340
+ assert . fail ( 'should not emit events' ) ;
341
+ } ) ;
342
+ router . prepop ( ) ;
343
+ } ) ;
344
+ it ( 'prepop with confirm should be ok' , done => {
345
+ const routes = [
346
+ {
347
+ path : 'test1' ,
348
+ component : 'aa'
349
+ }
350
+ ] ;
351
+ const driver = new ServerDriver ( ) ;
352
+ driver . push ( '/test1?a=2' ) ;
353
+ const router = new Router ( { routes } , driver ) ;
354
+ driver . push ( '/test1?a=3' ) ;
355
+
356
+ router . on ( RouteEventType . WILL_CHANGE , ( type , route , transition ) => {
357
+ assert . equal ( type , RouteActionType . POP ) ;
358
+ assert ( route ) ;
359
+ assert . equal ( route ! . index , 0 ) ;
360
+ assert . equal ( route ! . route . path , '/test1?a=2' ) ;
361
+ done ( ) ;
362
+ } ) ;
363
+ router . prepop ( ) ;
364
+ } ) ;
365
+ it ( 'cancel prepop should be ok' , done => {
366
+ const driver = new ServerDriver ( ) ;
367
+ driver . push ( '/test1?a=2' ) ;
368
+ const routes = [
369
+ {
370
+ path : 'test1' ,
371
+ component : 'aa'
372
+ }
373
+ ] ;
374
+
375
+ const router = new Router ( { routes } , driver ) ;
376
+ driver . push ( '/test1?a=3' ) ;
377
+ router . on ( RouteEventType . CANCEL_CHANGE , route => {
378
+ done ( ) ;
379
+ } ) ;
380
+ const confirm = router . prepop ( ) ;
381
+ confirm ( true ) ;
382
+ } ) ;
383
+ it ( 'confirm prepop should be ok' , done => {
384
+ class TestRouter extends Router < string > {
385
+ public pop < T extends Partial < IPopNavigationOptions > > ( option ?: T ) {
386
+ assert . equal ( option ! . transition , 'test' ) ;
387
+ done ( ) ;
388
+ }
389
+ }
390
+ const driver = new ServerDriver ( ) ;
391
+ driver . push ( '/test1?a=2' ) ;
392
+ const routes = [
393
+ {
394
+ path : 'test1' ,
395
+ component : 'aa'
396
+ }
397
+ ] ;
398
+
399
+ const router = new TestRouter ( { routes } , driver ) ;
400
+ driver . push ( '/test1?a=3' ) ;
401
+ driver . push ( '/test1?a=4' ) ;
402
+
403
+ const confirm = router . prepop ( { transition : 'test' , n : 2 } ) ;
404
+ confirm ( ) ;
405
+ } ) ;
406
+ it ( 'invalid prepop params should be ok' , done => {
407
+ class TestRouter extends Router < string > {
408
+ public pop < T extends Partial < IPopNavigationOptions > > ( option ?: T ) {
409
+ assert . equal ( option ! . transition , 'test' ) ;
410
+ done ( ) ;
411
+ }
412
+ }
413
+ const driver = new ServerDriver ( ) ;
414
+ driver . push ( '/test1?a=2' ) ;
415
+ const routes = [
416
+ {
417
+ path : 'test1' ,
418
+ component : 'aa'
419
+ }
420
+ ] ;
421
+
422
+ const router = new TestRouter ( { routes } , driver ) ;
423
+ driver . push ( '/test1?a=3' ) ;
424
+ driver . push ( '/test1?a=4' ) ;
425
+
426
+ const confirm = router . prepop ( { transition : 'test' , n : 100 } ) ;
427
+ confirm ( ) ;
428
+ } ) ;
429
+ } ) ;
232
430
it ( 'Router#prereplace' ) ;
233
431
} ) ;
234
432
0 commit comments