<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<svg width="400" height="400">
    <rect id="target" x="10" y="10" width="80" height="80" />
</svg>
<script>
'use strict';

// From UseCounter.h
var SVGCalcModeDiscrete = 1287;
var SVGCalcModeLinear = 1288;
var SVGCalcModePaced = 1289;
var SVGCalcModeSpline = 1290;

test(() => {
    var target = document.getElementById('target');
    assert_false(internals.isUseCounted(document, SVGCalcModeDiscrete));
    var animation = document.createElementNS("http://www.w3.org/2000/svg", "animate");
    animation.setAttribute("calcMode", "discrete");
    target.appendChild(animation);
    assert_true(internals.isUseCounted(document, SVGCalcModeDiscrete));
}, 'calcMode discrete is use counted.');

test(() => {
    var target = document.getElementById('target');
    var animation = document.createElementNS("http://www.w3.org/2000/svg", "animateTransform");
    animation.setAttribute("calcMode", "linear");
    target.appendChild(animation);
    assert_false(internals.isUseCounted(document, SVGCalcModeLinear));
}, 'calcMode linear is not counted for animateTransform.');

test(() => {
    var target = document.getElementById('target');
    assert_false(internals.isUseCounted(document, SVGCalcModeLinear));
    var animation = document.createElementNS("http://www.w3.org/2000/svg", "animateMotion");
    animation.setAttribute("calcMode", "linear");
    target.appendChild(animation);
    assert_true(internals.isUseCounted(document, SVGCalcModeLinear));
}, 'calcMode linear is use counted for animateMotion.');

test(() => {
    var target = document.getElementById('target');
    var animation = document.createElementNS("http://www.w3.org/2000/svg", "animateMotion");
    animation.setAttribute("calcMode", "paced");
    target.appendChild(animation);
    assert_false(internals.isUseCounted(document, SVGCalcModePaced));
}, 'calcMode paced is not counted for animateMotion.');

test(() => {
    var target = document.getElementById('target');
    assert_false(internals.isUseCounted(document, SVGCalcModePaced));
    var animation = document.createElementNS("http://www.w3.org/2000/svg", "animate");
    animation.setAttribute("calcMode", "paced");
    target.appendChild(animation);
    assert_true(internals.isUseCounted(document, SVGCalcModePaced));
}, 'calcMode paced is use counted for animate.');

test(() => {
    var target = document.getElementById('target');
    assert_false(internals.isUseCounted(document, SVGCalcModeSpline));
    var animation = document.createElementNS("http://www.w3.org/2000/svg", "animateTransform");
    animation.setAttribute("calcMode", "spline");
    target.appendChild(animation);
    assert_true(internals.isUseCounted(document, SVGCalcModeSpline));
}, 'calcMode spline is use counted.');
</script>
