@@ -782,8 +782,8 @@ angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
782782 } ;
783783 } ) ;
784784
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 ) {
787787 var animate = {
788788 queue : [ ] ,
789789 cancel : $delegate . cancel ,
@@ -803,6 +803,43 @@ angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
803803 fn ( ) ;
804804 } ) ;
805805 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+ }
806843 }
807844 } ;
808845
@@ -1752,15 +1789,16 @@ angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $
17521789} ] ;
17531790
17541791angular . mock . $RAFDecorator = [ '$delegate' , function ( $delegate ) {
1755- var queue = [ ] ;
1756- var rafFn = function ( fn ) {
1792+ var queue , rafFn = function ( fn ) {
17571793 var index = queue . length ;
17581794 queue . push ( fn ) ;
17591795 return function ( ) {
17601796 queue . splice ( index , 1 ) ;
17611797 } ;
17621798 } ;
17631799
1800+ queue = rafFn . queue = [ ] ;
1801+
17641802 rafFn . supported = $delegate . supported ;
17651803
17661804 rafFn . flush = function ( ) {
@@ -1773,22 +1811,22 @@ angular.mock.$RAFDecorator = ['$delegate', function($delegate) {
17731811 queue [ i ] ( ) ;
17741812 }
17751813
1776- queue = [ ] ;
1814+ queue . length = 0 ;
17771815 } ;
17781816
17791817 return rafFn ;
17801818} ] ;
17811819
17821820angular . 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 ) ;
17861823 } ;
1824+ queue = addFn . queue = [ ] ;
17871825 addFn . flush = function ( ) {
1788- angular . forEach ( callbacks , function ( fn ) {
1826+ angular . forEach ( queue , function ( fn ) {
17891827 fn ( ) ;
17901828 } ) ;
1791- callbacks = [ ] ;
1829+ queue . length = 0 ;
17921830 } ;
17931831 return addFn ;
17941832} ] ;
0 commit comments