<!doctype html>
<html>
<meta charset="utf-8">
<title>Test behavior of dynamically inserting animate with begin attribute</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/SVGAnimationTestCase-testharness.js"></script>

<svg>
</svg>

<script>
var rootSVGElement = document.querySelector("svg");
var epsilon = 1.0;

// Setup test document
var rect = createSVGElement("rect");
rect.setAttribute("id", "rect");
rect.setAttribute("x", "0");
rect.setAttribute("y", "45");
rect.setAttribute("width", "10");
rect.setAttribute("height", "10");
rect.setAttribute("fill", "green");

var animate = createSVGElement("animate");
animate.setAttribute("id", "animation");
animate.setAttribute("attributeName", "x");
animate.setAttribute("begin", "0");
animate.setAttribute("from", "0");
animate.setAttribute("to", "90");
animate.setAttribute("dur", "3s");
animate.setAttribute("fill", "freeze");
rect.appendChild(animate);
rootSVGElement.appendChild(rect);

// Setup animation test
function sample1() {
    assert_approx_equals(rect.x.animVal.value, 0, epsilon);
    assert_equals(rect.x.baseVal.value, 0);
}

function sample2() {
    assert_approx_equals(rect.x.animVal.value, 90, epsilon);
    assert_equals(rect.x.baseVal.value, 0);
}

smil_async_test((t) => {
    const expectedValues = [
        // [animationId, time, sampleCallback]
        ["animation", 0.0, sample1],
        ["animation", 3.0, sample2],
    ];

    runAnimationTest(t, expectedValues);
});

window.animationStartsImmediately = true;

</script>