]> source.dussan.org Git - jquery.git/commitdiff
Tests: Fix sinon timers for oldIE
authorOleg <markelog@gmail.com>
Mon, 13 Jan 2014 18:22:51 +0000 (22:22 +0400)
committerOleg <markelog@gmail.com>
Mon, 13 Jan 2014 18:22:51 +0000 (22:22 +0400)
Gruntfile.js
test/index.html
test/libs/sinon/timers_ie.js [new file with mode: 0644]
test/unit/effects.js

index ada6baa4b42e4a849a38a6f237c115e2c0c9b0d0..0f5c32ba7c9146cd8bc46edf5ca5e71628c2e207 100644 (file)
@@ -60,7 +60,8 @@ module.exports = function( grunt ) {
                                files: {
                                        "qunit": "qunit/qunit",
                                        "require.js": "requirejs/require.js",
-                                       "sinon/fake_timers.js": "sinon/lib/sinon/util/fake_timers.js"
+                                       "sinon/fake_timers.js": "sinon/lib/sinon/util/fake_timers.js",
+                                       "sinon/timers_ie.js": "sinon/lib/sinon/util/timers_ie.js"
                                }
                        }
                },
index ce19c4d5ef3f77751464399d05cc0dbb100ca734..bfadff7f8b6366283800d3907378fb1dbc9c92e7 100644 (file)
@@ -17,6 +17,7 @@
        <script src="libs/qunit/qunit.js"></script>
        <script src="libs/require.js"></script>
        <script src="libs/sinon/fake_timers.js"></script>
+       <script src="libs/sinon/timers_ie.js"></script>
        <!-- See testinit for the list of tests -->
        <script src="data/testinit.js"></script>
 
diff --git a/test/libs/sinon/timers_ie.js b/test/libs/sinon/timers_ie.js
new file mode 100644 (file)
index 0000000..7903a0e
--- /dev/null
@@ -0,0 +1,27 @@
+/*global sinon, setTimeout, setInterval, clearTimeout, clearInterval, Date*/
+/**
+ * Helps IE run the fake timers. By defining global functions, IE allows
+ * them to be overwritten at a later point. If these are not defined like
+ * this, overwriting them will result in anything from an exception to browser
+ * crash.
+ *
+ * If you don't require fake timers to work in IE, don't include this file.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+function setTimeout() {}
+function clearTimeout() {}
+function setInterval() {}
+function clearInterval() {}
+function Date() {}
+
+// Reassign the original functions. Now their writable attribute
+// should be true. Hackish, I know, but it works.
+setTimeout = sinon.timers.setTimeout;
+clearTimeout = sinon.timers.clearTimeout;
+setInterval = sinon.timers.setInterval;
+clearInterval = sinon.timers.clearInterval;
+Date = sinon.timers.Date;
index 4f75dddf252e7999626d4822b8a6012913e7688a..b3916b4a57fa0effc490eb2aba5b44c12886a7be 100644 (file)
@@ -5,18 +5,21 @@ if ( !jQuery.fx ) {
        return;
 }
 
-var off = jQuery.fx.off;
+var off = jQuery.fx.off,
+       oldNow = jQuery.now;
 
 module("effects", {
        setup: function() {
                this.clock = sinon.useFakeTimers( 505877050 );
                this._oldInterval = jQuery.fx.interval;
                jQuery.fx.interval = 10;
-               jQuery.now = Date.now;
+               jQuery.now = function() {
+                       return +( new Date() );
+               };
        },
        teardown: function() {
                this.clock.restore();
-               jQuery.now = Date.now;
+               jQuery.now = oldNow;
                jQuery.fx.stop();
                jQuery.fx.interval = this._oldInterval;
                jQuery.fx.off = off;