<!doctype html>
<html>
<meta charset="utf-8">
<title>This removes an animation element while the 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">

<rect x='0' y='0' width='50' height='50' fill='green'>
    <animate id="an1" attributeName='x' from='50' to='150' begin='0s' dur='2s' fill='freeze'/>
</rect>

<rect x='0' y='100' width='50' height='50' fill='green'>
    <animate id="an2" attributeName='x' from='50' to='150' begin='0s' dur='2s' fill='remove'/>
</rect>

</svg>

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

// Setup animation test
function sample1() {
    assert_approx_equals(rect1.x.animVal.value, 50, epsilon);
    assert_equals(rect1.x.baseVal.value, 0);

    assert_approx_equals(rect2.x.animVal.value, 50, epsilon);
    assert_equals(rect2.x.baseVal.value, 0);
}

function sample2() {
    assert_approx_equals(rect1.x.animVal.value, 100, epsilon);
    assert_equals(rect1.x.baseVal.value, 0);

    assert_approx_equals(rect2.x.animVal.value, 100, epsilon);
    assert_equals(rect2.x.baseVal.value, 0);

    // Remove the animation element animating rect1
    // The effect is that rect1 is now reset to the initial state, before any animation was applied to it.
    // Compatible with FF. In Opera it shows a repainting bug currently (two rects are visible!).
    var an1 = rootSVGElement.ownerDocument.getElementById("an1");
    an1.parentNode.removeChild(an1);
}

function sample3() {
    assert_equals(rect1.x.animVal.value, 0);
    assert_equals(rect1.x.baseVal.value, 0);

    assert_approx_equals(rect2.x.animVal.value, 100, epsilon);
    assert_equals(rect2.x.baseVal.value, 0);
}

function sample4() {
    assert_equals(rect1.x.animVal.value, 0);
    assert_equals(rect1.x.baseVal.value, 0);

    assert_equals(rect2.x.animVal.value, 0);
    assert_equals(rect2.x.baseVal.value, 0);
}

smil_async_test((t) => {
    var rects = rootSVGElement.ownerDocument.getElementsByTagName("rect");
    rect1 = rects[0];
    rect2 = rects[1];

    const expectedValues = [
        // [animationId, time, sampleCallback]
        ["an1", 0.0,   sample1],
        ["an1", 1.0,   sample2],
        ["an2", 1.001, sample3],
        ["an2", 2.001, sample4],
        ["an2", 60.0,  sample4]
    ];

    runAnimationTest(t, expectedValues);
});

window.animationStartsImmediately = true;

</script>