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

Reply via email to