<!doctype html>
<html>
<title>Tests from-by 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("by", "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, 125, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.height, 125, 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, 150, epsilon);
    assert_approx_equals(rootSVGElement.viewBox.animVal.height, 150, 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>
