blob: 5b5c4663e0ac68ff54f919fa6256497438a3a43f [file] [log] [blame]
var counter = 0;
var tests = 8;
var expected = "";
var logEvent = false;
var rectElement = document.getElementById("target");
var useElement = document.getElementById("test");
window.testIsAsync = true;
description("Test attaching event listeners on SVG use elements in different ways: ");
function eventHandler(evt)
{
if (logEvent) {
if (expected == evt.type)
debug("Test " + counter + " / " + tests + " PASSED");
else
debug("Test " + counter + " / " + tests + " FAILED (expected: '" + expected + "' actual: '" + evt.type + "')");
}
setTimeout(counter < tests ? driveTests : finishTest, 0);
}
function finishTest()
{
successfullyParsed = true;
rectElement.setAttribute("fill", "green");
shouldBeTrue("successfullyParsed");
debug('<br /><span class="pass">TEST COMPLETE</span>');
finishRepaintTest();
}
function recordMouseEvent(type)
{
expected = type;
logEvent = true;
++counter;
fireDelayedEvent();
}
function sendMouseEvent(type, increment)
{
expected = type;
logEvent = false;
fireDelayedEvent();
}
function fireDelayedEvent()
{
if (expected == "mouseover")
eventSender.mouseMoveTo(50, 50);
else if (expected == "mouseout")
eventSender.mouseMoveTo(115, 55);
else if (expected == "mouseup") {
eventSender.mouseMoveTo(50, 50);
eventSender.mouseDown();
eventSender.mouseUp();
} else if (expected == "mousedown") {
eventSender.mouseMoveTo(50, 50);
eventSender.mouseDown();
eventSender.mouseUp();
}
}
function testOne()
{
// Install event listener on correspondingElement via setAttribute
shadowRoot.firstChild.setAttribute("onmouseover", "eventHandler(evt)");
recordMouseEvent("mouseover");
}
function testTwo()
{
// Install event listener on correspondingElement via onmouseout JS magic
shadowRoot.firstChild.onmouseout = eventHandler;
recordMouseEvent("mouseout");
}
function testThree()
{
// Clean event listeners on different ways
shadowRoot.firstChild.removeAttribute("onmouseover");
shadowRoot.firstChild.onmouseout = 0;
// Verify they really got removed
sendMouseEvent("mouseover");
sendMouseEvent("mouseout");
// Verify the original listener still works
recordMouseEvent("mousedown");
}
function testFour()
{
shadowRoot.firstChild.removeAttribute("onmousedown");
// Install event listener on the referenced element, without using the SVGElementInstance interface
rectElement.setAttribute("onmouseup", "eventHandler(evt)");
recordMouseEvent("mouseup");
}
function testFive()
{
rectElement.onmouseout = eventHandler;
recordMouseEvent("mouseout");
}
function testSix()
{
shadowRoot.firstChild.onmouseout = null;
sendMouseEvent("mouseout");
shadowRoot.firstChild.removeAttribute('onmouseup');
sendMouseEvent("mouseup");
shadowRoot.firstChild.onmouseup = eventHandler;
recordMouseEvent("mouseup");
}
function testSeven()
{
shadowRoot.firstChild.addEventListener("mouseout", eventHandler, false);
recordMouseEvent("mouseout");
}
function testEight()
{
shadowRoot.firstChild.addEventListener("mouseover", eventHandler, false);
recordMouseEvent("mouseover");
}
function testNine()
{
rectElement.addEventListener("mousedown", eventHandler, false);
recordMouseEvent("mousedown");
}
function driveTests()
{
switch (counter) {
case 0:
testOne();
break;
case 1:
testTwo();
break;
case 2:
testThree();
break;
case 3:
testFour();
break;
case 4:
testFive();
break;
case 5:
testSix();
break;
case 6:
testSeven();
break;
case 7:
testEight();
break;
}
}
function repaintTest() {
if (window.eventSender)
driveTests();
else
alert("This test must be run via DRT!");
}