@@ -7,7 +7,7 @@ import Spy = jasmine.Spy;
77import "./util/matchers" ;
88import { resolvedValue , resolvedError , caught } from './util/testUtilsNg1' ;
99import { 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" ;
1111import "../src/legacy/resolveService" ;
1212
1313let module = angular [ 'mock' ] . module ;
@@ -44,10 +44,6 @@ function getStates() {
4444 M : { resolve : { _M : function ( _L ) { counts [ '_M' ] ++ ; return _L + "M" ; } } }
4545 }
4646 } ,
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- }
5147 } ,
5248 O : { resolve : { _O : function ( _O2 ) { return _O2 + "O" ; } , _O2 : function ( _O ) { return _O + "O2" ; } } } ,
5349 P : { resolve : { $state : function ( $state ) { return $state } } ,
@@ -427,6 +423,21 @@ describe("$resolve", function () {
427423
428424// Integration tests
429425describe ( "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+
430441 beforeEach ( module ( function ( $stateProvider ) {
431442 let copy = { } ;
432443 forEach ( statesMap , ( stateDef , name ) => {
@@ -438,12 +449,16 @@ describe("Integration: Resolvables system", () => {
438449 } ) ;
439450 } ) ) ;
440451
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_ ;
443457 $state = _$state_ ;
444458 $rootScope = _$rootScope_ ;
445459 $transitions = _$transitions_ ;
446460 $trace = _$trace_ ;
461+ $q = _$q_ ;
447462 } ) ) ;
448463
449464
@@ -460,4 +475,81 @@ describe("Integration: Resolvables system", () => {
460475 expect ( $state . current . name ) . toBe ( "K" ) ;
461476 expect ( counts . _J ) . toEqualData ( 1 ) ;
462477 } ) ;
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+ }
463555} ) ;
0 commit comments