@@ -137,15 +137,17 @@ export function run() {
137
137
nav . views = [ view1 , view2 , view3 ] ;
138
138
139
139
nav . _remove ( 1 , 1 ) ;
140
- expect ( nav . length ( ) ) . toBe ( 2 ) ;
140
+ expect ( nav . length ( ) ) . toBe ( 3 ) ;
141
141
expect ( view1 . state ) . toBe ( STATE_INIT_ENTER ) ;
142
- expect ( view2 . state ) . toBe ( STATE_REMOVE ) ;
142
+ expect ( view2 . state ) . toBe ( STATE_CANCEL_ENTER ) ;
143
143
expect ( view3 . state ) . toBe ( STATE_INIT_LEAVE ) ;
144
144
145
145
expect ( nav . getByIndex ( 0 ) . state ) . toBe ( STATE_INIT_ENTER ) ;
146
146
expect ( nav . getByIndex ( 0 ) . componentType ) . toBe ( Page1 ) ;
147
- expect ( nav . getByIndex ( 1 ) . state ) . toBe ( STATE_INIT_LEAVE ) ;
148
- expect ( nav . getByIndex ( 1 ) . componentType ) . toBe ( Page3 ) ;
147
+ expect ( nav . getByIndex ( 1 ) . state ) . toBe ( STATE_CANCEL_ENTER ) ;
148
+ expect ( nav . getByIndex ( 1 ) . componentType ) . toBe ( Page2 ) ;
149
+ expect ( nav . getByIndex ( 2 ) . state ) . toBe ( STATE_INIT_LEAVE ) ;
150
+ expect ( nav . getByIndex ( 2 ) . componentType ) . toBe ( Page3 ) ;
149
151
} ) ;
150
152
151
153
it ( 'should set to pop the active and enter the previous' , ( ) => {
@@ -728,6 +730,7 @@ export function run() {
728
730
spyOn ( enteringView , 'fireDidEnter' ) ;
729
731
spyOn ( leavingView , 'fireDidLeave' ) ;
730
732
733
+ nav . _init = true ;
731
734
nav . _afterTrans ( enteringView , leavingView , navOpts , hasCompleted , done ) ;
732
735
733
736
expect ( enteringView . fireDidEnter ) . toHaveBeenCalled ( ) ;
@@ -748,6 +751,7 @@ export function run() {
748
751
spyOn ( enteringView , 'fireDidEnter' ) ;
749
752
spyOn ( leavingView , 'fireDidLeave' ) ;
750
753
754
+ nav . _init = true ;
751
755
nav . _afterTrans ( enteringView , leavingView , navOpts , hasCompleted , done ) ;
752
756
753
757
expect ( enteringView . fireDidEnter ) . not . toHaveBeenCalled ( ) ;
@@ -788,6 +792,7 @@ export function run() {
788
792
spyOn ( enteringView , 'fireDidEnter' ) ;
789
793
spyOn ( leavingView , 'fireDidLeave' ) ;
790
794
795
+ nav . _init = true ;
791
796
nav . _afterTrans ( enteringView , leavingView , navOpts , hasCompleted , done ) ;
792
797
793
798
expect ( enteringView . fireDidEnter ) . not . toHaveBeenCalled ( ) ;
@@ -817,6 +822,19 @@ export function run() {
817
822
818
823
describe ( '_transFinish' , ( ) => {
819
824
825
+ it ( 'should remove entering view if it was already set to cancel' , ( ) => {
826
+ let enteringView = new ViewController ( Page1 ) ;
827
+ let leavingView = new ViewController ( Page2 ) ;
828
+ enteringView . state = STATE_CANCEL_ENTER ;
829
+
830
+ spyOn ( nav , 'remove' ) ;
831
+
832
+ nav . _transFinish ( 1 , enteringView , leavingView , 'forward' , true ) ;
833
+
834
+ expect ( nav . remove ) . toHaveBeenCalled ( ) ;
835
+ expect ( enteringView . state ) . toBe ( STATE_CANCEL_ENTER ) ;
836
+ } ) ;
837
+
820
838
it ( 'should not entering/leaving state, after transition that isnt the most recent, and state already changed' , ( ) => {
821
839
let enteringView = new ViewController ( Page1 ) ;
822
840
enteringView . state = 'somethingelse' ;
@@ -1492,6 +1510,36 @@ export function run() {
1492
1510
// act
1493
1511
nav . _beforeTrans ( view1 , view2 , { } , ( ) => { } ) ;
1494
1512
} ) ;
1513
+
1514
+ it ( 'should not begin transition when entering stated is inactive' , ( ) => {
1515
+ let view1 = new ViewController ( Page1 ) ;
1516
+ view1 . state = STATE_INACTIVE ;
1517
+
1518
+ let wasDoneCalled = false ;
1519
+ let done = ( ) => {
1520
+ wasDoneCalled = true ;
1521
+ } ;
1522
+
1523
+ nav . _beforeTrans ( view1 , null , { } , done ) ;
1524
+
1525
+ expect ( wasDoneCalled ) . toEqual ( true ) ;
1526
+ expect ( view1 . state ) . toEqual ( STATE_INACTIVE ) ;
1527
+ } ) ;
1528
+
1529
+ it ( 'should not begin transition when entering state is canceled' , ( ) => {
1530
+ let view1 = new ViewController ( Page1 ) ;
1531
+ view1 . state = STATE_CANCEL_ENTER ;
1532
+
1533
+ let wasDoneCalled = false ;
1534
+ let done = ( ) => {
1535
+ wasDoneCalled = true ;
1536
+ } ;
1537
+
1538
+ nav . _beforeTrans ( view1 , null , { } , done ) ;
1539
+
1540
+ expect ( wasDoneCalled ) . toEqual ( true ) ;
1541
+ expect ( view1 . state ) . toEqual ( STATE_CANCEL_ENTER ) ;
1542
+ } ) ;
1495
1543
} ) ;
1496
1544
1497
1545
/* private method */
@@ -1679,12 +1727,13 @@ class MockNavController extends NavController {
1679
1727
}
1680
1728
1681
1729
1682
- const STATE_ACTIVE = 'active' ;
1683
- const STATE_INACTIVE = 'inactive' ;
1684
- const STATE_INIT_ENTER = 'init_enter' ;
1685
- const STATE_INIT_LEAVE = 'init_leave' ;
1686
- const STATE_TRANS_ENTER = 'trans_enter' ;
1687
- const STATE_TRANS_LEAVE = 'trans_leave' ;
1688
- const STATE_REMOVE = 'remove' ;
1689
- const STATE_REMOVE_AFTER_TRANS = 'remove_after_trans' ;
1690
- const STATE_FORCE_ACTIVE = 'force_active' ;
1730
+ const STATE_ACTIVE = 1 ;
1731
+ const STATE_INACTIVE = 2 ;
1732
+ const STATE_INIT_ENTER = 3 ;
1733
+ const STATE_INIT_LEAVE = 4 ;
1734
+ const STATE_TRANS_ENTER = 5 ;
1735
+ const STATE_TRANS_LEAVE = 6 ;
1736
+ const STATE_REMOVE = 7 ;
1737
+ const STATE_REMOVE_AFTER_TRANS = 8 ;
1738
+ const STATE_CANCEL_ENTER = 9 ;
1739
+ const STATE_FORCE_ACTIVE = 10 ;
0 commit comments