<!doctype html>
<html>
<meta charset="utf-8">
<title>Test 'to' animation of SVGLengthList with LengthType number.</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 text = createSVGElement("text");
text.setAttribute("id", "text");
text.textContent = "ABCD";
text.setAttribute("x", "50 70 90 110");
text.setAttribute("y", "50");
text.setAttribute("onclick", "executeTest()");
rootSVGElement.appendChild(text);

var animate = createSVGElement("animate");
animate.setAttribute("id", "animation");
animate.setAttribute("attributeName", "x");
animate.setAttribute("begin", "0s");
animate.setAttribute("dur", "4s");
animate.setAttribute("from", "50 70 90 110");
animate.setAttribute("to", "60 90 120 150");
text.appendChild(animate);

// Setup animation test
function sample1() {
    assert_equals(text.x.animVal.numberOfItems, 4);
    assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
    assert_approx_equals(text.x.animVal.getItem(1).value, 70, epsilon);
    assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
    assert_approx_equals(text.x.animVal.getItem(3).value, 110, epsilon);

    assert_equals(text.x.baseVal.numberOfItems, 4);
    assert_equals(text.x.baseVal.getItem(0).value, 50);
    assert_equals(text.x.baseVal.getItem(1).value, 70);
    assert_equals(text.x.baseVal.getItem(2).value, 90);
    assert_equals(text.x.baseVal.getItem(3).value, 110);
}

function sample2() {
    assert_equals(text.x.animVal.numberOfItems, 4);
    assert_approx_equals(text.x.animVal.getItem(0).value, 55, epsilon);
    assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
    assert_approx_equals(text.x.animVal.getItem(2).value, 105, epsilon);
    assert_approx_equals(text.x.animVal.getItem(3).value, 130, epsilon);

    assert_equals(text.x.baseVal.numberOfItems, 4);
    assert_equals(text.x.baseVal.getItem(0).value, 50);
    assert_equals(text.x.baseVal.getItem(1).value, 70);
    assert_equals(text.x.baseVal.getItem(2).value, 90);
    assert_equals(text.x.baseVal.getItem(3).value, 110);
}

function sample3() {
    assert_equals(text.x.animVal.numberOfItems, 4);
    assert_approx_equals(text.x.animVal.getItem(0).value, 60, epsilon);
    assert_approx_equals(text.x.animVal.getItem(1).value, 90, epsilon);
    assert_approx_equals(text.x.animVal.getItem(2).value, 120, epsilon);
    assert_approx_equals(text.x.animVal.getItem(3).value, 150, epsilon);

    assert_equals(text.x.baseVal.numberOfItems, 4);
    assert_equals(text.x.baseVal.getItem(0).value, 50);
    assert_equals(text.x.baseVal.getItem(1).value, 70);
    assert_equals(text.x.baseVal.getItem(2).value, 90);
    assert_equals(text.x.baseVal.getItem(3).value, 110);
}

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>