<!doctype html>
<meta charset=utf-8>
<title>AnimationNode IDL tests</title>
<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<link rel="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<body>
<div id="log"></div>
<div id="target"></div>
<script type="text/plain" id="untested-IDL">
interface AnimationPlayer {
};

interface AnimationTiming {
};

interface ComputedTimingProperties {
};

interface AnimationGroup {
};
</script>
<script type="text/plain" id="AnimationNode-IDL">
interface AnimationNode {
    // Timing
    readonly attribute AnimationTiming          timing;
    readonly attribute ComputedTimingProperties computedTiming;

    // Timing hierarchy
    readonly attribute AnimationGroup?          parent;
    readonly attribute AnimationNode?           previousSibling;
    readonly attribute AnimationNode?           nextSibling;
    void before (AnimationNode... nodes);
    void after (AnimationNode... nodes);
    void replace (AnimationNode... nodes);
    void remove ();
};
</script>
<script>
'use strict';

var target = document.getElementById('target');
var node = new Animation(target, [], 5);

var idlArray = new IdlArray();
idlArray.add_untested_idls(document.getElementById('untested-IDL').textContent);
idlArray.add_idls(document.getElementById('AnimationNode-IDL').textContent);
idlArray.add_objects( { AnimationNode: ['node'] } );
idlArray.test();
</script>
</body>
