@@ -32,7 +32,7 @@ describe('NavigationController', () => {
3232 ) ;
3333 viewWrapper0 = controller [ '__view-wrapper-0' ] ;
3434 viewWrapper1 = controller [ '__view-wrapper-1' ] ;
35- } )
35+ } ) ;
3636 it ( 'exports a component' , ( ) => {
3737 let controller = renderIntoDocument (
3838 < NavigationController views = { views } />
@@ -85,9 +85,6 @@ describe('NavigationController', () => {
8585 expect ( viewWrapper0 ) . to . have . deep . property ( `style.${ transformPrefix } ` ) ;
8686 expect ( viewWrapper1 ) . to . have . deep . property ( `style.${ transformPrefix } ` ) ;
8787 } ) ;
88- } ) ;
89- describe ( '#componentWillUnmout' , ( ) => {
90-
9188 } ) ;
9289 describe ( '#__transformViews' , ( ) => {
9390 beforeEach ( done => {
@@ -668,4 +665,115 @@ describe('NavigationController', () => {
668665 } ) ;
669666 } ) ;
670667 } ) ;
668+ describe ( 'Lifecycle Events' , ( ) => {
669+ let stubLifecycleEvents = ( onTransitionViews ) => {
670+ const e = {
671+ prevView : {
672+ willHide : sinon . spy ( ) ,
673+ didHide : sinon . spy ( )
674+ } ,
675+ nextView : {
676+ willShow : sinon . spy ( ) ,
677+ didShow : sinon . spy ( )
678+ }
679+ }
680+ const stub = sinon . stub ( controller , '__transitionViews' , ( options ) => {
681+ let prevView = controller . refs [ 'view-0' ] ;
682+ if ( prevView ) {
683+ prevView . navigationControllerWillHideView = e . prevView . willHide ;
684+ prevView . navigationControllerDidHideView = e . prevView . didHide ;
685+ }
686+ let nextView = controller . refs [ 'view-1' ] ;
687+ if ( nextView ) {
688+ nextView . navigationControllerWillShowView = e . nextView . willShow ;
689+ nextView . navigationControllerDidShowView = e . nextView . didShow ;
690+ }
691+ stub . restore ( ) ;
692+ controller . __transitionViews ( options ) ;
693+ onTransitionViews ( ) ;
694+ } ) ;
695+ return e ;
696+ } ;
697+ describe ( '#__pushView' , ( ) => {
698+ beforeEach ( done => {
699+ requestAnimationFrame ( ( ) => {
700+ done ( ) ;
701+ } ) ;
702+ } ) ;
703+ it ( 'calls events with a "none" transition' , ( done ) => {
704+ const e = stubLifecycleEvents ( ( ) => {
705+ expect ( e . prevView . willHide . calledOnce ) . to . be . true ;
706+ expect ( e . nextView . willShow . calledOnce ) . to . be . true ;
707+ expect ( e . prevView . didHide . calledOnce ) . to . be . false ;
708+ expect ( e . nextView . didShow . calledOnce ) . to . be . false ;
709+ } ) ;
710+ controller . __pushView ( < ViewB /> , {
711+ transition : Transition . type . NONE ,
712+ onComplete ( ) {
713+ expect ( e . prevView . didHide . calledOnce ) . to . be . true ;
714+ expect ( e . nextView . didShow . calledOnce ) . to . be . true ;
715+ done ( ) ;
716+ }
717+ } ) ;
718+ } ) ;
719+ it ( 'calls events with a built-in spring animation' , ( done ) => {
720+ const e = stubLifecycleEvents ( ( ) => {
721+ expect ( e . prevView . willHide . calledOnce ) . to . be . true ;
722+ expect ( e . nextView . willShow . calledOnce ) . to . be . true ;
723+ expect ( e . prevView . didHide . calledOnce ) . to . be . false ;
724+ expect ( e . nextView . didShow . calledOnce ) . to . be . false ;
725+ } ) ;
726+ controller . __pushView ( < ViewB /> , {
727+ transition : Transition . type . PUSH_LEFT ,
728+ onComplete ( ) {
729+ expect ( e . prevView . didHide . calledOnce ) . to . be . true ;
730+ expect ( e . nextView . didShow . calledOnce ) . to . be . true ;
731+ done ( ) ;
732+ }
733+ } ) ;
734+ } ) ;
735+ } ) ;
736+ describe ( '#__popView' , ( ) => {
737+ beforeEach ( done => {
738+ controller = renderIntoDocument (
739+ < NavigationController views = { [ < ViewA /> , < ViewB /> ] } />
740+ ) ;
741+ requestAnimationFrame ( ( ) => {
742+ done ( ) ;
743+ } ) ;
744+ } ) ;
745+ it ( 'calls events with a "none" transition' , ( done ) => {
746+ const e = stubLifecycleEvents ( ( ) => {
747+ expect ( e . prevView . willHide . calledOnce ) . to . be . true ;
748+ expect ( e . nextView . willShow . calledOnce ) . to . be . true ;
749+ expect ( e . prevView . didHide . calledOnce ) . to . be . false ;
750+ expect ( e . nextView . didShow . calledOnce ) . to . be . false ;
751+ } ) ;
752+ controller . __popView ( {
753+ transition : Transition . type . NONE ,
754+ onComplete ( ) {
755+ expect ( e . prevView . didHide . calledOnce ) . to . be . true ;
756+ expect ( e . nextView . didShow . calledOnce ) . to . be . true ;
757+ done ( ) ;
758+ }
759+ } ) ;
760+ } ) ;
761+ it ( 'calls events with a built-in spring animation' , ( done ) => {
762+ const e = stubLifecycleEvents ( ( ) => {
763+ expect ( e . prevView . willHide . calledOnce ) . to . be . true ;
764+ expect ( e . nextView . willShow . calledOnce ) . to . be . true ;
765+ expect ( e . prevView . didHide . calledOnce ) . to . be . false ;
766+ expect ( e . nextView . didShow . calledOnce ) . to . be . false ;
767+ } ) ;
768+ controller . __popView ( {
769+ transition : Transition . type . PUSH_LEFT ,
770+ onComplete ( ) {
771+ expect ( e . prevView . didHide . calledOnce ) . to . be . true ;
772+ expect ( e . nextView . didShow . calledOnce ) . to . be . true ;
773+ done ( ) ;
774+ }
775+ } ) ;
776+ } ) ;
777+ } ) ;
778+ } ) ;
671779} ) ;
0 commit comments