aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/helper.js
diff options
context:
space:
mode:
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>2025-03-21 00:03:17 +0100
committerGitHub <noreply@github.com>2025-03-21 00:03:17 +0100
commit44de3d325c1ac0c4a841deff0ec03265a0b670f7 (patch)
tree1e2d6714843aead988ec134ecace8a75e01cba24 /tests/lib/helper.js
parent6843ced12e4051aefbee47cf87fa79794737eb8a (diff)
downloadjquery-ui-44de3d325c1ac0c4a841deff0ec03265a0b670f7.tar.gz
jquery-ui-44de3d325c1ac0c4a841deff0ec03265a0b670f7.zip
Spinner: Prevent double mousewheel & wheel event handling
As of gh-2338, if one has loaded the jQuery MouseWheel plugin, the `mousewheel` handler would fire the `wheel` one, but the `wheel` one would also run in response to the native `wheel` event, resulting in double the distance handled by the spinner. To prevent the issue, only fire the `wheel` handler from inside the `mousewheel` on if the event was triggered by jQuery - jQuery will not care that the underlying event is `wheel` and will only fire handlers for `mousewheel`. Also, add an iframe test using jQuery MouseWheel to not affect all the other tests. Plus, migrate from `QUnit.reset` to `QUnit.done` (see qunitjs/qunit#354). Closes gh-2342 Ref gh-2338
Diffstat (limited to 'tests/lib/helper.js')
-rw-r--r--tests/lib/helper.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/lib/helper.js b/tests/lib/helper.js
index 2315c5e19..2be4c48de 100644
--- a/tests/lib/helper.js
+++ b/tests/lib/helper.js
@@ -51,6 +51,65 @@ exports.moduleAfterEach = function( assert ) {
}
};
+exports.testIframe = function( title, fileName, func, wrapper, iframeStyles ) {
+ if ( !wrapper ) {
+ wrapper = QUnit.test;
+ }
+ wrapper.call( QUnit, title, function( assert ) {
+ var done = assert.async(),
+ $iframe = jQuery( "<iframe></iframe>" )
+ .css( {
+ position: "absolute",
+ top: "0",
+ left: "-600px",
+ width: "500px",
+ zIndex: 1,
+ background: "white"
+ } )
+ .attr( { id: "qunit-fixture-iframe", src: fileName } );
+
+ // Add other iframe styles
+ if ( iframeStyles ) {
+ $iframe.css( iframeStyles );
+ }
+
+ // Test iframes are expected to invoke this via startIframeTest
+ // (cf. iframeTest.js)
+ window.iframeCallback = function() {
+ var args = Array.prototype.slice.call( arguments );
+
+ args.unshift( assert );
+
+ setTimeout( function() {
+ var result;
+
+ this.iframeCallback = undefined;
+
+ result = func.apply( this, args );
+
+ function finish() {
+ func = function() {};
+ $iframe.remove();
+ done();
+ }
+
+ // Wait for promises returned by `func`.
+ if ( result && result.then ) {
+ result.then( finish );
+ } else {
+ finish();
+ }
+ } );
+ };
+
+ // Attach iframe to the body for visibility-dependent code.
+ // It will be removed by either the above code, or the testDone
+ // callback in qunit.js.
+ $iframe.prependTo( document.body );
+ } );
+};
+window.iframeCallback = undefined;
+
return exports;
} );