<!doctype html>
<html>
<title>Test 'by' animation of SVGNumberOptionalNumber.</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");
animate.setAttribute("by", "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, 10, epsilon);
    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 10, epsilon);

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

function sample3() {
    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 15, epsilon);
    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 15, 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 = 60;
window.clickY = 60;

</script>
