<!doctype html>
<html>
<meta charset="utf-8">
<title>Test animations that only express an offset</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 width="50" height="50" x="0" y="0" fill="green">
    <animateMotion id="anim" path="M 100 100 L 100 100"
        begin="0s" dur="2s" repeatCount="2" accumulate="sum" fill="remove" />
  </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);
}

function sample2() {
    assert_approx_equals(rootSVGElement.getBBox().x, 200, epsilon);
}

function sample3() {
    assert_approx_equals(rootSVGElement.getBBox().x, 200, epsilon);
}

function sample4() {
    assert_approx_equals(rootSVGElement.getBBox().x, 0, epsilon);
}

function sample5() {
    assert_approx_equals(rootSVGElement.getBBox().x, 0, epsilon);
}

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

    const expectedValues = [
        // [animationId, time, sampleCallback]
        ["anim", 1.0,   sample1],
        ["anim", 2.0,   sample2],
        ["anim", 3.0,   sample3],
        ["anim", 4.0,   sample4],
        ["anim", 5.0,   sample5]
    ];

    runAnimationTest(t, expectedValues);
});

window.animationStartsImmediately = true;

</script>