diff --git a/Gruntfile.js b/Gruntfile.js index ada6baa4b..0f5c32ba7 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -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" } } }, diff --git a/test/index.html b/test/index.html index ce19c4d5e..bfadff7f8 100644 --- a/test/index.html +++ b/test/index.html @@ -17,6 +17,7 @@ + diff --git a/test/libs/sinon/timers_ie.js b/test/libs/sinon/timers_ie.js new file mode 100644 index 000000000..7903a0e78 --- /dev/null +++ b/test/libs/sinon/timers_ie.js @@ -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; diff --git a/test/unit/effects.js b/test/unit/effects.js index 4f75dddf2..b3916b4a5 100644 --- a/test/unit/effects.js +++ b/test/unit/effects.js @@ -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;