<!doctype html>
<html>
<title>Test from-to SVGRect animation.</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("width", "100");
rect.setAttribute("height", "100");
rect.setAttribute("fill", "green");
rect.setAttribute("onclick", "executeTest()");
rootSVGElement.appendChild(rect);

rootSVGElement.setAttribute("id", "svg");
rootSVGElement.setAttribute("viewBox", "0 0 100 100");

var animate = createSVGElement("animate");
animate.setAttribute("id", "animation");
animate.setAttribute("attributeName", "viewBox");
animate.setAttribute("begin", "0s");
animate.setAttribute("dur", "4s");
animate.setAttribute("from", "0 0 100 100");
animate.setAttribute("to", "50 50 50 50");
rootSVGElement.appendChild(animate);

// Setup animation test
function sample1() {
    // Check initial/end conditions
    assert_approx_equals(rootSVGElement.viewBox.animVal.x, 0, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.y, 0, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.width, 100, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.height, 100, epsilon);

    assert_equals(rootSVGElement.viewBox.baseVal.x, 0);
    assert_equals(rootSVGElement.viewBox.baseVal.y, 0);
    assert_equals(rootSVGElement.viewBox.baseVal.width, 100);
    assert_equals(rootSVGElement.viewBox.baseVal.height, 100);
}

function sample2() {
    assert_approx_equals(rootSVGElement.viewBox.animVal.x, 25, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.y, 25, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.width, 75, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.height, 75, epsilon);

    assert_equals(rootSVGElement.viewBox.baseVal.x, 0);
    assert_equals(rootSVGElement.viewBox.baseVal.y, 0);
    assert_equals(rootSVGElement.viewBox.baseVal.width, 100);
    assert_equals(rootSVGElement.viewBox.baseVal.height, 100);
}

function sample3() {
    assert_approx_equals(rootSVGElement.viewBox.animVal.x, 50, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.y, 50, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.width, 50, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.height, 50, epsilon);

    assert_equals(rootSVGElement.viewBox.baseVal.x, 0);
    assert_equals(rootSVGElement.viewBox.baseVal.y, 0);
    assert_equals(rootSVGElement.viewBox.baseVal.width, 100);
    assert_equals(rootSVGElement.viewBox.baseVal.height, 100);
}

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

    runAnimationTest(t, expectedValues);
});

</script>
