<!doctype html>
<html>
<meta charset="utf-8">
<title>This tests scripting a CSS property while animation is running</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/SVGAnimationTestCase-testharness.js"></script>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">

<!-- an1: Change opacity from 0 to 0.5 in 4s, a script at 2s will set the opacity CSS property to 1, fill is freeze so this won't have any visible effect, nor any effect to the computed style -->
<rect opacity="0" width="100" height="100" fill="green">
    <animate id="an1" attributeType="CSS" attributeName="opacity" fill="freeze" from="0" to="0.5" begin="0s" dur="4s"/>
</rect>

</svg>

<script>
var rootSVGElement = document.querySelector("svg");
var epsilon = 1.0;

// Setup animation test
function sample1() {
    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0, epsilon);
}

function sample2() {
    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0.25, epsilon);
    rect.setAttribute("opacity", "1");
}

function sample3() {
    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0.25, epsilon);
}

function sample4() {
    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0.5, epsilon);
}

function sample5() {
    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0.5, epsilon);
}

smil_async_test((t) => {
    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];

    const expectedValues = [
        // [animationId, time, sampleCallback]
        ["an1", 0.0,   sample1],
        ["an1", 2.0,   sample2],
        ["an1", 2.001, sample3],
        ["an1", 3.999, sample4],
        ["an1", 4.001, sample5],
        ["an1", 60.0,  sample5]
    ];

    runAnimationTest(t, expectedValues);
});

window.animationStartsImmediately = true;

</script>