<!doctype html>
<html>
<meta charset="utf-8">
<title>Test for checking position of the svg element when multiple animateMotion are acting on it</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" values="20,0" begin="0s"/>
    <animateMotion values="40,0;80,0" begin="2s" dur="4s"/>
  </rect>
</svg>

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

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

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

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

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

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

function sample6() {
    assert_approx_equals(rootSVGElement.getBBox().x, 20, epsilon);
}

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

    const expectedValues = [
        // [animationId, time, sampleCallback]
        ["anim", 0.0,   sample1],
        ["anim", 1.0,   sample2],
        ["anim", 2.0,   sample3],
        ["anim", 4.0,   sample4],
        ["anim", 6.0,   sample5],
        ["anim", 7.0,   sample6]
    ];

    runAnimationTest(t, expectedValues);
});

window.animationStartsImmediately = true;

</script>