(function() { test(function() { var event = new AnimationEvent(""); assert_true(event instanceof window.AnimationEvent); }, "the event is an instance of AnimationEvent"); test(function() { var event = new AnimationEvent(""); assert_true(event instanceof window.Event); }, "the event inherts from Event"); test(function() { assert_throws_js(TypeError, function() { new AnimationEvent(); }, 'First argument is required, so was expecting a TypeError.'); }, 'Missing type argument'); test(function() { var event = new AnimationEvent("test"); assert_equals(event.type, "test"); }, "type argument is string"); test(function() { var event = new AnimationEvent(null); assert_equals(event.type, "null"); }, "type argument is null"); test(function() { var event = new AnimationEvent(undefined); assert_equals(event.type, "undefined"); }, "event type set to undefined"); test(function() { var event = new AnimationEvent("test"); assert_equals(event.animationName, ""); }, "animationName has default value of empty string"); test(function() { var event = new AnimationEvent("test"); assert_equals(event.elapsedTime, 0.0); }, "elapsedTime has default value of 0.0"); test(function() { var event = new AnimationEvent("test"); assert_readonly(event, "animationName", "readonly attribute value"); }, "animationName is readonly"); test(function() { var event = new AnimationEvent("test"); assert_readonly(event, "elapsedTime", "readonly attribute value"); }, "elapsedTime is readonly"); test(function() { var event = new AnimationEvent("test", null); assert_equals(event.animationName, ""); assert_equals(event.elapsedTime, 0.0); }, "animationEventInit argument is null"); test(function() { var event = new AnimationEvent("test", undefined); assert_equals(event.animationName, ""); assert_equals(event.elapsedTime, 0.0); }, "animationEventInit argument is undefined"); test(function() { var event = new AnimationEvent("test", {}); assert_equals(event.animationName, ""); assert_equals(event.elapsedTime, 0.0); }, "animationEventInit argument is empty dictionary"); test(function() { var event = new AnimationEvent("test", {pseudoElement: "::testPseudo"}); assert_equals(event.pseudoElement, "::testPseudo"); }, "AnimationEvent.pseudoElement initialized from the dictionary"); test(function() { var event = new AnimationEvent("test", {animationName: "sample"}); assert_equals(event.animationName, "sample"); }, "animationName set to 'sample'"); test(function() { var event = new AnimationEvent("test", {animationName: undefined}); assert_equals(event.animationName, ""); }, "animationName set to undefined"); test(function() { var event = new AnimationEvent("test", {animationName: null}); assert_equals(event.animationName, "null"); }, "animationName set to null"); test(function() { var event = new AnimationEvent("test", {animationName: false}); assert_equals(event.animationName, "false"); }, "animationName set to false"); test(function() { var event = new AnimationEvent("test", {animationName: true}); assert_equals(event.animationName, "true"); }, "animationName set to true"); test(function() { var event = new AnimationEvent("test", {animationName: 0.5}); assert_equals(event.animationName, "0.5"); }, "animationName set to a number"); test(function() { var event = new AnimationEvent("test", {animationName: []}); assert_equals(event.animationName, ""); }, "animationName set to []"); test(function() { var event = new AnimationEvent("test", {animationName: [1, 2, 3]}); assert_equals(event.animationName, "1,2,3"); }, "animationName set to [1, 2, 3]"); test(function() { var event = new AnimationEvent("test", {animationName: {sample: 0.5}}); assert_equals(event.animationName, "[object Object]"); }, "animationName set to an object"); test(function() { var event = new AnimationEvent("test", {animationName: {valueOf: function () { return 'sample'; }}}); assert_equals(event.animationName, "[object Object]"); }, "animationName set to an object with a valueOf function"); test(function() { var event = new AnimationEvent("test", {elapsedTime: 0.5}); assert_equals(event.elapsedTime, 0.5); }, "elapsedTime set to 0.5"); test(function() { var event = new AnimationEvent("test", {elapsedTime: -0.5}); assert_equals(event.elapsedTime, -0.5); }, "elapsedTime set to -0.5"); test(function() { var event = new AnimationEvent("test", {elapsedTime: undefined}); assert_equals(event.elapsedTime, 0); }, "elapsedTime set to undefined"); test(function() { var event = new AnimationEvent("test", {elapsedTime: null}); assert_equals(event.elapsedTime, 0); }, "elapsedTime set to null"); test(function() { var event = new AnimationEvent("test", {elapsedTime: false}); assert_equals(event.elapsedTime, 0); }, "elapsedTime set to false"); test(function() { var event = new AnimationEvent("test", {elapsedTime: true}); assert_equals(event.elapsedTime, 1); }, "elapsedTime set to true"); test(function() { var event = new AnimationEvent("test", {elapsedTime: ""}); assert_equals(event.elapsedTime, 0); }, "elapsedTime set to ''"); test(function() { var event = new AnimationEvent("test", {elapsedTime: []}); assert_equals(event.elapsedTime, 0); }, "elapsedTime set to []"); test(function() { var event = new AnimationEvent("test", {elapsedTime: [0.5]}); assert_equals(event.elapsedTime, 0.5); }, "elapsedTime set to [0.5]"); test(function() { var event = new AnimationEvent( "test", {elapsedTime: { valueOf: function() { return 0.5; }}}); assert_equals(event.elapsedTime, 0.5); }, "elapsedTime set to an object with a valueOf function"); test(function() { assert_throws_js(TypeError, function() { new AnimationEvent("test", {elapsedTime: NaN}); }, 'elapsedTime cannot be NaN so was expecting a TypeError'); }, "elapsedTime cannot be set to NaN"); test(function() { assert_throws_js(TypeError, function() { new AnimationEvent("test", {elapsedTime: Infinity}); }, 'elapsedTime cannot be Infinity so was expecting a TypeError'); }, "elapsedTime cannot be set to Infinity"); test(function() { assert_throws_js(TypeError, function() { new AnimationEvent("test", {elapsedTime: -Infinity}); }, 'elapsedTime cannot be -Infinity so was expecting a TypeError'); }, "elapsedTime cannot be set to -Infinity"); test(function() { assert_throws_js(TypeError, function() { new AnimationEvent("test", {elapsedTime: "sample"}); }, 'elapsedTime cannot be a string so was expecting a TypeError'); }, "elapsedTime cannot be set to 'sample'"); test(function() { assert_throws_js(TypeError, function() { new AnimationEvent("test", {elapsedTime: [0.5, 1.0]}); }, 'elapsedTime cannot be a multi-element array so was expecting a TypeError'); }, "elapsedTime cannot be set to [0.5, 1.0]"); test(function() { assert_throws_js(TypeError, function() { new AnimationEvent("test", {elapsedTime: { sample: 0.5}}); }, 'elapsedTime cannot be an object so was expecting a TypeError'); }, "elapsedTime cannot be set to an object"); test(function() { var eventInit = {animationName: "sample", elapsedTime: 0.5}; var event = new AnimationEvent("test", eventInit); assert_equals(event.animationName, "sample"); assert_equals(event.elapsedTime, 0.5); }, "AnimationEventInit properties set value"); })();