@@ -30,6 +30,10 @@ describe('promiseTracker provider', function() {
3030 expect ( promiseTracker ( ) . active ( ) ) . toBe ( false ) ;
3131 } ) ;
3232
33+ it ( 'should not be tracking by default' , function ( ) {
34+ expect ( promiseTracker ( ) . tracking ( ) ) . toBe ( false ) ;
35+ } ) ;
36+
3337 describe ( 'addPromise' , function ( ) {
3438
3539 it ( 'should error with object' , function ( ) {
@@ -77,6 +81,20 @@ describe('promiseTracker provider', function() {
7781 expect ( trackerPromise . reject ) . toHaveBeenCalledWith ( 2 ) ;
7882 } ) ;
7983
84+ it ( 'should start tracking with then, $then, $promise.then' , function ( ) {
85+ var tracker = promiseTracker ( ) ;
86+ tracker . addPromise ( q . defer ( ) . promise ) ;
87+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
88+
89+ tracker = promiseTracker ( ) ;
90+ tracker . addPromise ( { $then : q . defer ( ) . promise . then } ) ;
91+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
92+
93+ tracker = promiseTracker ( ) ;
94+ tracker . addPromise ( { $promise : { then : q . defer ( ) . promise . then } } ) ;
95+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
96+ } ) ;
97+
8098 } ) ;
8199
82100 describe ( 'createPromise' , function ( ) {
@@ -111,6 +129,32 @@ describe('promiseTracker provider', function() {
111129 expect ( tracker . active ( ) ) . toBe ( false ) ;
112130 } ) ;
113131
132+ it ( 'should set tracking to true when promise is added' , function ( ) {
133+ var tracker = promiseTracker ( ) ;
134+ tracker . createPromise ( ) ;
135+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
136+ } ) ;
137+
138+ it ( 'should set tracking to true when promises are added' , function ( ) {
139+ var tracker = promiseTracker ( ) ;
140+ tracker . createPromise ( ) ;
141+ tracker . createPromise ( ) ;
142+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
143+ } ) ;
144+
145+ it ( 'should set tracking to false when promises are added and resolved/rejected' , function ( ) {
146+ var tracker = promiseTracker ( ) ;
147+ var p1 = tracker . createPromise ( ) ;
148+ var p2 = tracker . createPromise ( ) ;
149+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
150+ p1 . resolve ( ) ;
151+ digest ( ) ;
152+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
153+ p2 . reject ( ) ;
154+ digest ( ) ;
155+ expect ( tracker . tracking ( ) ) . toBe ( false ) ;
156+ } ) ;
157+
114158 } ) ;
115159
116160 it ( 'cancel should deactivate and resolve all promises' , function ( ) {
@@ -121,6 +165,7 @@ describe('promiseTracker provider', function() {
121165 tracker . cancel ( ) ;
122166 expect ( p1 . resolve ) . toHaveBeenCalled ( ) ;
123167 expect ( tracker . active ( ) ) . toBe ( false ) ;
168+ expect ( tracker . tracking ( ) ) . toBe ( false ) ;
124169 } ) ;
125170
126171 it ( 'destroy should be cancel' , function ( ) {
@@ -144,6 +189,20 @@ describe('promiseTracker provider', function() {
144189 expect ( tracker . active ( ) ) . toBe ( true ) ;
145190 } ) ;
146191
192+ it ( 'should be tracking irrespective of the activation delay' , function ( ) {
193+ var tracker = promiseTracker ( { activationDelay : 1000 } ) ;
194+ tracker . createPromise ( ) ;
195+
196+ //Should be tracking
197+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
198+ tracker . createPromise ( ) ;
199+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
200+
201+ //Flush, it should be tracking
202+ timeout . flush ( ) ;
203+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
204+ } ) ;
205+
147206 } ) ;
148207
149208 describe ( 'minDuration' , function ( ) {
@@ -176,6 +235,34 @@ describe('promiseTracker provider', function() {
176235 expect ( tracker . active ( ) ) . toBe ( false ) ;
177236 } ) ;
178237
238+ it ( 'should be tracking for at least minDuration' , function ( ) {
239+ var tracker = promiseTracker ( { minDuration : 1000 } ) ;
240+ var p1 = tracker . createPromise ( ) ;
241+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
242+ p1 . resolve ( ) ;
243+ digest ( ) ;
244+ //Should still be tracking until minDuration timeout elapses
245+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
246+ timeout . flush ( ) ;
247+ expect ( tracker . tracking ( ) ) . toBe ( false ) ;
248+ } ) ;
249+
250+ it ( 'should continue tracking if there is still another promise active' , function ( ) {
251+ var tracker = promiseTracker ( { minDuration : 1000 } ) ;
252+ var p1 = tracker . createPromise ( ) ;
253+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
254+ p1 . resolve ( ) ;
255+ digest ( ) ;
256+ //Should still be tracking until minDuration timeout elapses
257+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
258+ var p2 = tracker . createPromise ( ) ;
259+ timeout . flush ( ) ;
260+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
261+ p2 . resolve ( ) ;
262+ digest ( ) ;
263+ expect ( tracker . tracking ( ) ) . toBe ( false ) ;
264+ } ) ;
265+
179266 } ) ;
180267
181268 describe ( 'minDuration + activationDelay' , function ( ) {
@@ -193,6 +280,20 @@ describe('promiseTracker provider', function() {
193280 expect ( tracker . active ( ) ) . toBe ( false ) ;
194281 } ) ;
195282
283+ it ( 'should delay, be tracking, wait until duration, then be not tracking' , function ( ) {
284+ var tracker = promiseTracker ( { minDuration : 500 , activationDelay : 250 } ) ;
285+ expect ( tracker . tracking ( ) ) . toBe ( false ) ;
286+ var p1 = tracker . createPromise ( ) ;
287+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
288+ timeout . flush ( ) ;
289+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
290+ p1 . resolve ( ) ;
291+ digest ( ) ;
292+ expect ( tracker . tracking ( ) ) . toBe ( true ) ;
293+ timeout . flush ( ) ;
294+ expect ( tracker . tracking ( ) ) . toBe ( false ) ;
295+ } ) ;
296+
196297 } ) ;
197298
198299} ) ;
0 commit comments