<!doctype html>
<html>
<title>Tests fallback to calcMode='discrete' on animation of SVGString with 'values'.</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 rect = createSVGElement("rect");
rect.setAttribute("id", "rect");
rect.setAttribute("width", "100");
rect.setAttribute("height", "100");
rect.setAttribute("fill", "green");
rect.setAttribute("onclick", "executeTest()");

var animate = createSVGElement("animate");
animate.setAttribute("id", "animation");
animate.setAttribute("attributeName", "visibility");
animate.setAttribute("begin", "0s");
animate.setAttribute("dur", "6s");
animate.setAttribute("calcMode", "linear");
animate.setAttribute("values", "visible ; hidden ; visible");
rect.appendChild(animate);
rootSVGElement.appendChild(rect);

// Setup animation test
function sample1() {
    // Check initial/end conditions
    assert_equals(getComputedStyle(rect).visibility, 'visible');
    assert_equals(rect.style.visibility, "");
}

function sample2() {
    assert_equals(getComputedStyle(rect).visibility, 'hidden');
    assert_equals(rect.style.visibility, "");
}

function sample3() {
    assert_equals(getComputedStyle(rect).visibility, 'visible');
    assert_equals(rect.style.visibility, "");
}

smil_async_test((t) => {
    const expectedValues = [
        // [animationId, time, sampleCallback]
        ["animation", 1.999, sample1],
        ["animation", 2.001, sample2],
        ["animation", 5.999, sample3],
        ["animation", 6.001, sample1]
    ];

    runAnimationTest(t, expectedValues);
});

</script>
