<!doctype html>
<html>
<title>Tests from-by animation of points on polygons.</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 poly = createSVGElement("polygon");
poly.setAttribute("id", "poly");
poly.setAttribute("fill", "green");
poly.setAttribute("points", "0,0 200,0 200,200 0,200");
poly.setAttribute("onclick", "executeTest()");

var animate = createSVGElement("animate");
animate.setAttribute("id", "animation");
animate.setAttribute("attributeName", "points");
animate.setAttribute("from", "0,0 200,0 200,200 0,200");
animate.setAttribute("by", "0,0 100,0 100,100 0,100");
animate.setAttribute("begin", "0s");
animate.setAttribute("dur", "4s");
poly.appendChild(animate);
rootSVGElement.appendChild(poly);

// Setup animation test
function sample1() {
    // Check initial/end conditions
    assert_approx_equals(poly.animatedPoints.getItem(2).x, 200, epsilon);
    assert_approx_equals(poly.animatedPoints.getItem(2).y, 200, epsilon);

    assert_equals(poly.points.getItem(2).x, 200);
    assert_equals(poly.points.getItem(2).y, 200);
}

function sample2() {
    // Check half-time conditions
    assert_approx_equals(poly.animatedPoints.getItem(2).x, 250, epsilon);
    assert_approx_equals(poly.animatedPoints.getItem(2).y, 250, epsilon);

    assert_equals(poly.points.getItem(2).x, 200);
    assert_equals(poly.points.getItem(2).y, 200);
}

function sample3() {
    // Check just before-end conditions
    assert_approx_equals(poly.animatedPoints.getItem(2).x, 300, epsilon);
    assert_approx_equals(poly.animatedPoints.getItem(2).y, 300, epsilon);

    assert_equals(poly.points.getItem(2).x, 200);
    assert_equals(poly.points.getItem(2).y, 200);
}

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>
