<!doctype html>
<meta charset=utf-8>
<title>Addition for each property</title>
<link rel="help" href="https://drafts.csswg.org/web-animations/#animation-types">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../testcommon.js"></script>
<script src="property-list.js"></script>
<script src="property-types.js"></script>
<style>
html {
  font-size: 10px;
}
</style>
<body>
<div id="log"></div>
<script>
'use strict';

test(function() {
  for (const property in gCSSProperties) {
    if (!isSupported(property)) {
      continue;
    }

    const setupFunction = gCSSProperties[property].setup;
    for (const animationType of gCSSProperties[property].types) {
      let typeObject;
      let animationTypeString;
      if (typeof animationType === 'string') {
        typeObject = types[animationType];
        animationTypeString = animationType;
      } else if (typeof animationType === 'object' &&
                 animationType.type && typeof animationType.type === 'string') {
        typeObject = types[animationType.type];
        animationTypeString = animationType.type;
      }

      // First, test that the animation type object has 'testAddition'.
      // We use test() function here so that we can continue the remainder tests
      // even if this test fails.
      test(t => {
        assert_own_property(typeObject, 'testAddition', animationTypeString +
                            ' should have testAddition property');
        assert_equals(typeof typeObject.testAddition, 'function',
                      'testAddition method should be a function');
      }, `${property} (type: ${animationTypeString}) has testAddition`
         + ' function');

      if (typeObject.testAddition &&
          typeof typeObject.testAddition === 'function') {
        typeObject.testAddition(property,
                                setupFunction,
                                animationType.options);
      }
    }
  }
}, "Setup");
</script>
