gecko/dom/events/test/test_bug603008.html
Robert O'Callahan eacbf18e37 Bug 946065. Part 5: Move content/events to dom/ and flatten away 'src' directory. r=Ms2ger
--HG--
rename : content/events/src/DOMWheelEvent.cpp => dom/events/DOMWheelEvent.cpp
rename : content/events/src/DOMWheelEvent.h => dom/events/DOMWheelEvent.h
rename : content/events/src/EventTarget.cpp => dom/events/EventTarget.cpp
rename : content/events/public/EventTarget.h => dom/events/EventTarget.h
rename : content/events/public/MutationEvent.h => dom/events/MutationEvent.h
rename : content/events/src/PointerEvent.cpp => dom/events/PointerEvent.cpp
rename : content/events/src/PointerEvent.h => dom/events/PointerEvent.h
rename : content/events/src/SpeechRecognitionError.cpp => dom/events/SpeechRecognitionError.cpp
rename : content/events/src/SpeechRecognitionError.h => dom/events/SpeechRecognitionError.h
rename : content/events/src/TextComposition.cpp => dom/events/TextComposition.cpp
rename : content/events/src/TextComposition.h => dom/events/TextComposition.h
rename : content/events/src/Touch.cpp => dom/events/Touch.cpp
rename : content/events/src/Touch.h => dom/events/Touch.h
rename : content/events/crashtests/104310-1.html => dom/events/crashtests/104310-1.html
rename : content/events/crashtests/116206-1.html => dom/events/crashtests/116206-1.html
rename : content/events/crashtests/135345-1.html => dom/events/crashtests/135345-1.html
rename : content/events/crashtests/422009-1.xhtml => dom/events/crashtests/422009-1.xhtml
rename : content/events/crashtests/457776-1.html => dom/events/crashtests/457776-1.html
rename : content/events/crashtests/496308-1.html => dom/events/crashtests/496308-1.html
rename : content/events/crashtests/682637-1.html => dom/events/crashtests/682637-1.html
rename : content/events/crashtests/crashtests.list => dom/events/crashtests/crashtests.list
rename : content/events/crashtests/eventctor-nulldictionary.html => dom/events/crashtests/eventctor-nulldictionary.html
rename : content/events/crashtests/eventctor-nullstorage.html => dom/events/crashtests/eventctor-nullstorage.html
rename : content/events/crashtests/recursive-DOMNodeInserted.html => dom/events/crashtests/recursive-DOMNodeInserted.html
rename : content/events/crashtests/recursive-onload.html => dom/events/crashtests/recursive-onload.html
rename : content/events/src/moz.build => dom/events/moz.build
rename : content/events/src/nsAsyncDOMEvent.cpp => dom/events/nsAsyncDOMEvent.cpp
rename : content/events/public/nsAsyncDOMEvent.h => dom/events/nsAsyncDOMEvent.h
rename : content/events/src/nsContentEventHandler.cpp => dom/events/nsContentEventHandler.cpp
rename : content/events/src/nsContentEventHandler.h => dom/events/nsContentEventHandler.h
rename : content/events/src/nsDOMAnimationEvent.cpp => dom/events/nsDOMAnimationEvent.cpp
rename : content/events/src/nsDOMAnimationEvent.h => dom/events/nsDOMAnimationEvent.h
rename : content/events/src/nsDOMBeforeUnloadEvent.cpp => dom/events/nsDOMBeforeUnloadEvent.cpp
rename : content/events/src/nsDOMBeforeUnloadEvent.h => dom/events/nsDOMBeforeUnloadEvent.h
rename : content/events/src/nsDOMClipboardEvent.cpp => dom/events/nsDOMClipboardEvent.cpp
rename : content/events/src/nsDOMClipboardEvent.h => dom/events/nsDOMClipboardEvent.h
rename : content/events/src/nsDOMCommandEvent.cpp => dom/events/nsDOMCommandEvent.cpp
rename : content/events/src/nsDOMCommandEvent.h => dom/events/nsDOMCommandEvent.h
rename : content/events/src/nsDOMCompositionEvent.cpp => dom/events/nsDOMCompositionEvent.cpp
rename : content/events/src/nsDOMCompositionEvent.h => dom/events/nsDOMCompositionEvent.h
rename : content/events/src/nsDOMDataContainerEvent.cpp => dom/events/nsDOMDataContainerEvent.cpp
rename : content/events/src/nsDOMDataContainerEvent.h => dom/events/nsDOMDataContainerEvent.h
rename : content/events/src/nsDOMDataTransfer.cpp => dom/events/nsDOMDataTransfer.cpp
rename : content/events/src/nsDOMDataTransfer.h => dom/events/nsDOMDataTransfer.h
rename : content/events/src/nsDOMDeviceMotionEvent.cpp => dom/events/nsDOMDeviceMotionEvent.cpp
rename : content/events/src/nsDOMDeviceMotionEvent.h => dom/events/nsDOMDeviceMotionEvent.h
rename : content/events/src/nsDOMDragEvent.cpp => dom/events/nsDOMDragEvent.cpp
rename : content/events/src/nsDOMDragEvent.h => dom/events/nsDOMDragEvent.h
rename : content/events/src/nsDOMEvent.cpp => dom/events/nsDOMEvent.cpp
rename : content/events/src/nsDOMEvent.h => dom/events/nsDOMEvent.h
rename : content/events/src/nsDOMEventTargetHelper.cpp => dom/events/nsDOMEventTargetHelper.cpp
rename : content/events/src/nsDOMEventTargetHelper.h => dom/events/nsDOMEventTargetHelper.h
rename : content/events/src/nsDOMFocusEvent.cpp => dom/events/nsDOMFocusEvent.cpp
rename : content/events/src/nsDOMFocusEvent.h => dom/events/nsDOMFocusEvent.h
rename : content/events/public/nsDOMKeyNameList.h => dom/events/nsDOMKeyNameList.h
rename : content/events/src/nsDOMKeyboardEvent.cpp => dom/events/nsDOMKeyboardEvent.cpp
rename : content/events/src/nsDOMKeyboardEvent.h => dom/events/nsDOMKeyboardEvent.h
rename : content/events/src/nsDOMMessageEvent.cpp => dom/events/nsDOMMessageEvent.cpp
rename : content/events/src/nsDOMMessageEvent.h => dom/events/nsDOMMessageEvent.h
rename : content/events/src/nsDOMMouseEvent.cpp => dom/events/nsDOMMouseEvent.cpp
rename : content/events/src/nsDOMMouseEvent.h => dom/events/nsDOMMouseEvent.h
rename : content/events/src/nsDOMMouseScrollEvent.cpp => dom/events/nsDOMMouseScrollEvent.cpp
rename : content/events/src/nsDOMMouseScrollEvent.h => dom/events/nsDOMMouseScrollEvent.h
rename : content/events/src/nsDOMMutationEvent.cpp => dom/events/nsDOMMutationEvent.cpp
rename : content/events/src/nsDOMMutationEvent.h => dom/events/nsDOMMutationEvent.h
rename : content/events/src/nsDOMNotifyAudioAvailableEvent.cpp => dom/events/nsDOMNotifyAudioAvailableEvent.cpp
rename : content/events/src/nsDOMNotifyAudioAvailableEvent.h => dom/events/nsDOMNotifyAudioAvailableEvent.h
rename : content/events/src/nsDOMNotifyPaintEvent.cpp => dom/events/nsDOMNotifyPaintEvent.cpp
rename : content/events/src/nsDOMNotifyPaintEvent.h => dom/events/nsDOMNotifyPaintEvent.h
rename : content/events/src/nsDOMScrollAreaEvent.cpp => dom/events/nsDOMScrollAreaEvent.cpp
rename : content/events/src/nsDOMScrollAreaEvent.h => dom/events/nsDOMScrollAreaEvent.h
rename : content/events/src/nsDOMSimpleGestureEvent.cpp => dom/events/nsDOMSimpleGestureEvent.cpp
rename : content/events/src/nsDOMSimpleGestureEvent.h => dom/events/nsDOMSimpleGestureEvent.h
rename : content/events/src/nsDOMTextEvent.cpp => dom/events/nsDOMTextEvent.cpp
rename : content/events/src/nsDOMTextEvent.h => dom/events/nsDOMTextEvent.h
rename : content/events/src/nsDOMTouchEvent.cpp => dom/events/nsDOMTouchEvent.cpp
rename : content/events/src/nsDOMTouchEvent.h => dom/events/nsDOMTouchEvent.h
rename : content/events/src/nsDOMTransitionEvent.cpp => dom/events/nsDOMTransitionEvent.cpp
rename : content/events/src/nsDOMTransitionEvent.h => dom/events/nsDOMTransitionEvent.h
rename : content/events/src/nsDOMUIEvent.cpp => dom/events/nsDOMUIEvent.cpp
rename : content/events/src/nsDOMUIEvent.h => dom/events/nsDOMUIEvent.h
rename : content/events/src/nsDOMXULCommandEvent.cpp => dom/events/nsDOMXULCommandEvent.cpp
rename : content/events/src/nsDOMXULCommandEvent.h => dom/events/nsDOMXULCommandEvent.h
rename : content/events/src/nsEventDispatcher.cpp => dom/events/nsEventDispatcher.cpp
rename : content/events/public/nsEventDispatcher.h => dom/events/nsEventDispatcher.h
rename : content/events/src/nsEventListenerManager.cpp => dom/events/nsEventListenerManager.cpp
rename : content/events/src/nsEventListenerManager.h => dom/events/nsEventListenerManager.h
rename : content/events/src/nsEventListenerService.cpp => dom/events/nsEventListenerService.cpp
rename : content/events/src/nsEventListenerService.h => dom/events/nsEventListenerService.h
rename : content/events/public/nsEventNameList.h => dom/events/nsEventNameList.h
rename : content/events/src/nsEventStateManager.cpp => dom/events/nsEventStateManager.cpp
rename : content/events/src/nsEventStateManager.h => dom/events/nsEventStateManager.h
rename : content/events/public/nsEventStates.h => dom/events/nsEventStates.h
rename : content/events/public/nsIEventListenerService.idl => dom/events/nsIEventListenerService.idl
rename : dom/base/nsIJSEventListener.h => dom/events/nsIJSEventListener.h
rename : content/events/src/nsIMEStateManager.cpp => dom/events/nsIMEStateManager.cpp
rename : content/events/src/nsIMEStateManager.h => dom/events/nsIMEStateManager.h
rename : content/events/public/nsIPrivateTextEvent.h => dom/events/nsIPrivateTextEvent.h
rename : content/events/public/nsIPrivateTextRange.h => dom/events/nsIPrivateTextRange.h
rename : dom/src/events/nsJSEventListener.cpp => dom/events/nsJSEventListener.cpp
rename : dom/src/events/nsJSEventListener.h => dom/events/nsJSEventListener.h
rename : content/events/src/nsPaintRequest.cpp => dom/events/nsPaintRequest.cpp
rename : content/events/src/nsPaintRequest.h => dom/events/nsPaintRequest.h
rename : content/events/src/nsPrivateTextRange.cpp => dom/events/nsPrivateTextRange.cpp
rename : content/events/src/nsPrivateTextRange.h => dom/events/nsPrivateTextRange.h
rename : content/events/public/nsVKList.h => dom/events/nsVKList.h
rename : content/events/test/bug226361_iframe.xhtml => dom/events/test/bug226361_iframe.xhtml
rename : content/events/test/bug299673.js => dom/events/test/bug299673.js
rename : content/events/test/bug322588-popup.html => dom/events/test/bug322588-popup.html
rename : content/events/test/bug415498-doc1.html => dom/events/test/bug415498-doc1.html
rename : content/events/test/bug415498-doc2.html => dom/events/test/bug415498-doc2.html
rename : content/events/test/bug426082.html => dom/events/test/bug426082.html
rename : content/events/test/bug457672.html => dom/events/test/bug457672.html
rename : content/events/test/bug591249_iframe.xul => dom/events/test/bug591249_iframe.xul
rename : content/events/test/bug602962.xul => dom/events/test/bug602962.xul
rename : content/events/test/bug656379-1.html => dom/events/test/bug656379-1.html
rename : content/events/test/chrome.ini => dom/events/test/chrome.ini
rename : content/events/test/empty.js => dom/events/test/empty.js
rename : content/events/test/file_bug679494.html => dom/events/test/file_bug679494.html
rename : content/events/test/mochitest.ini => dom/events/test/mochitest.ini
rename : content/events/test/test_addEventListenerExtraArg.html => dom/events/test/test_addEventListenerExtraArg.html
rename : content/events/test/test_all_synthetic_events.html => dom/events/test/test_all_synthetic_events.html
rename : content/events/test/test_bug226361.xhtml => dom/events/test/test_bug226361.xhtml
rename : content/events/test/test_bug238987.html => dom/events/test/test_bug238987.html
rename : content/events/test/test_bug288392.html => dom/events/test/test_bug288392.html
rename : content/events/test/test_bug299673-1.html => dom/events/test/test_bug299673-1.html
rename : content/events/test/test_bug299673-2.html => dom/events/test/test_bug299673-2.html
rename : content/events/test/test_bug322588.html => dom/events/test/test_bug322588.html
rename : content/events/test/test_bug328885.html => dom/events/test/test_bug328885.html
rename : content/events/test/test_bug336682.js => dom/events/test/test_bug336682.js
rename : content/events/test/test_bug336682_1.html => dom/events/test/test_bug336682_1.html
rename : content/events/test/test_bug336682_2.xul => dom/events/test/test_bug336682_2.xul
rename : content/events/test/test_bug367781.html => dom/events/test/test_bug367781.html
rename : content/events/test/test_bug368835.html => dom/events/test/test_bug368835.html
rename : content/events/test/test_bug379120.html => dom/events/test/test_bug379120.html
rename : content/events/test/test_bug391568.xhtml => dom/events/test/test_bug391568.xhtml
rename : content/events/test/test_bug402089.html => dom/events/test/test_bug402089.html
rename : content/events/test/test_bug405632.html => dom/events/test/test_bug405632.html
rename : content/events/test/test_bug409604.html => dom/events/test/test_bug409604.html
rename : content/events/test/test_bug412567.html => dom/events/test/test_bug412567.html
rename : content/events/test/test_bug415498.xul => dom/events/test/test_bug415498.xul
rename : content/events/test/test_bug422132.html => dom/events/test/test_bug422132.html
rename : content/events/test/test_bug426082.html => dom/events/test/test_bug426082.html
rename : content/events/test/test_bug427537.html => dom/events/test/test_bug427537.html
rename : content/events/test/test_bug428988.html => dom/events/test/test_bug428988.html
rename : content/events/test/test_bug432698.html => dom/events/test/test_bug432698.html
rename : content/events/test/test_bug443985.html => dom/events/test/test_bug443985.html
rename : content/events/test/test_bug447736.html => dom/events/test/test_bug447736.html
rename : content/events/test/test_bug448602.html => dom/events/test/test_bug448602.html
rename : content/events/test/test_bug450876.html => dom/events/test/test_bug450876.html
rename : content/events/test/test_bug456273.html => dom/events/test/test_bug456273.html
rename : content/events/test/test_bug457672.html => dom/events/test/test_bug457672.html
rename : content/events/test/test_bug489671.html => dom/events/test/test_bug489671.html
rename : content/events/test/test_bug493251.html => dom/events/test/test_bug493251.html
rename : content/events/test/test_bug502818.html => dom/events/test/test_bug502818.html
rename : content/events/test/test_bug508479.html => dom/events/test/test_bug508479.html
rename : content/events/test/test_bug517851.html => dom/events/test/test_bug517851.html
rename : content/events/test/test_bug534833.html => dom/events/test/test_bug534833.html
rename : content/events/test/test_bug545268.html => dom/events/test/test_bug545268.html
rename : content/events/test/test_bug547996-1.html => dom/events/test/test_bug547996-1.html
rename : content/events/test/test_bug547996-2.xhtml => dom/events/test/test_bug547996-2.xhtml
rename : content/events/test/test_bug556493.html => dom/events/test/test_bug556493.html
rename : content/events/test/test_bug563329.html => dom/events/test/test_bug563329.html
rename : content/events/test/test_bug574663.html => dom/events/test/test_bug574663.html
rename : content/events/test/test_bug586961.xul => dom/events/test/test_bug586961.xul
rename : content/events/test/test_bug591249.xul => dom/events/test/test_bug591249.xul
rename : content/events/test/test_bug591815.html => dom/events/test/test_bug591815.html
rename : content/events/test/test_bug593959.html => dom/events/test/test_bug593959.html
rename : content/events/test/test_bug602962.xul => dom/events/test/test_bug602962.xul
rename : content/events/test/test_bug603008.html => dom/events/test/test_bug603008.html
rename : content/events/test/test_bug605242.html => dom/events/test/test_bug605242.html
rename : content/events/test/test_bug607464.html => dom/events/test/test_bug607464.html
rename : content/events/test/test_bug613634.html => dom/events/test/test_bug613634.html
rename : content/events/test/test_bug615597.html => dom/events/test/test_bug615597.html
rename : content/events/test/test_bug617528.xul => dom/events/test/test_bug617528.xul
rename : content/events/test/test_bug624127.html => dom/events/test/test_bug624127.html
rename : content/events/test/test_bug635465.html => dom/events/test/test_bug635465.html
rename : content/events/test/test_bug641477.html => dom/events/test/test_bug641477.html
rename : content/events/test/test_bug648573.html => dom/events/test/test_bug648573.html
rename : content/events/test/test_bug650493.html => dom/events/test/test_bug650493.html
rename : content/events/test/test_bug656379-1.html => dom/events/test/test_bug656379-1.html
rename : content/events/test/test_bug656379-2.html => dom/events/test/test_bug656379-2.html
rename : content/events/test/test_bug656954.html => dom/events/test/test_bug656954.html
rename : content/events/test/test_bug659071.html => dom/events/test/test_bug659071.html
rename : content/events/test/test_bug659350.html => dom/events/test/test_bug659350.html
rename : content/events/test/test_bug662678.html => dom/events/test/test_bug662678.html
rename : content/events/test/test_bug667612.html => dom/events/test/test_bug667612.html
rename : content/events/test/test_bug667919-1.html => dom/events/test/test_bug667919-1.html
rename : content/events/test/test_bug679494.xul => dom/events/test/test_bug679494.xul
rename : content/events/test/test_bug689564.html => dom/events/test/test_bug689564.html
rename : content/events/test/test_bug698929.html => dom/events/test/test_bug698929.html
rename : content/events/test/test_bug741666.html => dom/events/test/test_bug741666.html
rename : content/events/test/test_bug742376.html => dom/events/test/test_bug742376.html
rename : content/events/test/test_bug812744.html => dom/events/test/test_bug812744.html
rename : content/events/test/test_bug822898.html => dom/events/test/test_bug822898.html
rename : content/events/test/test_bug847597.html => dom/events/test/test_bug847597.html
rename : content/events/test/test_bug855741.html => dom/events/test/test_bug855741.html
rename : content/events/test/test_bug864040.html => dom/events/test/test_bug864040.html
rename : content/events/test/test_bug930374-chrome.html => dom/events/test/test_bug930374-chrome.html
rename : content/events/test/test_bug930374-content.html => dom/events/test/test_bug930374-content.html
rename : content/events/test/test_bug944011.html => dom/events/test/test_bug944011.html
rename : content/events/test/test_bug944847.html => dom/events/test/test_bug944847.html
rename : content/events/test/test_bug946632.html => dom/events/test/test_bug946632.html
rename : content/events/test/test_clickevent_on_input.html => dom/events/test/test_clickevent_on_input.html
rename : content/events/test/test_continuous_wheel_events.html => dom/events/test/test_continuous_wheel_events.html
rename : content/events/test/test_dblclick_explicit_original_target.html => dom/events/test/test_dblclick_explicit_original_target.html
rename : content/events/test/test_dom_keyboard_event.html => dom/events/test/test_dom_keyboard_event.html
rename : content/events/test/test_dom_mouse_event.html => dom/events/test/test_dom_mouse_event.html
rename : content/events/test/test_dom_wheel_event.html => dom/events/test/test_dom_wheel_event.html
rename : content/events/test/test_draggableprop.html => dom/events/test/test_draggableprop.html
rename : content/events/test/test_dragstart.html => dom/events/test/test_dragstart.html
rename : content/events/test/test_eventctors.html => dom/events/test/test_eventctors.html
rename : content/events/test/test_eventctors.xul => dom/events/test/test_eventctors.xul
rename : content/events/test/test_focus_disabled.html => dom/events/test/test_focus_disabled.html
rename : content/events/test/test_messageEvent.html => dom/events/test/test_messageEvent.html
rename : content/events/test/test_moz_mouse_pixel_scroll_event.html => dom/events/test/test_moz_mouse_pixel_scroll_event.html
rename : content/events/test/test_wheel_default_action.html => dom/events/test/test_wheel_default_action.html
rename : content/events/test/window_bug493251.html => dom/events/test/window_bug493251.html
rename : content/events/test/window_bug617528.xul => dom/events/test/window_bug617528.xul
rename : content/events/test/window_bug659071.html => dom/events/test/window_bug659071.html
rename : content/events/test/window_wheel_default_action.html => dom/events/test/window_wheel_default_action.html
extra : rebase_source : 5eb1db8f1791b8842ddc683e3c0ea13e4e3a933b
2014-01-10 16:03:25 +13:00

