<!doctype html>
<html>
<meta charset="utf-8">
<title>Test 'to' animation of SVGNumberOptionalNumber with optional 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 defs = createSVGElement("defs");
rootSVGElement.appendChild(defs);

var filter = createSVGElement("filter");
filter.setAttribute("id", "filter");
filter.setAttribute("x", "-30%");
filter.setAttribute("y", "-30%");
filter.setAttribute("width", "160%");
filter.setAttribute("height", "160%");
defs.appendChild(filter);

var feGaussianBlur = createSVGElement("feGaussianBlur");
feGaussianBlur.setAttribute("id", "blur");
feGaussianBlur.setAttribute("stdDeviation", "5");
filter.appendChild(feGaussianBlur);

var rect = createSVGElement("rect");
rect.setAttribute("id", "rect");
rect.setAttribute("x", "50");
rect.setAttribute("y", "50");
rect.setAttribute("width", "200");
rect.setAttribute("height", "200");
rect.setAttribute("fill", "green");
rect.setAttribute("filter", "url(#filter)");
rect.setAttribute("onclick", "executeTest()");
rootSVGElement.appendChild(rect);

var animate = createSVGElement("animate");
animate.setAttribute("id", "animation");
animate.setAttribute("attributeName", "stdDeviation");
animate.setAttribute("begin", "0s");
animate.setAttribute("dur", "4s");
animate.setAttribute("from", "5 5");
animate.setAttribute("to", "40 10");
feGaussianBlur.appendChild(animate);

// Setup animation test
function sample1() {
    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 5, epsilon);
    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 5, epsilon);

    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
}

function sample2() {
    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 22.5, epsilon);
    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 7.5, epsilon);

    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
}

function sample3() {
    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 40, epsilon);
    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 10, epsilon);

    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
}

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);
});

window.clickX = 100;
window.clickY = 100;

</script>