Source/WebCore:
[WebKit-https.git] / LayoutTests / svg / custom / resources / use-instanceRoot-event-bubbling.js
1 description("Tests whether SVG event bubbling works across shadow trees.");
2
3 if (window.testRunner) {
4     testRunner.waitUntilDone();
5     testRunner.dumpAsText();
6 }
7
8 var svgNS = "http://www.w3.org/2000/svg";
9 var xhtmlNS = "http://www.w3.org/1999/xhtml";
10 var expected = new Array(4);
11 var tests = 4;
12 var counter = 0;
13 var eventCounter = 0;
14
15 function log(message) {
16     var logDiv = document.getElementById("console");
17     var newDiv = document.createElementNS(xhtmlNS, "div");
18     newDiv.appendChild(document.createTextNode(message));
19     logDiv.appendChild(newDiv);
20 }
21
22 function eventHandler(evt, label) {
23     var targetId = evt.target.id;
24     var curTargetId = evt.currentTarget.id;
25
26     var phaseString = "";
27     switch (evt.eventPhase) {
28     case 1: phaseString = "CAPTURING"; break;
29     case 2: phaseString = "AT_TARGET"; break;
30     case 3: phaseString = "BUBBLING"; break;
31     }
32
33     msg = '[EventHandler ' + label + '] type: ' + evt.type + ' phase: ' + phaseString +
34           ' target: '         + evt.target        + ' (id: ' + targetId    + ')' +
35           ' currentTarget: '  + evt.currentTarget + ' (id: ' + curTargetId + ')';
36
37     shouldBeEqualToString("msg", expected[eventCounter]);
38     ++eventCounter;
39
40     if (label == counter)
41         setTimeout(label == tests ? finishTest : nextTest, 0);
42 }
43
44 function finishTest()
45 {
46     document.getElementById("rectParent").setAttribute("fill", "green");
47     debug('<br /><span class="pass">TEST COMPLETE</span>');
48
49     if (window.testRunner)
50         testRunner.notifyDone();
51 }
52
53 function nextTest()
54 {
55     eventCounter = 0;
56     ++counter;
57
58     switch (counter) {
59     case 1:
60         rect.onclick = function(evt) { eventHandler(evt, 1); };
61         expected[0] = "[EventHandler 1] type: click phase: AT_TARGET target: [object SVGUseElement] (id: use) currentTarget: [object SVGUseElement] (id: use)";
62         testListeners();
63         break;
64     case 2:
65         rectContainer.addEventListener("click", function(evt) { eventHandler(evt, 2) }, false);
66         expected[1] = "[EventHandler 2] type: click phase: AT_TARGET target: [object SVGUseElement] (id: use) currentTarget: [object SVGUseElement] (id: use)";
67         testListeners();
68         break;
69     case 3:
70         use.setAttribute("onclick", "eventHandler(evt, 3)");
71         expected[2] = "[EventHandler 3] type: click phase: AT_TARGET target: [object SVGUseElement] (id: use) currentTarget: [object SVGUseElement] (id: use)";
72         testListeners();
73         break;
74     case 4:
75         useContainer.onclick = function(evt) { eventHandler(evt, 4) };
76         expected[3] = "[EventHandler 4] type: click phase: BUBBLING target: [object SVGUseElement] (id: use) currentTarget: [object SVGGElement] (id: useParent)";
77         testListeners();
78         break;
79     }
80 }
81
82 function testListeners()
83 {
84     if (window.eventSender) {
85         eventSender.mouseMoveTo(50, 50);
86         eventSender.mouseDown();
87         eventSender.mouseUp();
88     }
89 }
90
91 // Create root element
92 var svg = document.createElementNS(svgNS, "svg");
93 svg.id = "rootSVG";
94 svg.setAttribute("width", 100);
95 svg.setAttribute("height", 100);
96 document.body.insertBefore(svg, document.body.firstChild);
97
98 // Create defs section
99 var defs = document.createElementNS(svgNS, "defs");
100 svg.appendChild(defs);
101
102 var rectContainer = document.createElementNS(svgNS, "g");
103 rectContainer.id = "rectParent";
104 defs.appendChild(rectContainer);
105
106 var rect = document.createElementNS(svgNS, "rect");
107 rect.id = "rect";
108 rect.style.fill = "blue";
109 rect.width.baseVal.value = 100;
110 rect.height.baseVal.value = 100;
111 rectContainer.appendChild(rect);
112
113 // Create content section
114 var useContainer = document.createElementNS(svgNS, "g");
115 useContainer.id = "useParent";
116 svg.appendChild(useContainer);
117
118 var use = document.createElementNS(svgNS, "use");
119 use.id = "use";
120 use.href.baseVal = "#rectParent";
121 useContainer.appendChild(use);
122
123 nextTest();