File tree 2 files changed +41
-11
lines changed
2 files changed +41
-11
lines changed Original file line number Diff line number Diff line change @@ -106,18 +106,22 @@ angular.mock.$Browser = function() {
106
106
* @param {number= } number of milliseconds to flush. See {@link #defer.now}
107
107
*/
108
108
self . defer . flush = function ( delay ) {
109
- if ( angular . isDefined ( delay ) ) {
110
- self . defer . now += delay ;
111
- } else {
112
- if ( self . deferredFns . length ) {
113
- self . defer . now = self . deferredFns [ self . deferredFns . length - 1 ] . time ;
114
- } else {
115
- throw new Error ( 'No deferred tasks to be flushed' ) ;
109
+ try {
110
+ if ( ! angular . isDefined ( delay ) ) {
111
+ if ( self . deferredFns . length ) {
112
+ delay = self . deferredFns [ self . deferredFns . length - 1 ] . time - self . defer . now ;
113
+ } else {
114
+ throw new Error ( 'No deferred tasks to be flushed' ) ;
115
+ }
116
116
}
117
- }
118
117
119
- while ( self . deferredFns . length && self . deferredFns [ 0 ] . time <= self . defer . now ) {
120
- self . deferredFns . shift ( ) . fn ( ) ;
118
+ while ( self . deferredFns . length && self . deferredFns [ 0 ] . time <= self . defer . now + delay ) {
119
+ delay -= ( self . deferredFns [ 0 ] . time - self . defer . now ) ;
120
+ self . defer . now = self . deferredFns [ 0 ] . time ;
121
+ self . deferredFns . shift ( ) . fn ( ) ;
122
+ }
123
+ } finally {
124
+ self . defer . now += delay ;
121
125
}
122
126
} ;
123
127
Original file line number Diff line number Diff line change @@ -296,8 +296,10 @@ describe('ngMock', function() {
296
296
expect ( counter ) . toBe ( 1 ) ;
297
297
298
298
$interval . flush ( 1000 ) ;
299
-
300
299
expect ( counter ) . toBe ( 2 ) ;
300
+
301
+ $interval . flush ( 2000 ) ;
302
+ expect ( counter ) . toBe ( 4 ) ;
301
303
} ) ) ;
302
304
303
305
@@ -692,6 +694,30 @@ describe('ngMock', function() {
692
694
$timeout . flush ( 123 ) ;
693
695
expect ( count ) . toBe ( 2 ) ;
694
696
} ) ) ;
697
+
698
+ it ( 'should resolve timeout functions following the timeline' , inject ( function ( $timeout ) {
699
+ var count1 = 0 , count2 = 0 ;
700
+ var iterate1 = function ( ) {
701
+ count1 ++ ;
702
+ $timeout ( iterate1 , 100 ) ;
703
+ } ;
704
+ var iterate2 = function ( ) {
705
+ count2 ++ ;
706
+ $timeout ( iterate2 , 150 ) ;
707
+ } ;
708
+
709
+ $timeout ( iterate1 , 100 ) ;
710
+ $timeout ( iterate2 , 150 ) ;
711
+ $timeout . flush ( 150 ) ;
712
+ expect ( count1 ) . toBe ( 1 ) ;
713
+ expect ( count2 ) . toBe ( 1 ) ;
714
+ $timeout . flush ( 50 ) ;
715
+ expect ( count1 ) . toBe ( 2 ) ;
716
+ expect ( count2 ) . toBe ( 1 ) ;
717
+ $timeout . flush ( 400 ) ;
718
+ expect ( count1 ) . toBe ( 6 ) ;
719
+ expect ( count2 ) . toBe ( 4 ) ;
720
+ } ) ) ;
695
721
} ) ;
696
722
697
723
You can’t perform that action at this time.
0 commit comments