Gilles has uploaded a new change for review. https://gerrit.wikimedia.org/r/116470
Change subject: Test to check that events are not trapped after the viewer is closed ...................................................................... Test to check that events are not trapped after the viewer is closed Also fixes overeager preventDefault in the interface Change-Id: I5e3b05c8546e24772016b72343e241caa2e6ef0e Mingle: https://wikimedia.mingle.thoughtworks.com/projects/multimedia/cards/274 --- M resources/mmv/mmv.lightboxinterface.js M tests/qunit/mmv/mmv.test.js 2 files changed, 81 insertions(+), 2 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MultimediaViewer refs/changes/70/116470/1 diff --git a/resources/mmv/mmv.lightboxinterface.js b/resources/mmv/mmv.lightboxinterface.js index 08875ca..d7c5d8b 100644 --- a/resources/mmv/mmv.lightboxinterface.js +++ b/resources/mmv/mmv.lightboxinterface.js @@ -390,8 +390,6 @@ return; } - e.preventDefault(); - switch ( e.which ) { case 37: // Left arrow @@ -400,6 +398,7 @@ } else { this.viewer.prevImage(); } + e.preventDefault(); break; case 39: // Right arrow @@ -408,6 +407,7 @@ } else { this.viewer.nextImage(); } + e.preventDefault(); break; } }; diff --git a/tests/qunit/mmv/mmv.test.js b/tests/qunit/mmv/mmv.test.js index 98f1268..cd8127a 100644 --- a/tests/qunit/mmv/mmv.test.js +++ b/tests/qunit/mmv/mmv.test.js @@ -349,4 +349,83 @@ mw.mmv.provider.ImageInfo.prototype.get = oldImageInfoGet; mw.mmv.provider.ThumbnailInfo.prototype.get = oldThumbnailInfoGet; } ); + + QUnit.test( 'Events are not trapped after the viewer is closed', 0, function( assert ) { + var i, j, k, eventParameters, + oldImageGet = mw.mmv.provider.Image.prototype.get, + oldImageInfoGet = mw.mmv.provider.ImageInfo.prototype.get, + oldThumbnailInfoGet = mw.mmv.provider.ThumbnailInfo.prototype.get, + oldImageUsageGet = mw.mmv.provider.ImageUsage.prototype.get, + oldFileRepoInfoGet = mw.mmv.provider.FileRepoInfo.prototype.get, + viewer = new mw.mmv.MultimediaViewer(), + $document = $( document ), + $qf = $( '#qunit-fixture' ), + eventTypes = [ 'keydown', 'keyup', 'keypress', 'click', 'mousedown', 'mouseup' ], + modifiers = [ undefined, 'altKey', 'ctrlKey', 'shiftKey', 'metaKey' ]; + + mw.mmv.provider.Image.prototype.get = function() { return $.Deferred().reject(); }; + mw.mmv.provider.ImageInfo.prototype.get = function() { return $.Deferred().reject(); }; + mw.mmv.provider.ThumbnailInfo.prototype.get = function() { return $.Deferred().reject(); }; + mw.mmv.provider.ImageUsage.prototype.get = function() { return $.Deferred().reject(); }; + mw.mmv.provider.FileRepoInfo.prototype.get = function() { return $.Deferred().reject(); }; + + viewer.preloadFullscreenThumbnail = $.noop; + viewer.initWithThumbs( [] ); + + viewer.loadImage( { filePageTitle : new mw.Title( 'File:Stuff.jpg' ), + thumbnail : new mw.mmv.model.Thumbnail( 'foo', 10, 10 ) }, + new Image() ); + + viewer.lightbox.iface.$closeButton.click(); + + mw.mmv.provider.Image.prototype.get = oldImageGet; + mw.mmv.provider.ImageInfo.prototype.get = oldImageInfoGet; + mw.mmv.provider.ThumbnailInfo.prototype.get = oldThumbnailInfoGet; + mw.mmv.provider.ImageUsage.prototype.get = oldImageUsageGet; + mw.mmv.provider.FileRepoInfo.prototype.get = oldFileRepoInfoGet; + + function eventHandler ( e ) { + if ( e.isDefaultPrevented() ) { + assert.ok( false, 'Event was incorrectly trapped : ' + e.which ); + } + + e.preventDefault(); + + // Wait for the last event + if ( e.which === 32 && e.type === 'mouseup' ) { + $document.off( '.mmvtest' ); + QUnit.start(); + } + } + + // Events are async, we need to wait for the last event to be caught before ending the test + QUnit.stop(); + + for ( j = 0; j < eventTypes.length; j++ ) { + $document.on( eventTypes[ j ] + '.mmvtest', eventHandler ); + + eventloop: + for ( i = 0; i < 256; i++ ) { + // Save some time by not testing unlikely values for mouse events + if ( i > 32 ) { + switch ( eventTypes[ j ] ) { + case 'click': + case 'mousedown': + case 'mouseup': + break eventloop; + } + } + + for ( k = 0; k < modifiers.length; k++ ) { + eventParameters = { which : i }; + if ( modifiers[ k ] !== undefined ) { + eventParameters[ modifiers[ k ] ] = true; + } + $qf.trigger( $.Event( eventTypes[ j ], eventParameters ) ); + } + + + } + } + } ); }( mediaWiki, jQuery ) ); -- To view, visit https://gerrit.wikimedia.org/r/116470 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5e3b05c8546e24772016b72343e241caa2e6ef0e Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/MultimediaViewer Gerrit-Branch: master Gerrit-Owner: Gilles <gdu...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits