Index: LayoutTests/svg/custom/use-instanceRoot-as-event-target.xhtml |
diff --git a/LayoutTests/svg/custom/use-instanceRoot-as-event-target.xhtml b/LayoutTests/svg/custom/use-instanceRoot-as-event-target.xhtml |
deleted file mode 100644 |
index 368ee4f7c036b8a130e7bb850f7e9d0b0c8a2600..0000000000000000000000000000000000000000 |
--- a/LayoutTests/svg/custom/use-instanceRoot-as-event-target.xhtml |
+++ /dev/null |
@@ -1,291 +0,0 @@ |
-<html xmlns="http://www.w3.org/1999/xhtml"> |
-<head> |
-<script src="../../resources/js-test.js"></script> |
-</head> |
-<body onload="eventTestOne()"> |
- |
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100px" height="100px"> |
- <defs> |
- <rect id="target" fill="red" width="100" height="100" onclick="eventHandler(evt)"/> |
- </defs> |
- <use id="test" xlink:href="#target"/> |
-</svg> |
- |
-<p id="description"/> |
-<div id="console"/> |
- |
-<script> |
-// Setting up the testcase |
-window.jsTestIsAsync = true; |
-if (window.testRunner) |
- testRunner.waitUntilDone(); |
- |
-var useElement = document.getElementById("test"); |
-var rectElement = document.getElementById("target"); |
- |
-// Start test immediately, to see wheter instanceRoot is already available, as expected. |
-description("Test SVG use element specific event handling using SVGElementInstance: "); |
-debug("'useElement' is the original use element"); |
-debug("'rectElement' is the original element which gets cloned by the use element"); |
- |
-// Helper functions |
-function eventHandler(evt) |
-{ |
- if (evt.type != nextEventType) { |
- debug("RECEIVED UNEXPECTED EVENT! shouldBe='" + nextEventType + "' was='" + evt.type + "'"); |
- return; |
- } |
- |
- currentEvent = evt; |
- nextEventType = "not yet set"; |
- eval(eventNotification); |
-} |
- |
-function fireMouseOverEvent(newEventNotification) |
-{ |
- currentEvent = undefined; |
- nextEventType = "mouseover"; |
- eventNotification = newEventNotification; |
- |
- if (window.eventSender) { |
- setTimeout(function() { |
- eventSender.mouseMoveTo(200, 200); |
- eventSender.mouseMoveTo(50, 50); |
- }, 0); |
- } |
-} |
- |
-function fireMouseClickEvent(newEventNotification) |
-{ |
- currentEvent = undefined; |
- nextEventType = "click"; |
- eventNotification = newEventNotification; |
- |
- if (window.eventSender) { |
- setTimeout(function() { |
- eventSender.mouseMoveTo(50, 50); |
- eventSender.mouseDown(); |
- eventSender.mouseUp(); |
- }, 0); |
- } |
-} |
- |
-function fireSimulatedMouseOverEvent(newEventNotification, eventTarget) |
-{ |
- currentEvent = undefined; |
- nextEventType = "mouseover"; |
- eventNotification = newEventNotification; |
- |
- var event = document.createEvent("MouseEvents"); |
- event.initMouseEvent(nextEventType, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); |
- |
- eventTarget.dispatchEvent(event); |
-} |
- |
-function fireSimulatedMouseClickEvent(newEventNotification, eventTarget) |
-{ |
- currentEvent = undefined; |
- nextEventType = "click"; |
- eventNotification = newEventNotification; |
- |
- var event = document.createEvent("MouseEvents"); |
- event.initMouseEvent(nextEventType, true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); |
- |
- eventTarget.dispatchEvent(event); |
-} |
- |
-function verifyEvent(evtString, targetString, currentTargetString) |
-{ |
- shouldBeEqualToString("currentEvent.toString()", "[object MouseEvent]"); |
- shouldBeEqualToString("currentEvent.type.toString()", evtString); |
- shouldBeEqualToString("currentEvent.target.toString()", targetString); |
- shouldBeEqualToString("currentEvent.currentTarget.toString()", currentTargetString); |
-} |
- |
-function verifyMouseOverEvent() |
-{ |
- verifyEvent("mouseover", "[object SVGElementInstance]", "[object SVGElementInstance]"); |
- |
- shouldBeTrue("currentEvent.target.correspondingElement == rectElement"); |
- shouldBeTrue("currentEvent.target.correspondingUseElement == useElement"); |
- shouldBeTrue("currentEvent.currentTarget.correspondingElement == rectElement"); |
- shouldBeTrue("currentEvent.currentTarget.correspondingUseElement == useElement"); |
- shouldBeTrue("currentEvent.target == currentEvent.currentTarget"); |
- shouldBeTrue("currentEvent.target.correspondingElement == currentEvent.currentTarget.correspondingElement"); |
- shouldBeTrue("currentEvent.target.correspondingUseElement == currentEvent.currentTarget.correspondingUseElement"); |
-} |
- |
-function verifyClickEvent() |
-{ |
- verifyEvent("click", "[object SVGElementInstance]", "[object SVGElementInstance]"); |
- |
- shouldBeTrue("currentEvent.target.correspondingElement == rectElement"); |
- shouldBeTrue("currentEvent.target.correspondingUseElement == useElement"); |
- shouldBeTrue("currentEvent.currentTarget.correspondingElement == rectElement"); |
- shouldBeTrue("currentEvent.currentTarget.correspondingUseElement == useElement"); |
- shouldBeTrue("currentEvent.target == currentEvent.currentTarget"); |
- shouldBeTrue("currentEvent.target.correspondingElement == currentEvent.currentTarget.correspondingElement"); |
- shouldBeTrue("currentEvent.target.correspondingUseElement == currentEvent.currentTarget.correspondingUseElement"); |
-} |
- |
-function verifyClickEventOnReferenced() |
-{ |
- verifyEvent("click", "[object SVGRectElement]", "[object SVGRectElement]"); |
- |
- shouldBeTrue("currentEvent.target == rectElement"); |
- shouldBeTrue("currentEvent.currentTarget == rectElement"); |
- shouldBeTrue("currentEvent.target == currentEvent.currentTarget"); |
-} |
- |
-function checkEventListenerNotReachable() |
-{ |
- debug(""); |
- debug("YOU SHOULD NOT SEE THIS TEXT. OTHERWHISE REMOVING EVENT LISTENERS FAILED!"); |
- debug(""); |
-} |
- |
-// Event test sections |
-function eventTestOne() |
-{ |
- debug(""); |
- debug("Test #1: Verify that the use element and the contained SVGElementInstance objects are valid"); |
- debug(""); |
- |
- shouldBeEqualToString("useElement.toString()", "[object SVGUseElement]"); |
- shouldBeEqualToString("useElement.instanceRoot.toString()", "[object SVGElementInstance]"); |
- |
- shouldBeEqualToString("useElement.instanceRoot.correspondingElement.toString()", "[object SVGRectElement]"); |
- shouldBeTrue("useElement.instanceRoot.correspondingElement == rectElement"); |
- |
- shouldBeEqualToString("useElement.instanceRoot.correspondingUseElement.toString()", "[object SVGUseElement]"); |
- shouldBeTrue("useElement.instanceRoot.correspondingUseElement == useElement"); |
- |
- shouldBeEqualToString("typeof useElement.addEventListener", "function"); |
- shouldBeEqualToString("typeof useElement.removeEventListener", "function"); |
- shouldBeEqualToString("typeof useElement.dispatchEvent", "function"); |
- |
- // Spec: An element and all its corresponding SVGElementInstance objects share an event |
- // listener list. The currentTarget attribute of the event can be used to determine through |
- // which object an event listener was invoked. |
- useElement.instanceRoot.addEventListener("mouseover", eventHandler, false); |
- fireMouseOverEvent("eventTestTwo()"); |
-} |
- |
-function eventTestTwo() |
-{ |
- debug(""); |
- debug("Test #2: Verify that events dispatched to the SVGElementInstance objects have correct target property values"); |
- debug(""); |
- |
- // Spec: The event handling for the non-exposed tree works as if the referenced element had been textually included as |
- // a deeply cloned child of the 'use' element, except that events are dispatched to the SVGElementInstance objects. |
- // The event's target and currentTarget attributes are set to the SVGElementInstance that corresponds to the target |
- // and current target elements in the referenced subtree. An event propagates through the exposed and non-exposed |
- // portions of the tree in the same manner as it would in the regular document tree: first going from the root element |
- // to the 'use' element and then through non-exposed tree elements in the capture phase, followed by the target phase |
- // at the target of the event, then bubbling back through non-exposed tree to the use element and then back through |
- // regular tree to the root element in bubbling phase. |
- verifyMouseOverEvent(); |
- |
- useElement.instanceRoot.removeEventListener("mouseover", eventHandler, false); |
- fireSimulatedMouseOverEvent("checkEventListenerNotReachable()", useElement.instanceRoot); |
- fireSimulatedMouseOverEvent("checkEventListenerNotReachable()", rectElement); |
- rectElement.addEventListener("mouseover", eventHandler, false); |
- |
- fireMouseOverEvent("eventTestThree()"); |
-} |
- |
-function eventTestThree() |
-{ |
- debug(""); |
- debug("Test #3: Verify that events dispatched by the user end up on the SVGElementInstance objects"); |
- debug(""); |
- |
- verifyMouseOverEvent(); |
- |
- useElement.instanceRoot.removeEventListener("mouseover", eventHandler, false); |
- fireSimulatedMouseOverEvent("checkEventListenerNotReachable()", useElement.instanceRoot); |
- fireSimulatedMouseOverEvent("checkEventListenerNotReachable()", rectElement); |
- fireSimulatedMouseClickEvent("eventTestFour()", rectElement); |
-} |
- |
-function eventTestFour() |
-{ |
- debug(""); |
- debug("Test #4: Verify that a click event got dispatched to the original tree as defined in the markup, when sent to the 'rectElement'"); |
- debug(""); |
- |
- verifyClickEventOnReferenced(); |
- |
- fireSimulatedMouseClickEvent("eventTestFive()", useElement.instanceRoot); |
-} |
- |
-function eventTestFive() |
-{ |
- debug(""); |
- debug("Test #5: Verify that a click event got dispatched to the instance tree when sent to the 'useElement.instanceRoot' with an event listener attached to 'rectElement'"); |
- debug(""); |
- |
- verifyClickEvent(); |
- |
- // This tests a webkit specific quirk: removeAttribute() on the target element, causes us to reclone the shadow tree. |
- // All event listener mutations are synchronized with the shadow tree and do not cause reclones. So if we add the |
- // click event listener to the current instanceRoot, remove the existing click listener from markup and then fire |
- // a click event, we're sure that the shadow tree is recloned before the eventTestSix() function is executed. |
- // If eventTestSix() is reached, we've properly preserved the dynamically created click event listener after recloning. |
- useElement.instanceRoot.addEventListener("click", eventHandler, false); |
- rectElement.removeAttribute("onclick"); |
- |
- fireMouseClickEvent("eventTestSix()"); |
-} |
- |
-function eventTestSix() |
-{ |
- debug(""); |
- debug("Test #6: Verify that the original click event listener got removed and a new one attached is attached to the use root SVGElementInstance"); |
- debug(""); |
- |
- verifyClickEvent(); |
- |
- useElement.instanceRoot.removeEventListener("click", eventHandler, false); |
- fireSimulatedMouseClickEvent("checkEventListenerNotReachable()", useElement.instanceRoot); |
- fireSimulatedMouseClickEvent("checkEventListenerNotReachable()", rectElement); |
- rectElement.addEventListener("click", eventHandler, false); |
- |
- fireMouseClickEvent("eventTestSeven()"); |
-} |
- |
-function eventTestSeven() |
-{ |
- debug(""); |
- debug("Test #7: Verify that the recreating the original click event listener dynamically worked and the event is still dispatched to the instance tree"); |
- debug(""); |
- |
- verifyClickEvent(); |
- |
- // Prepare for next tests |
- fireSimulatedMouseClickEvent("eventTestEight()", useElement.instanceRoot); |
-} |
- |
-function eventTestEight() |
-{ |
- debug(""); |
- debug("Test #8: Verify that the simulated click event got dispatched to the right target"); |
- debug(""); |
- |
- verifyClickEvent(); |
- |
- // Cleanup |
- useElement.instanceRoot.removeEventListener("click", eventHandler, false); |
- fireSimulatedMouseClickEvent("checkEventListenerNotReachable()", useElement.instanceRoot); |
- fireSimulatedMouseClickEvent("checkEventListenerNotReachable()", rectElement); |
- |
- // Indicate finish |
- rectElement.setAttribute("fill", "green"); |
- |
- finishJSTest(); |
-} |
-</script> |
- |
-</body> |
-</html> |