From 58aa55d4bf8443c8f68663f530568731b614e1d1 Mon Sep 17 00:00:00 2001 From: Gabriel Schulhof Date: Sat, 23 May 2015 23:36:52 +0300 Subject: [PATCH] All: Make sure events are well-formed Fixes gh-8134 --- js/navigation/navigator.js | 5 +---- tests/jquery.testHelper.js | 4 ++++ tests/unit/event/event_core.js | 26 +++++++++++++------------- tests/unit/event/swipe_core.js | 4 ++++ tests/unit/panel/panel_core.js | 8 ++++++-- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/js/navigation/navigator.js b/js/navigation/navigator.js index be949964a3b..b4b53e362a7 100644 --- a/js/navigation/navigator.js +++ b/js/navigation/navigator.js @@ -151,10 +151,7 @@ $.extend( $.mobile.Navigator.prototype, { if ( isPopStateEvent ) { popstateEvent = new $.Event( "popstate" ); - popstateEvent.originalEvent = { - type: "popstate", - state: null - }; + popstateEvent.originalEvent = new $.Event( "popstate", { state: null } ); state.id = ( this.squash( url, state ) || {} ).id; diff --git a/tests/jquery.testHelper.js b/tests/jquery.testHelper.js index 56092dee28f..43f87b92030 100644 --- a/tests/jquery.testHelper.js +++ b/tests/jquery.testHelper.js @@ -35,6 +35,10 @@ $.testHelper = { loadSeq( seq, 0 ); }, + mockOriginalEvent: function( options ) { + $.Event.prototype.originalEvent = $.extend( {}, { preventDefault: $.noop }, options ); + }, + excludeFileProtocol: function( callback ) { var message = "Tests require script reload and cannot be run via file: protocol"; diff --git a/tests/unit/event/event_core.js b/tests/unit/event/event_core.js index d99c78357b8..da31e0d232c 100644 --- a/tests/unit/event/event_core.js +++ b/tests/unit/event/event_core.js @@ -21,11 +21,6 @@ module( libName, { $( "#qunit-fixture" ).unbind(); } ); - //NOTE unmock - Math.abs = absFn; - $.Event.prototype.originalEvent = originalEventFn; - $.Event.prototype.preventDefault = preventDefaultFn; - // make sure the event objects respond to touches to simulate // the collections existence in non touch enabled test browsers $.Event.prototype.touches = [ { pageX: 1, pageY: 1 } ]; @@ -36,6 +31,11 @@ module( libName, { }, teardown: function() { $.mobile.pageContainer = originalPageContainer; + + // NOTE unmock + Math.abs = absFn; + $.Event.prototype.originalEvent = originalEventFn; + $.Event.prototype.preventDefault = preventDefaultFn; } } ); @@ -149,9 +149,9 @@ var forceTouchSupport = function() { } ); //mock originalEvent information - $.Event.prototype.originalEvent = { + $.testHelper.mockOriginalEvent( { touches: [ { 'pageX': 0 }, { 'pageY': 0 } ] - }; + } ); }; asyncTest( "long press fires tap hold after taphold duration", function() { @@ -412,12 +412,12 @@ var swipeTimedTest = function( opts ) { }; //NOTE bypass the trigger source check - $.Event.prototype.originalEvent = { + $.testHelper.mockOriginalEvent( { touches: [ { clientX: 0, clientY: 0 } ] - }; + } ); qunitFixture.trigger( "touchstart" ); @@ -488,22 +488,22 @@ asyncTest( "scrolling prevented when coordinate change > 10", function() { }; //NOTE bypass the trigger source check - $.Event.prototype.originalEvent = { + $.testHelper.mockOriginalEvent( { touches: [ { clientX: 0, clientY: 0 } ] - }; + } ); $( "#qunit-fixture" ).trigger( "touchstart" ); //NOTE bypass the trigger source check - $.Event.prototype.originalEvent = { + $.testHelper.mockOriginalEvent( { touches: [ { clientX: 200, clientY: 0 } ] - }; + } ); $( "#qunit-fixture" ).trigger( "touchmove" ); } ); diff --git a/tests/unit/event/swipe_core.js b/tests/unit/event/swipe_core.js index 20c1396d93d..5563737df55 100644 --- a/tests/unit/event/swipe_core.js +++ b/tests/unit/event/swipe_core.js @@ -14,6 +14,7 @@ $.testHelper.sequence( [ function() { target.trigger( $.extend( $.Event( pointer.down ), { originalEvent: { + preventDefault: $.noop, touches: false }, pageX: 206, @@ -28,6 +29,7 @@ $.testHelper.sequence( [ return event; } )( $.extend( $.Event( pointer.move ), { originalEvent: { + preventDefault: $.noop, touches: false }, pageX: 206, @@ -42,6 +44,7 @@ $.testHelper.sequence( [ return event; } )( $.extend( $.Event( pointer.move ), { originalEvent: { + preventDefault: $.noop, touches: false }, pageX: 170, @@ -56,6 +59,7 @@ $.testHelper.sequence( [ return event; } )( $.extend( $.Event( pointer.up ), { originalEvent: { + preventDefault: $.noop, touches: false }, pageX: 170, diff --git a/tests/unit/panel/panel_core.js b/tests/unit/panel/panel_core.js index 8b0a98df377..1ee013a6cbd 100644 --- a/tests/unit/panel/panel_core.js +++ b/tests/unit/panel/panel_core.js @@ -231,9 +231,13 @@ asyncTest( "should be able to open a second panel", function() { module( "dismissable panel", { setup: function() { - $.Event.prototype.originalEvent = { + this.originalOriginalEvent = $.Event.prototype.originalEvent; + $.testHelper.mockOriginalEvent( { touches: [ { 'pageX': 0 }, { 'pageY': 0 } ] - }; + } ); + }, + teardown: function() { + $.Event.prototype.originalEvent = this.originalOriginalEvent; } } );