qunit: Also clear $.timers when stopping unfinished animations
[lhc/web/wiklou.git] / tests / qunit / data / testrunner.js
index b0118af..a947484 100644 (file)
                liveMessages = mw.messages;
 
                function suppressWarnings() {
-                       warn = mw.log.warn;
-                       error = mw.log.error;
-                       mw.log.warn = mw.log.error = $.noop;
+                       if ( warn === undefined ) {
+                               warn = mw.log.warn;
+                               error = mw.log.error;
+                               mw.log.warn = mw.log.error = $.noop;
+                       }
                }
 
                function restoreWarnings() {
                                        // Stop tracking ajax requests
                                        $( document ).off( 'ajaxSend', trackAjax );
 
+                                       // As a convenience feature, automatically restore warnings if they're
+                                       // still suppressed by the end of the test.
+                                       restoreWarnings();
+
                                        // Farewell, mock environment!
                                        mw.config = liveConfig;
                                        mw.messages = liveMessages;
                                                messages: liveMessages
                                        } );
 
-                                       // As a convenience feature, automatically restore warnings if they're
-                                       // still suppressed by the end of the test.
-                                       restoreWarnings();
-
                                        // Tests should use fake timers or wait for animations to complete
                                        // Check for incomplete animations/requests/etc and throw if there are any.
                                        if ( $.timers && $.timers.length !== 0 ) {
                                                        );
                                                } );
                                                // Force animations to stop to give the next test a clean start
+                                               $.timers = [];
                                                $.fx.stop();
 
                                                throw new Error( 'Unfinished animations: ' + timers );
                                                        mw.log.warn( 'Pending requests does not match jQuery.active count' );
                                                }
                                                // Force requests to stop to give the next test a clean start
-                                               $.each( pending, function ( i, ajax ) {
-                                                       mw.log.warn( 'Pending AJAX request #' + i, ajax.options );
+                                               $.each( ajaxRequests, function ( i, ajax ) {
+                                                       mw.log.warn(
+                                                               'AJAX request #' + i + ' (state: ' + ajax.xhr.state() + ')',
+                                                               ajax.options
+                                                       );
                                                        ajax.xhr.abort();
                                                } );
                                                ajaxRequests = [];