Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(218)

Unified Diff: LayoutTests/svg/custom/use-instanceRoot-as-event-target.xhtml

Issue 257033002: Do not implement EventTarget on SVGElementInstance (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Try to fix TestExpectations Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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>

Powered by Google App Engine
This is Rietveld 408576698