@@ -358,6 +358,76 @@ describe('ngOutlet', function () {
358358 } ) ;
359359
360360
361+ it ( 'should reuse a component when the canReuse hook returns true' , function ( ) {
362+ var log = [ ] ;
363+ var cmpInstanceCount = 0 ;
364+
365+ function ReuseCmp ( ) {
366+ cmpInstanceCount ++ ;
367+ this . canReuse = function ( ) {
368+ return true ;
369+ } ;
370+ this . onReuse = function ( next , prev ) {
371+ log . push ( 'reuse: ' + prev . urlPath + ' -> ' + next . urlPath ) ;
372+ } ;
373+ }
374+ ReuseCmp . $routeConfig = [ { path : '/a' , component : OneController } , { path : '/b' , component : TwoController } ] ;
375+ registerComponent ( 'reuse' , 'reuse {<ng-outlet></ng-outlet>}' , ReuseCmp ) ;
376+
377+ $router . config ( [
378+ { path : '/on-reuse/:number/...' , component : ReuseCmp }
379+ ] ) ;
380+ compile ( 'outer { <div ng-outlet></div> }' ) ;
381+
382+ $router . navigate ( '/on-reuse/1/a' ) ;
383+ $rootScope . $digest ( ) ;
384+ expect ( log ) . toEqual ( [ ] ) ;
385+ expect ( cmpInstanceCount ) . toBe ( 1 ) ;
386+ expect ( elt . text ( ) ) . toBe ( 'outer { reuse {one} }' ) ;
387+
388+ $router . navigate ( '/on-reuse/2/b' ) ;
389+ $rootScope . $digest ( ) ;
390+ expect ( log ) . toEqual ( [ 'reuse: on-reuse/1 -> on-reuse/2' ] ) ;
391+ expect ( cmpInstanceCount ) . toBe ( 1 ) ;
392+ expect ( elt . text ( ) ) . toBe ( 'outer { reuse {two} }' ) ;
393+ } ) ;
394+
395+
396+ it ( 'should not reuse a component when the canReuse hook returns false' , function ( ) {
397+ var log = [ ] ;
398+ var cmpInstanceCount = 0 ;
399+
400+ function NeverReuseCmp ( ) {
401+ cmpInstanceCount ++ ;
402+ this . canReuse = function ( ) {
403+ return false ;
404+ } ;
405+ this . onReuse = function ( next , prev ) {
406+ log . push ( 'reuse: ' + prev . urlPath + ' -> ' + next . urlPath ) ;
407+ } ;
408+ }
409+ NeverReuseCmp . $routeConfig = [ { path : '/a' , component : OneController } , { path : '/b' , component : TwoController } ] ;
410+ registerComponent ( 'reuse' , 'reuse {<ng-outlet></ng-outlet>}' , NeverReuseCmp ) ;
411+
412+ $router . config ( [
413+ { path : '/never-reuse/:number/...' , component : NeverReuseCmp }
414+ ] ) ;
415+ compile ( 'outer { <div ng-outlet></div> }' ) ;
416+
417+ $router . navigate ( '/never-reuse/1/a' ) ;
418+ $rootScope . $digest ( ) ;
419+ expect ( log ) . toEqual ( [ ] ) ;
420+ expect ( cmpInstanceCount ) . toBe ( 1 ) ;
421+ expect ( elt . text ( ) ) . toBe ( 'outer { reuse {one} }' ) ;
422+
423+ $router . navigate ( '/never-reuse/2/b' ) ;
424+ $rootScope . $digest ( ) ;
425+ expect ( log ) . toEqual ( [ ] ) ;
426+ expect ( cmpInstanceCount ) . toBe ( 2 ) ;
427+ expect ( elt . text ( ) ) . toBe ( 'outer { reuse {two} }' ) ;
428+ } ) ;
429+
430+
361431 it ( 'should not activate a component when canActivate returns false' , function ( ) {
362432 var spy = jasmine . createSpy ( 'activate' ) ;
363433 var activate = registerComponent ( 'activate' , '' , {
0 commit comments