<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->
<html>
<body>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script>
const animationEventHandlers = ["onanimationend", "onanimationiteration", "onanimationstart"];
test(function() {
    for (let animationEventHandler of animationEventHandlers) {
        assert_own_property(HTMLElement.prototype, animationEventHandler, animationEventHandler + " on HTMLElement.prototype");
        assert_idl_attribute(document.createElement("div"), animationEventHandler, "div." + animationEventHandler);
    }
}, "HTMLElement should have onanimation* event handlers.");

test(function() {
    for (let animationEventHandler of animationEventHandlers)
        assert_own_property(window, animationEventHandler, "window." + animationEventHandler);
}, "Window should have onanimation* event handlers.");

test(function() {
    const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
    for (let animationEventHandler of animationEventHandlers) {
        assert_own_property(SVGElement.prototype, animationEventHandler, animationEventHandler + " on SVGElement.prototype");
        assert_idl_attribute(svg, animationEventHandler, "svg." + animationEventHandler);
    }
}, "SVGElement should have onanimation* event handlers.");

test(function() {
    for (let animationEventHandler of animationEventHandlers) {
        assert_own_property(Document.prototype, animationEventHandler, animationEventHandler + " on Document.prototype");
        assert_idl_attribute(document, animationEventHandler, "document." + animationEventHandler);
    }
}, "Document should have onanimation* event handlers.");
</script>
</body>
</html>
