<!doctype html>
<html>
<meta charset="utf-8">
<title>Test behavior of dynamically inserting animate without 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", "100");
rect.setAttribute("height", "100");
rect.setAttribute("fill", "green");

var animate = createSVGElement("animate");
animate.setAttribute("id", "animation");
animate.setAttribute("attributeName", "x");
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>