<!DOCTYPE html>
<html>
<head>
  <title>Tests that unprefixed animation events are correctly fired.</title>
  <style>
    #box {
      position: relative;
      left: 100px;
      top: 10px;
      height: 100px;
      width: 100px;
      background-color: #999;
    }

    .animate {
      animation-duration: 0.3s;
      animation-name: anim;
    }

    @keyframes anim {
        from { left: 200px; }
        to   { left: 300px; }
    }
  </style>
  <script>
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    var startEventReceived = false;
    var endEventReceived = false;

    document.addEventListener('animationstart', function() {
      startEventReceived = true;
    }, false);

    document.addEventListener('animationiteration', function() {
      if (startEventReceived && endEventReceived) {
        document.getElementById('result').innerHTML = 'PASS: All events have been received as expected.';
        if (window.testRunner)
            testRunner.notifyDone();
      }
    }, false);

    document.addEventListener('animationend', function() {
      endEventReceived = true;
      document.getElementById('box').className = '';

      document.getElementById('box').offsetTop; // force style recalc

      // Launch again the animation to catch the animation iteration events this time.
      document.getElementById('box').style.animationIterationCount = "infinite";
      document.getElementById('box').className = 'animate';
    }, false);

    onload = function()
    {
      // Animation begins once we append the DOM node to the document.
      var boxNode = document.createElement('div');
      boxNode.id = 'box';
      boxNode.className = 'animate';
      document.body.appendChild(boxNode);
    }
  </script>
</head>
<body>
Tests that unprefixed animation events are correctly fired.
<pre id="result">FAIL: No animation events received</pre>
</body>
</html>
