<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg">
  <script type="text/javascript">
  <![CDATA[
    if (window.testRunner)
      testRunner.dumpAsText();
    
    function log(string) {
      var newDiv = document.createElementNS("http://www.w3.org/1999/xhtml", "div");
      newDiv.textContent = string;
      document.getElementById('log').appendChild(newDiv);
    }
    
    var lastEvent = null;
    
    function testClick(x, y, expected) {
      eventSender.mouseMoveTo(x, y);
      eventSender.mouseDown();
      eventSender.mouseUp();
      if (expected && lastEvent && lastEvent.clientX == x && lastEvent.clientY == y) {
        log("SUCCESS: click received at: " + x + ", " + y);
      } else if (!expected && !lastEvent) {
        log("SUCCESS: click at " + x + ", " + y + " was correctly ignored");
      } else if (expected && lastEvent) {
        log("FAILURE: click received at: " + lastEvent.clientX + ", " + lastEvent.clientY + " but it was expected at: " + x + ", " + y);
      } else if (!expected && lastEvent) {
        log("FAILURE: UNEXPECTED click received at: " + lastEvent.clientX + ", " + lastEvent.clientY);
      } else if (expected && !lastEvent) {
        log("FAILURE: NO click received at: " + x + ", " + y);
      } else {
        log("LOGIC ERORR");
      }
      lastEvent = null;
    }
    
    function gotClick(evt) {
      lastEvent = evt;
    }
    
    function gotMouseEvent(evt, type) {
      if (!window.testRunner)
        document.getElementById('mouseover-text').textContent = type + " at " + evt.clientX + ", " + evt.clientY;
    }
  ]]>
  </script>  
  <foreignObject y="200" width="600" height="400">
  <html xmlns="http://www.w3.org/1999/xhtml">
    <body>
      <div id="log">
      </div>
    </body>
  </html>
  </foreignObject>
  
  <!-- Paths only seem to stroke from startX to endX - 1 pixels.  I was not aware of that before writing this test.  Firefox and Opera match our behavior -->
  <path d="M 30 100 L 301 100" stroke-width="100" stroke="yellow" onclick="gotClick(evt)" onmouseover="gotMouseEvent(evt, 'mouseover')" onmouseout="gotMouseEvent(evt, 'mouseout')" onmousemove="gotMouseEvent(evt, 'mousemove')" />
  <text id="mouseover-text" x="30" y="190"></text>
  
  <!-- The following mouse events are spaced explicity to prevent triggering double-click logic -->
  <script type="text/javascript">
  <![CDATA[
    if (window.eventSender) {
      testClick(30, 100, true);
      testClick(30, 50, true);
      testClick(30, 150, true);
      testClick(300, 100, true);
      testClick(300, 50, true);
      testClick(301, 100, true);
      testClick(300, 150, true);

      testClick(10, 10, false);
      testClick(29, 100, false);
      testClick(30, 49, false);
      testClick(30, 151, false);
      testClick(300, 49, false);
      testClick(300, 151, false);
    } else {
      log("ERROR: window.eventSender not found!  This test must be run using DumpRenderTree.  Mousing over the yellow area will log however.");
    }
  ]]>
  </script>
</svg>
