<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body onload="startTest()">

<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="green" width="100" height="100"/>
  </defs>
  <use id="test" xlink:href="#target"/>
</svg>

<div id="console">Test failed</div>

<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function eventHandler()
{
    var divElement = document.getElementById("console");
    divElement.textContent = "Test passed";

    if (window.testRunner)
        testRunner.notifyDone();
}

function fireSimulatedMouseClickEvent(eventTarget)
{
    var event = document.createEvent("MouseEvents");
    event.initMouseEvent("click", true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
    eventTarget.dispatchEvent(event);
}

function startTest() {
    var useElement = document.getElementById("test");

    var shadowRoot = internals.shadowRoot(useElement);

    // No-op, as no listener is not yet registered
    fireSimulatedMouseClickEvent(shadowRoot.firstChild);

    // Add listener
    shadowRoot.firstChild.addEventListener("click", eventHandler, false);

    // Should fire immediately and finish the test
    fireSimulatedMouseClickEvent(shadowRoot.firstChild);
}
</script>

</body>
</html>
