@@ -696,8 +696,9 @@ describe("ngAnimate", function() {
696
696
$rootScope . $digest ( ) ;
697
697
698
698
if ( $sniffer . transitions ) {
699
- expect ( element . hasClass ( 'abc ng-enter' ) ) . toBe ( true ) ;
700
- expect ( element . hasClass ( 'abc ng-enter ng-enter-active' ) ) . toBe ( true ) ;
699
+ expect ( element . hasClass ( 'abc' ) ) . toBe ( true ) ;
700
+ expect ( element . hasClass ( 'ng-enter' ) ) . toBe ( true ) ;
701
+ expect ( element . hasClass ( 'ng-enter-active' ) ) . toBe ( true ) ;
701
702
browserTrigger ( element , 'transitionend' , { timeStamp : Date . now ( ) + 22000 , elapsedTime : 22000 } ) ;
702
703
}
703
704
expect ( element . hasClass ( 'abc' ) ) . toBe ( true ) ;
@@ -708,7 +709,8 @@ describe("ngAnimate", function() {
708
709
709
710
if ( $sniffer . transitions ) {
710
711
expect ( element . hasClass ( 'xyz' ) ) . toBe ( true ) ;
711
- expect ( element . hasClass ( 'xyz ng-enter ng-enter-active' ) ) . toBe ( true ) ;
712
+ expect ( element . hasClass ( 'ng-enter' ) ) . toBe ( true ) ;
713
+ expect ( element . hasClass ( 'ng-enter-active' ) ) . toBe ( true ) ;
712
714
browserTrigger ( element , 'transitionend' , { timeStamp : Date . now ( ) + 11000 , elapsedTime : 11000 } ) ;
713
715
}
714
716
expect ( element . hasClass ( 'xyz' ) ) . toBe ( true ) ;
@@ -732,8 +734,10 @@ describe("ngAnimate", function() {
732
734
$animate . enter ( element , parent ) ;
733
735
$rootScope . $digest ( ) ;
734
736
if ( $sniffer . transitions ) {
735
- expect ( element . hasClass ( 'one two ng-enter' ) ) . toBe ( true ) ;
736
- expect ( element . hasClass ( 'one two ng-enter ng-enter-active' ) ) . toBe ( true ) ;
737
+ expect ( element . hasClass ( 'one' ) ) . toBe ( true ) ;
738
+ expect ( element . hasClass ( 'two' ) ) . toBe ( true ) ;
739
+ expect ( element . hasClass ( 'ng-enter' ) ) . toBe ( true ) ;
740
+ expect ( element . hasClass ( 'ng-enter-active' ) ) . toBe ( true ) ;
737
741
expect ( element . hasClass ( 'one-active' ) ) . toBe ( false ) ;
738
742
expect ( element . hasClass ( 'two-active' ) ) . toBe ( false ) ;
739
743
browserTrigger ( element , 'transitionend' , { timeStamp : Date . now ( ) + 3000 , elapsedTime : 3000 } ) ;
@@ -1574,4 +1578,74 @@ describe("ngAnimate", function() {
1574
1578
expect ( element . contents ( ) . length ) . toBe ( 1 ) ;
1575
1579
} ) ) ;
1576
1580
1581
+ it ( "should cancel all child animations when a leave or move animation is triggered on a parent element" , function ( ) {
1582
+
1583
+ var animationState ;
1584
+ module ( function ( $animateProvider ) {
1585
+ $animateProvider . register ( '.animan' , function ( $timeout ) {
1586
+ return {
1587
+ enter : function ( element , done ) {
1588
+ animationState = 'enter' ;
1589
+ $timeout ( done , 0 , false ) ;
1590
+ return function ( ) {
1591
+ animationState = 'enter-cancel' ;
1592
+ }
1593
+ } ,
1594
+ addClass : function ( element , className , done ) {
1595
+ animationState = 'addClass' ;
1596
+ $timeout ( done , 0 , false ) ;
1597
+ return function ( ) {
1598
+ animationState = 'addClass-cancel' ;
1599
+ }
1600
+ }
1601
+ } ;
1602
+ } ) ;
1603
+ } ) ;
1604
+
1605
+ inject ( function ( $animate , $compile , $rootScope , $timeout , $sniffer ) {
1606
+ var element = html ( $compile ( '<div class="parent"></div>' ) ( $rootScope ) ) ;
1607
+ var container = html ( $compile ( '<div class="container"></div>' ) ( $rootScope ) ) ;
1608
+ var child = html ( $compile ( '<div class="animan child"></div>' ) ( $rootScope ) ) ;
1609
+
1610
+ ss . addRule ( '.animan.ng-enter, .animan.something-add' , '-webkit-transition: width 1s, background 1s 1s;' +
1611
+ 'transition: width 1s, background 1s 1s;' ) ;
1612
+
1613
+ $rootElement . append ( element ) ;
1614
+ jqLite ( document . body ) . append ( $rootElement ) ;
1615
+
1616
+ $animate . enter ( child , element ) ;
1617
+ $rootScope . $digest ( ) ;
1618
+
1619
+ expect ( animationState ) . toBe ( 'enter' ) ;
1620
+ if ( $sniffer . transitions ) {
1621
+ expect ( child . hasClass ( 'ng-enter' ) ) . toBe ( true ) ;
1622
+ expect ( child . hasClass ( 'ng-enter-active' ) ) . toBe ( true ) ;
1623
+ }
1624
+
1625
+ $animate . move ( element , container ) ;
1626
+ if ( $sniffer . transitions ) {
1627
+ expect ( child . hasClass ( 'ng-enter' ) ) . toBe ( false ) ;
1628
+ expect ( child . hasClass ( 'ng-enter-active' ) ) . toBe ( false ) ;
1629
+ }
1630
+
1631
+ expect ( animationState ) . toBe ( 'enter-cancel' ) ;
1632
+ $rootScope . $digest ( ) ;
1633
+ $timeout . flush ( ) ;
1634
+
1635
+ $animate . addClass ( child , 'something' ) ;
1636
+ expect ( animationState ) . toBe ( 'addClass' ) ;
1637
+ if ( $sniffer . transitions ) {
1638
+ expect ( child . hasClass ( 'something-add' ) ) . toBe ( true ) ;
1639
+ expect ( child . hasClass ( 'something-add-active' ) ) . toBe ( true ) ;
1640
+ }
1641
+
1642
+ $animate . leave ( container ) ;
1643
+ expect ( animationState ) . toBe ( 'addClass-cancel' ) ;
1644
+ if ( $sniffer . transitions ) {
1645
+ expect ( child . hasClass ( 'something-add' ) ) . toBe ( false ) ;
1646
+ expect ( child . hasClass ( 'something-add-active' ) ) . toBe ( false ) ;
1647
+ }
1648
+ } ) ;
1649
+ } ) ;
1650
+
1577
1651
} ) ;
0 commit comments