<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="250" height="265" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="runRepaintTest()">
<script xlink:href="../../fast/repaint/resources/repaint.js"/>
<script type="text/ecmascript"><![CDATA[
function repaintTest() {
    if (window.eventSender) {
        testRunner.waitUntilDone();
        eventSender.mouseMoveTo(20, 20);
        eventSender.mouseDown();
        eventSender.mouseUp();

        eventSender.mouseMoveTo(20, 80); 
        eventSender.mouseDown();
        eventSender.mouseUp();

        eventSender.mouseMoveTo(20, 140); 
        eventSender.mouseDown();
        eventSender.mouseUp();

        eventSender.mouseMoveTo(20, 200); 
        eventSender.mouseDown();
        eventSender.mouseUp();

        eventSender.mouseMoveTo(0, 0);
    }
}

function mouseHandler(evt) {
    evt.target.style.setProperty("fill", "green", "");
}

function mouseHandlerLast(evt) {
    mouseHandler(evt);
    if (window.testRunner)
        testRunner.notifyDone();
}
]]></script>

<g style="fill:red; stroke:navy">
    <rect id="target1" x="10" y="10" width="150" height="50" onmousedown="mouseHandler(evt)"/>
    <rect id="target2" x="10" y="70" width="150" height="50" onmouseup="mouseHandler(evt)"/>
    <rect id="target3" x="10" y="130" width="150" height="50" onmousemove="mouseHandler(evt)"/>
    <rect id="target4" x="10" y="190" width="150" height="50" onmouseout="mouseHandlerLast(evt)"/>
</g>
</svg>
