<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<script>
function runTest() {
    g.offsetTop;
    g.removeChild(g.firstChild);
    if (g.firstChild)
        setTimeout(runTest(),0);
    else
        location.reload();
}

window.onload = function() {
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }
    
    g = document.getElementById("g1");
    if (location.hash != "#2") {
        if (location.hash)
            location.hash = "#" + (parseInt(location.hash.slice(1)) + 1).toString();
        else
            location.hash = "#1";
        document.getElementById("g2").style.setProperty('cursor', 'url(#c2)');
        setTimeout(runTest(),0);
    } else {
        document.getElementById("t1").appendChild(document.createTextNode("PASS: Successfully changed cursors."));
        if (window.testRunner)
            testRunner.notifyDone();
    }
}
</script>
<g id="g1">
    <cursor id="c1"></cursor>
    <g cursor="url(#c1)" id="g2"></g>
    <cursor id="c2"></cursor>
    <text id="t1" x="20" y="20"></text>
</g>
</svg>
