@@ -782,8 +782,8 @@ angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
782
782
} ;
783
783
} ) ;
784
784
785
- $provide . decorator ( '$animate' , [ '$delegate' , '$$asyncCallback' , '$timeout' , '$browser' ,
786
- function ( $delegate , $$asyncCallback , $timeout , $browser ) {
785
+ $provide . decorator ( '$animate' , [ '$delegate' , '$$asyncCallback' , '$timeout' , '$browser' , '$rootScope' , '$$rAF' ,
786
+ function ( $delegate , $$asyncCallback , $timeout , $browser , $rootScope , $$rAF ) {
787
787
var animate = {
788
788
queue : [ ] ,
789
789
cancel : $delegate . cancel ,
@@ -803,6 +803,43 @@ angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
803
803
fn ( ) ;
804
804
} ) ;
805
805
reflowQueue = [ ] ;
806
+ } ,
807
+ flush : function ( ) {
808
+ $rootScope . $digest ( ) ;
809
+ var doNextRun , somethingFlushed = false ;
810
+ do {
811
+ doNextRun = false ;
812
+ if ( reflowQueue . length ) {
813
+ doNextRun = somethingFlushed = true ;
814
+ this . triggerReflow ( ) ;
815
+ }
816
+ if ( $$rAF . queue . length ) {
817
+ doNextRun = somethingFlushed = true ;
818
+ $$rAF . flush ( ) ;
819
+ }
820
+ if ( $$asyncCallback . queue . length ) {
821
+ doNextRun = somethingFlushed = true ;
822
+ this . triggerCallbackEvents ( ) ;
823
+ }
824
+ if ( timeoutsRemaining ( ) ) {
825
+ var oldValue = timeoutsRemaining ( ) ;
826
+ this . triggerCallbackPromise ( ) ;
827
+ var newValue = timeoutsRemaining ( ) ;
828
+ if ( newValue < oldValue ) {
829
+ doNextRun = somethingFlushed = true ;
830
+ }
831
+ }
832
+ } while ( doNextRun ) ;
833
+
834
+ if ( ! somethingFlushed ) {
835
+ throw new Error ( 'No pending animations ready to be closed or flushed' ) ;
836
+ }
837
+
838
+ $rootScope . $digest ( ) ;
839
+
840
+ function timeoutsRemaining ( ) {
841
+ return $browser . deferredFns . length ;
842
+ }
806
843
}
807
844
} ;
808
845
@@ -1752,15 +1789,16 @@ angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $
1752
1789
} ] ;
1753
1790
1754
1791
angular . mock . $RAFDecorator = [ '$delegate' , function ( $delegate ) {
1755
- var queue = [ ] ;
1756
- var rafFn = function ( fn ) {
1792
+ var queue , rafFn = function ( fn ) {
1757
1793
var index = queue . length ;
1758
1794
queue . push ( fn ) ;
1759
1795
return function ( ) {
1760
1796
queue . splice ( index , 1 ) ;
1761
1797
} ;
1762
1798
} ;
1763
1799
1800
+ queue = rafFn . queue = [ ] ;
1801
+
1764
1802
rafFn . supported = $delegate . supported ;
1765
1803
1766
1804
rafFn . flush = function ( ) {
@@ -1773,22 +1811,22 @@ angular.mock.$RAFDecorator = ['$delegate', function($delegate) {
1773
1811
queue [ i ] ( ) ;
1774
1812
}
1775
1813
1776
- queue = [ ] ;
1814
+ queue . length = 0 ;
1777
1815
} ;
1778
1816
1779
1817
return rafFn ;
1780
1818
} ] ;
1781
1819
1782
1820
angular . mock . $AsyncCallbackDecorator = [ '$delegate' , function ( $delegate ) {
1783
- var callbacks = [ ] ;
1784
- var addFn = function ( fn ) {
1785
- callbacks . push ( fn ) ;
1821
+ var queue , addFn = function ( fn ) {
1822
+ queue . push ( fn ) ;
1786
1823
} ;
1824
+ queue = addFn . queue = [ ] ;
1787
1825
addFn . flush = function ( ) {
1788
- angular . forEach ( callbacks , function ( fn ) {
1826
+ angular . forEach ( queue , function ( fn ) {
1789
1827
fn ( ) ;
1790
1828
} ) ;
1791
- callbacks = [ ] ;
1829
+ queue . length = 0 ;
1792
1830
} ;
1793
1831
return addFn ;
1794
1832
} ] ;
0 commit comments