<!doctype html>
<html>
<meta charset="utf-8">
<title>Test cyclic for svg animations for syncbases</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">
  <animate id="anim" attributeName="visibility" to="visible" begin="0s" end="5s"/>
  <rect x="0" y="0" width="50" height="50" fill="green">
    <set attributeName="x" to="100" id="anim1" begin="0; anim2.end" dur="1s"/>
    <set attributeName="y" to="100" id="anim2" begin="anim1.end" dur="1s"/>
  </rect>
</svg>

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

// Setup animation test
function sample1() {
    assert_approx_equals(rootSVGElement.getBBox().x, 100, epsilon);
    assert_approx_equals(rootSVGElement.getBBox().y, 0, epsilon);
}

function sample2() {
    assert_approx_equals(rootSVGElement.getBBox().x, 0, epsilon);
    assert_approx_equals(rootSVGElement.getBBox().y, 100, epsilon);
}

smil_async_test((t) => {

    const expectedValues = [
        // [animationId, time, sampleCallback]
        ["anim", 0.01,   sample1],
        ["anim", 1.01,   sample2],
        ["anim", 2.01,   sample1],
        ["anim", 3.01,   sample2],
        ["anim", 4.01,   sample1]
    ];

    runAnimationTest(t, expectedValues);
});

window.animationStartsImmediately = true;

</script>