@@ -7,7 +7,7 @@ import Spy = jasmine.Spy;
7
7
import "./util/matchers" ;
8
8
import { resolvedValue , resolvedError , caught } from './util/testUtilsNg1' ;
9
9
import { ResolveContext , State , PathNode , omit , pick , extend , forEach } from "../src/index" ;
10
- import { Resolvable , services , StateDeclaration } from "ui-router-core" ;
10
+ import { UIRouter , Resolvable , services , StateDeclaration } from "ui-router-core" ;
11
11
import "../src/legacy/resolveService" ;
12
12
13
13
let module = angular [ 'mock' ] . module ;
@@ -44,10 +44,6 @@ function getStates() {
44
44
M : { resolve : { _M : function ( _L ) { counts [ '_M' ] ++ ; return _L + "M" ; } } }
45
45
}
46
46
} ,
47
- N : {
48
- resolve : { _N : function ( _J ) { return _J + "N" ; } , _N2 : function ( _J ) { return _J + "N2" ; } , _N3 : function ( _J ) { return _J + "N3" ; } } ,
49
- resolvePolicy : { _N : "EAGER" , _N2 : "LAZY" , _N3 : "LAZY" }
50
- }
51
47
} ,
52
48
O : { resolve : { _O : function ( _O2 ) { return _O2 + "O" ; } , _O2 : function ( _O ) { return _O + "O2" ; } } } ,
53
49
P : { resolve : { $state : function ( $state ) { return $state } } ,
@@ -427,6 +423,21 @@ describe("$resolve", function () {
427
423
428
424
// Integration tests
429
425
describe ( "Integration: Resolvables system" , ( ) => {
426
+ beforeEach ( module ( function ( ) {
427
+ let app = angular . module ( 'test' , [ 'ui.router' ] ) ;
428
+ if ( angular . version . minor >= 5 ) {
429
+ app . component ( 'nowait' , {
430
+ bindings : { wait : '<' , nowait : '<' } ,
431
+ template : '{{ $ctrl.wait }}-{{ $ctrl.data }}' ,
432
+ controller : function ( ) {
433
+ this . $onInit = ( ) => {
434
+ this . nowait . then ( result => this . data = result )
435
+ }
436
+ }
437
+ } ) ;
438
+ }
439
+ } ) ) ;
440
+
430
441
beforeEach ( module ( function ( $stateProvider ) {
431
442
let copy = { } ;
432
443
forEach ( statesMap , ( stateDef , name ) => {
@@ -438,12 +449,16 @@ describe("Integration: Resolvables system", () => {
438
449
} ) ;
439
450
} ) ) ;
440
451
441
- let $state , $rootScope , $transitions , $trace ;
442
- beforeEach ( inject ( ( _$state_ , _$rootScope_ , _$transitions_ , _$trace_ ) => {
452
+ beforeEach ( module ( 'test' ) ) ;
453
+
454
+ let router : UIRouter , $state , $rootScope , $transitions , $trace , $q ;
455
+ beforeEach ( inject ( ( _$uiRouter_ , _$state_ , _$rootScope_ , _$transitions_ , _$trace_ , _$q_ ) => {
456
+ router = _$uiRouter_ ;
443
457
$state = _$state_ ;
444
458
$rootScope = _$rootScope_ ;
445
459
$transitions = _$transitions_ ;
446
460
$trace = _$trace_ ;
461
+ $q = _$q_ ;
447
462
} ) ) ;
448
463
449
464
@@ -460,4 +475,81 @@ describe("Integration: Resolvables system", () => {
460
475
expect ( $state . current . name ) . toBe ( "K" ) ;
461
476
expect ( counts . _J ) . toEqualData ( 1 ) ;
462
477
} ) ;
478
+
479
+ it ( "should inject a promise for NOWAIT resolve into a controller" , inject ( function ( $compile , $rootScope ) {
480
+ let scope = $rootScope . $new ( ) ;
481
+ let el = $compile ( '<div><ui-view></ui-view></div>' ) ( scope ) ;
482
+
483
+ let deferWait = $q . defer ( ) ;
484
+ let deferNowait = $q . defer ( ) ;
485
+ let onEnterNowait ;
486
+
487
+ router . stateProvider . state ( {
488
+ name : 'policies' ,
489
+ resolve : [
490
+ { token : 'nowait' , resolveFn : ( ) => deferNowait . promise , policy : { async : 'NOWAIT' } } ,
491
+ { token : 'wait' , resolveFn : ( ) => deferWait . promise } ,
492
+ ] ,
493
+ onEnter : function ( nowait ) {
494
+ onEnterNowait = nowait ;
495
+ } ,
496
+ controller : function ( $scope , wait , nowait ) {
497
+ $scope . wait = wait ;
498
+ nowait . then ( result => $scope . nowait = result ) ;
499
+ } ,
500
+ template : '{{ wait }}-{{ nowait }}'
501
+ } ) ;
502
+
503
+ $state . go ( "policies" ) ;
504
+ $q . flush ( ) ;
505
+
506
+ expect ( $state . current . name ) . toBe ( "" ) ;
507
+
508
+ deferWait . resolve ( 'wait for this' ) ;
509
+ $q . flush ( ) ;
510
+
511
+ expect ( $state . current . name ) . toBe ( "policies" ) ;
512
+ expect ( el . text ( ) ) . toBe ( 'wait for this-' ) ;
513
+ expect ( typeof onEnterNowait . then ) . toBe ( 'function' ) ;
514
+
515
+ deferNowait . resolve ( 'dont wait for this' ) ;
516
+ $q . flush ( ) ;
517
+
518
+ expect ( el . text ( ) ) . toBe ( 'wait for this-dont wait for this' ) ;
519
+ } ) ) ;
520
+
521
+ if ( angular . version . minor >= 5 ) {
522
+ it ( "should bind a promise for NOWAIT resolve onto a component controller" , inject ( function ( $compile , $rootScope ) {
523
+ let scope = $rootScope . $new ( ) ;
524
+ let el = $compile ( '<div><ui-view></ui-view></div>' ) ( scope ) ;
525
+
526
+ let deferWait = $q . defer ( ) ;
527
+ let deferNowait = $q . defer ( ) ;
528
+
529
+ router . stateProvider . state ( {
530
+ name : 'policies' ,
531
+ resolve : [
532
+ { token : 'nowait' , resolveFn : ( ) => deferNowait . promise , policy : { async : 'NOWAIT' } } ,
533
+ { token : 'wait' , resolveFn : ( ) => deferWait . promise } ,
534
+ ] ,
535
+ component : 'nowait'
536
+ } ) ;
537
+
538
+ $state . go ( "policies" ) ;
539
+ $q . flush ( ) ;
540
+
541
+ expect ( $state . current . name ) . toBe ( "" ) ;
542
+
543
+ deferWait . resolve ( 'wait for this' ) ;
544
+ $q . flush ( ) ;
545
+
546
+ expect ( $state . current . name ) . toBe ( "policies" ) ;
547
+ expect ( el . text ( ) ) . toBe ( 'wait for this-' ) ;
548
+
549
+ deferNowait . resolve ( 'dont wait for this' ) ;
550
+ $q . flush ( ) ;
551
+
552
+ expect ( el . text ( ) ) . toBe ( 'wait for this-dont wait for this' ) ;
553
+ } ) ) ;
554
+ }
463
555
} ) ;
0 commit comments