554 lines
17 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=508906
-->
<head>
<title>Test for Bug 603008</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=508906">Mozilla Bug 603008</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="application/javascript;version=1.8">
/** Test for Bug 306008 - Touch* Events **/
let tests = [], testTarget, parent;
let touch = {
id: 0,
point: {x: 0, y: 0},
radius: {x: 0, y: 0},
rotation: 0,
force: 0.5,
target: null
}
function nextTest() {
if (tests.length)
SimpleTest.executeSoon(tests.shift());
}
function random() {
return Math.floor(Math.random() * 100);
}
function checkEvent(aFakeEvent) {
return function(aEvent) {
is(aFakeEvent.ctrlKey, aEvent.ctrlKey, "Correct ctrlKey");
is(aFakeEvent.altKey, aEvent.altKey, "Correct altKey");
is(aFakeEvent.shiftKey, aEvent.shiftKey, "Correct shiftKey");
is(aFakeEvent.metaKey, aEvent.metaKey, "Correct metaKey");
checkTouches(aFakeEvent.touches, aEvent.touches);
checkTouches(aFakeEvent.targetTouches, aEvent.targetTouches);
checkTouches(aFakeEvent.changedTouches, aEvent.changedTouches);
}
}
function checkTouches(aTouches1, aTouches2) {
is(aTouches1.length, aTouches2.length, "Correct touches length");
for (var i = 0; i < aTouches1.length; i++) {
checkTouch(aTouches1[i], aTouches2[i]);
}
}
function checkTouch(aFakeTouch, aTouch) {
is(aFakeTouch.identifier, aTouch.identifier, "Touch has correct identifier");
is(aFakeTouch.target, aTouch.target, "Touch has correct target");
is(aFakeTouch.page.x, aTouch.pageX, "Touch has correct pageX");
is(aFakeTouch.page.y, aTouch.pageY, "Touch has correct pageY");
is(aFakeTouch.page.x + Math.round(window.mozInnerScreenX), aTouch.screenX, "Touch has correct screenX");
is(aFakeTouch.page.y + Math.round(window.mozInnerScreenY), aTouch.screenY, "Touch has correct screenY");
is(aFakeTouch.page.x, aTouch.clientX, "Touch has correct clientX");
is(aFakeTouch.page.y, aTouch.clientY, "Touch has correct clientY");
is(aFakeTouch.radius.x, aTouch.radiusX, "Touch has correct radiusX");
is(aFakeTouch.radius.y, aTouch.radiusY, "Touch has correct radiusY");
is(aFakeTouch.rotationAngle, aTouch.rotationAngle, "Touch has correct rotationAngle");
is(aFakeTouch.force, aTouch.force, "Touch has correct force");
}
function sendTouchEvent(windowUtils, aType, aEvent, aModifiers) {
var ids = [], xs=[], ys=[], rxs = [], rys = [],
rotations = [], forces = [];
for (var touchType of ["touches", "changedTouches", "targetTouches"]) {
for (var i = 0; i < aEvent[touchType].length; i++) {
if (ids.indexOf(aEvent[touchType][i].identifier) == -1) {
ids.push(aEvent[touchType][i].identifier);
xs.push(aEvent[touchType][i].page.x);
ys.push(aEvent[touchType][i].page.y);
rxs.push(aEvent[touchType][i].radius.x);
rys.push(aEvent[touchType][i].radius.y);
rotations.push(aEvent[touchType][i].rotationAngle);
forces.push(aEvent[touchType][i].force);
}
}
}
return windowUtils.sendTouchEvent(aType,
ids, xs, ys, rxs, rys,
rotations, forces,
ids.length, aModifiers, 0);
}
function touchEvent(aOptions) {
if (!aOptions) {
aOptions = {};
}
this.ctrlKey = aOptions.ctrlKey || false;
this.altKey = aOptions.altKey || false;
this.shiftKey = aOptions.shiftKey || false;
this.metaKey = aOptions.metaKey || false;
this.touches = aOptions.touches || [];
this.targetTouches = aOptions.targetTouches || [];
this.changedTouches = aOptions.changedTouches || [];
}
function testtouch(aOptions) {
if (!aOptions)
aOptions = {};
this.identifier = aOptions.identifier || 0;
this.target = aOptions.target || 0;
this.page = aOptions.page || {x: 0, y: 0};
this.radius = aOptions.radius || {x: 0, y: 0};
this.rotationAngle = aOptions.rotationAngle || 0;
this.force = aOptions.force || 1;
}
function testSingleTouch(name) {
let cwu = SpecialPowers.getDOMWindowUtils(window);
let target = document.getElementById("testTarget");
let target2 = document.getElementById("testTarget2");
let bcr = target.getBoundingClientRect();
let bcr2 = target2.getBoundingClientRect();
let touch1 = new testtouch({
page: {x: Math.round(bcr.left + bcr.width/2),
y: Math.round(bcr.top + bcr.height/2)},
target: target
});
let event = new touchEvent({
touches: [touch1],
targetTouches: [touch1],
changedTouches: [touch1]
});
// test touchstart event fires correctly
var checkFunction = checkEvent(event);
window.addEventListener("touchstart", checkFunction, false);
sendTouchEvent(cwu, "touchstart", event, 0);
window.removeEventListener("touchstart", checkFunction, false);
// test touchmove event fires correctly
event.touches[0].page.x -= 1;
event.targetTouches[0].page.x -= 1;
event.changedTouches[0].page.x -= 1;
checkFunction = checkEvent(event);
window.addEventListener("touchmove", checkFunction, false);
sendTouchEvent(cwu, "touchmove", event, 0);
window.removeEventListener("touchmove", checkFunction, false);
// test touchend event fires correctly
event.touches = [];
event.targetTouches = [];
checkFunction = checkEvent(event);
window.addEventListener("touchend", checkFunction, false);
sendTouchEvent(cwu, "touchend", event, 0);
window.removeEventListener("touchend", checkFunction, false);
nextTest();
}
function testSingleTouch2(name) {
// firing a touchstart that includes only one touch will evict any touches in the queue with touchend messages
let cwu = SpecialPowers.getDOMWindowUtils(window);
let target = document.getElementById("testTarget");
let target2 = document.getElementById("testTarget2");
let bcr = target.getBoundingClientRect();
let bcr2 = target2.getBoundingClientRect();
let touch1 = new testtouch({
identifier: 0,
page: {x: Math.round(bcr.left + bcr.width/2),
y: Math.round(bcr.top + bcr.height/2)},
target: target
});
let event1 = new touchEvent({
touches: [touch1],
targetTouches: [touch1],
changedTouches: [touch1]
});
let touch2 = new testtouch({
identifier: 1,
page: {x: Math.round(bcr2.left + bcr2.width/2),
y: Math.round(bcr2.top + bcr2.height/2)},
target: target2
});
let event2 = new touchEvent({
touches: [touch2],
targetTouches: [touch2],
changedTouches: [touch2]
});
// test touchstart event fires correctly
var checkFunction1 = checkEvent(event1);
window.addEventListener("touchstart", checkFunction1, false);
sendTouchEvent(cwu, "touchstart", event1, 0);
window.removeEventListener("touchstart", checkFunction1, false);
event1.touches = [];
event1.targetTouches = [];
checkFunction1 = checkEvent(event1);
var checkFunction2 = checkEvent(event2);
window.addEventListener("touchend", checkFunction1, false);
window.addEventListener("touchstart", checkFunction2, false);
sendTouchEvent(cwu, "touchstart", event2, 0);
window.removeEventListener("touchend", checkFunction1, false);
window.removeEventListener("touchstart", checkFunction2, false);
sendTouchEvent(cwu, "touchstart", event1, 0);
nextTest();
}
function testMultiTouch(name) {
let cwu = SpecialPowers.getDOMWindowUtils(window);
let target1 = document.getElementById("testTarget");
let target2 = document.getElementById("testTarget2");
let bcr = target1.getBoundingClientRect();
let bcr2 = target2.getBoundingClientRect();
let touch1 = new testtouch({
identifier: 0,
page: {x: Math.round(bcr.left + bcr.width/2),
y: Math.round(bcr.top + bcr.height/2)},
target: target1
});
let touch2 = new testtouch({
identifier: 1,
page: {x: Math.round(bcr2.left + bcr2.width/2),
y: Math.round(bcr2.top + bcr2.height/2)},
target: target2
});
let event = new touchEvent({
touches: [touch1],
targetTouches: [touch1],
changedTouches: [touch1]
});
// test touchstart event fires correctly
var checkFunction = checkEvent(event);
window.addEventListener("touchstart", checkFunction, false);
sendTouchEvent(cwu, "touchstart", event, 0);
window.removeEventListener("touchstart", checkFunction, false);
event.touches.push(touch2);
event.targetTouches = [touch2];
event.changedTouches = [touch2];
window.addEventListener("touchstart", checkFunction, false);
sendTouchEvent(cwu, "touchstart", event, 0);
window.removeEventListener("touchstart", checkFunction, false);
// test moving one touch point
event.touches[0].page.x -= 1;
event.targetTouches = [event.touches[0]];
event.changedTouches = [event.touches[0]];
window.addEventListener("touchmove", checkFunction, false);
sendTouchEvent(cwu, "touchmove", event, 0);
window.removeEventListener("touchmove", checkFunction, false);
// test moving both touch points -- two touchmove events should fire, one on each target
event.touches[0].page.x -= 1;
event.touches[1].page.x -= 1;
event.targetTouches = event.touches;
event.changedTouches = event.touches;
var touchMoveEvents = 0;
var checkFunction2 = function(aEvent) {
is(event.ctrlKey, aEvent.ctrlKey, "Correct ctrlKey");
is(event.altKey, aEvent.altKey, "Correct altKey");
is(event.shiftKey, aEvent.shiftKey, "Correct shiftKey");
is(event.metaKey, aEvent.metaKey, "Correct metaKey");
checkTouches(event.touches, aEvent.touches);
checkTouches(event.changedTouches, aEvent.changedTouches);
if (aEvent.targetTouches[0].target == target1) {
checkTouches([event.touches[0]], aEvent.targetTouches);
} else if (aEvent.targetTouches[0].target == target2) {
checkTouches([event.touches[1]], aEvent.targetTouches);
} else
ok(false, "Event target is incorrect: " + event.targetTouches[0].target.nodeName + "#" + event.targetTouches[0].target.id);
touchMoveEvents++;
};
window.addEventListener("touchmove", checkFunction2, false);
sendTouchEvent(cwu, "touchmove", event, 0);
ok(touchMoveEvents, 2, "Correct number of touchmove events fired");
window.removeEventListener("touchmove", checkFunction2, false);
// test removing just one finger
var expected = new touchEvent({
touches: [touch2],
targetTouches: [],
changedTouches: [touch1]
});
checkFunction = checkEvent(expected);
event.touches = [];
event.targetTouches = [];
event.changedTouches = [touch1];
// test removing the other finger
window.addEventListener("touchend", checkFunction, false);
sendTouchEvent(cwu, "touchend", event, 0);
window.removeEventListener("touchend", checkFunction, false);
event.touches = [];
event.targetTouches = [];
event.changedTouches = [touch2];
checkFunction = checkEvent(event);
window.addEventListener("touchend", checkFunction, false);
sendTouchEvent(cwu, "touchend", event, 0);
window.removeEventListener("touchend", checkFunction, false);
nextTest();
}
function testTouchChanged() {
let cwu = SpecialPowers.getDOMWindowUtils(window);
let target1 = document.getElementById("testTarget");
let bcr = target1.getBoundingClientRect();
let touch1 = new testtouch({
identifier: 0,
page: {x: Math.round(bcr.left + bcr.width/2),
y: Math.round(bcr.top + bcr.height/2)},
target: target1
});
let event = new touchEvent({
touches: [touch1],
targetTouches: [touch1],
changedTouches: [touch1]
});
var checkFunction = checkEvent(event);
sendTouchEvent(cwu, "touchstart", event, 0);
var moveEvents = 0;
function onMove(aEvent) {
moveEvents++;
}
window.addEventListener("touchmove", onMove, false);
// changing nothing should not fire a touchmove event
sendTouchEvent(cwu, "touchmove", event, 0);
// test moving x
event.touches[0].page.x -= 1;
sendTouchEvent(cwu, "touchmove", event, 0);
// test moving y
event.touches[0].page.y -= 1;
sendTouchEvent(cwu, "touchmove", event, 0);
// test changing y radius
event.touches[0].radius.y += 1;
sendTouchEvent(cwu, "touchmove", event, 0);
// test changing x radius
event.touches[0].radius.x += 1;
sendTouchEvent(cwu, "touchmove", event, 0);
// test changing rotationAngle
event.touches[0].rotationAngle += 1;
sendTouchEvent(cwu, "touchmove", event, 0);
// test changing force
event.touches[0].force += 1;
sendTouchEvent(cwu, "touchmove", event, 0);
// changing nothing again
sendTouchEvent(cwu, "touchmove", event, 0);
is(moveEvents, 6, "Six move events fired");
window.removeEventListener("touchmove", onMove, false);
sendTouchEvent(cwu, "touchend", event, 0);
nextTest();
}
function testPreventDefault() {
let cwu = SpecialPowers.getDOMWindowUtils(window);
let target = document.getElementById("testTarget");
let target2 = document.getElementById("testTarget2");
let bcr = target.getBoundingClientRect();
let bcr2 = target2.getBoundingClientRect();
let touch1 = new testtouch({
page: {x: bcr.left + bcr.width/2,
y: bcr.top + bcr.height/2},
target: target
});
let event = new touchEvent({
touches: [touch1],
targetTouches: [touch1],
changedTouches: [touch1]
});
let preventFunction = function(aEvent) {
aEvent.preventDefault();
}
let tests = [
[{ name: "touchstart", prevent: false },
{ name: "touchmove", prevent: false },
{ name: "touchmove", prevent: false },
{ name: "touchend", prevent: false }],
[{ name: "touchstart", prevent: true, doPrevent: true },
{ name: "touchmove", prevent: true },
{ name: "touchmove", prevent: true },
{ name: "touchend", prevent: true }],
[{ name: "touchstart", prevent: false },
{ name: "touchmove", prevent: true, doPrevent: true },
{ name: "touchmove", prevent: true },
{ name: "touchend", prevent: true }],
[{ name: "touchstart", prevent: false },
{ name: "touchmove", prevent: false },
{ name: "touchmove", prevent: false, doPrevent: true },
{ name: "touchend", prevent: false }],
[{ name: "touchstart", prevent: false },
{ name: "touchmove", prevent: false },
{ name: "touchmove", prevent: false },
{ name: "touchend", prevent: false, doPrevent: true }]
];
var dotest = function(aTest) {
if (aTest.doPrevent) {
target.addEventListener(aTest.name, preventFunction, false);
}
if (aTest.name == "touchmove") {
touch1.page.x++;
event.touches[0] = touch1;
}
is(sendTouchEvent(cwu, aTest.name, event, 0), aTest.prevent, "Got correct status");
if (aTest.doPrevent)
target.removeEventListener(aTest.name, preventFunction, false);
}
for (var i = 0; i < tests.length; i++) {
for (var j = 0; j < tests[i].length; j++) {
dotest(tests[i][j]);
}
}
nextTest();
}
function testRemovingElement() {
let cwu = SpecialPowers.getDOMWindowUtils(window);
let target = document.getElementById("testTarget");
let bcr = document.getElementById("testTarget").getBoundingClientRect();
let touch1 = new testtouch({
page: {x: bcr.left + bcr.width/2,
y: bcr.top + bcr.height/2},
});
let e = new touchEvent({
touches: [touch1],
targetTouches: [touch1],
changedTouches: [touch1]
});
var touchEvents = 0;
var removeTarget = function(aEvent) {
aEvent.target.parentNode.removeChild(aEvent.target);
};
var checkTarget = function(aEvent) {
is(aEvent.target, target, "Event has correct target");
touchEvents++;
};
target.addEventListener("touchstart", removeTarget, false);
target.addEventListener("touchmove", checkTarget, false);
target.addEventListener("touchend", checkTarget, false);
sendTouchEvent(cwu, "touchstart", e, 0);
e.touches[0].page.x++;
sendTouchEvent(cwu, "touchmove", e, 0);
sendTouchEvent(cwu, "touchend", e, 0);
target.removeEventListener("touchstart", removeTarget, false);
target.removeEventListener("touchmove", checkTarget, false);
target.removeEventListener("touchend", checkTarget, false);
is(touchEvents, 2, "Check target was called twice");
nextTest();
}
function testNAC() {
let cwu = SpecialPowers.getDOMWindowUtils(window);
let target = document.getElementById("testTarget3");
let bcr = target.getBoundingClientRect();
let touch1 = new testtouch({
page: {x: Math.round(bcr.left + bcr.width/2),
y: Math.round(bcr.top + bcr.height/2)},
target: target
});
let event = new touchEvent({
touches: [touch1],
targetTouches: [touch1],
changedTouches: [touch1]
});
// test touchstart event fires correctly
var checkFunction = checkEvent(event);
window.addEventListener("touchstart", checkFunction, false);
sendTouchEvent(cwu, "touchstart", event, 0);
window.removeEventListener("touchstart", checkFunction, false);
sendTouchEvent(cwu, "touchend", event, 0);
nextTest();
}
function doTest() {
tests.push(testSingleTouch);
tests.push(testSingleTouch2);
tests.push(testMultiTouch);
tests.push(testPreventDefault);
tests.push(testTouchChanged);
tests.push(testRemovingElement);
tests.push(testNAC);
tests.push(function() {
SimpleTest.finish();
});
nextTest();
}
SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest);
</script>
</pre>
<div id="parent">
<span id="testTarget" style="padding: 5px; border: 1px solid black;">testTarget</span>
<span id="testTarget2" style="padding: 5px; border: 1px solid blue;">testTarget</span>
<input type="text" id="testTarget3">
</div>
</body>
</html>