<!doctype html>
<html>
<meta charset="utf-8">
<title>Test 'to' animation of SVGLengthList with different LengthTypes.</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 70px 5cm 8pt");
animate.setAttribute("to", "3cm 80 100px 4in");
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, 81.7, epsilon);
    assert_approx_equals(text.x.animVal.getItem(1).value, 75, epsilon);
    assert_approx_equals(text.x.animVal.getItem(2).value, 144.5, epsilon);
    assert_approx_equals(text.x.animVal.getItem(3).value, 197.3, 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, 113.4, epsilon);
    assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
    assert_approx_equals(text.x.animVal.getItem(2).value, 100, epsilon);
    assert_approx_equals(text.x.animVal.getItem(3).value, 384, 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>