<?xml version="1.0" encoding="utf-8" standalone="no"?>
<svg xmlns='http://www.w3.org/2000/svg'>
<circle cx='0' cy='50' r='20' fill='orange' id='testCircle'>
   <animate attributeName='cx' attributeType='XML' begin='indefinite' end='indefinite' dur='10s' repeatCount='indefinite' from="10" to="200"  id='dTripper' fill="freeze"/>
</circle>
<text y="130" x="20">This test verifies the animation behaviour of beginElement in SVG. See <a href="https://bugs.webkit.org/show_bug.cgi?id=26019">bug 26019</a></text>
<text y="150" x="20" id="console"/>
<script><![CDATA[
    var animatedElement;
    animatedElement = document.getElementById("dTripper");
    animatedElement.setAttribute("to", 420);
    animatedElement.beginElement();
    setTimeout(beginElement, 0);

    function beginElement()
    {
        animatedElement.setAttribute("to", 420);
        animatedElement.beginElement();
        setTimeout(dumpResult, 0);
    }

    function dumpResult()
    {
        var console = document.getElementById("console");
        var cx = document.getElementById("testCircle").getAttribute("cx");
        if (cx === 0)
            console.appendChild(document.createTextNode("Failed (cx was not animated)"));
        else
            console.appendChild(document.createTextNode("Passed"));
        if (window.testRunner)
            testRunner.notifyDone();
    }

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