<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Keyframes test</title>
  <style type="text/css" media="screen">
    #box {
        position: absolute;
        left: 0;
        top: 100px;
        height: 100px;
        width: 100px;
        background-color: blue;
        animation-duration: 2s;
        animation-timing-function: linear;
        animation-name: anim;
        animation-iteration-count: 0.3;
    }
    @keyframes anim {
        from { left: 50px; }
        20%  { left: 100px; }
        40%  { left: 100px; }
        60%  { left: 200px; }
        80%  { left: 200px; }
        to   { left: 300px; }
    }
    </style>
    <script src="resources/animation-test-helpers.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" charset="utf-8">

    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }
    
    document.addEventListener("animationend", function(event){
        var result;
        if (event.elapsedTime > 0 && event.elapsedTime < 1)
            result = "PASS end of animation";
        else
            result = "FAIL end of animation";
        document.getElementById('result').innerHTML = result;

        if (window.testRunner)
            testRunner.notifyDone();
    }, false);
    
  </script>
</head>
<body>
This test performs an animation of the left property with a non integer iteration count.
<div id="box">
</div>
<div id="result">
</div>
</body>
</html>
