<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!-- webkit-test-runner [ enableCSSAnimationsAndCSSTransitionsBackedByWebAnimations=true ] -->

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <style>
    
    body {
      margin: 0;
    }
    
    #target {
      position: relative;
      top: 100px;
      left: 100px;
      width: 200px;
      height: 200px;
      background-color: red;
      -webkit-animation-name: anim1, anim2;
      -webkit-animation-duration: 2s, 2s;
      -webkit-animation-delay: 0s, 1s;
      -webkit-transition-property: top, width;
      -webkit-transition-duration: 2s, 2s;
      -webkit-transition-delay: 0s, 1s;
    }

    @-webkit-keyframes anim1 {
      from {
        left: 100px;
        opacity: 1.0;
      }
      to {
        left: 200px;
        opacity: 0.0;
      }
    }
         
    @-webkit-keyframes anim2 {
      from {
        height: 200px;
      }
      to {
        height: 50px;
      }
    }
         
   </style>
   <script type="text/javascript" charset="utf-8">
   
    function sample0() {
      var expected = 4;
      var current = internals.numberOfActiveAnimations();
      if (current == expected)
        document.getElementById('result0').innerHTML = "Number of active animations at 0s is (" + current + ") as expected";
      else
        document.getElementById('result0').innerHTML = "Number of active animations at 0s is (" + current + ") but was expecting (" + expected + ")";
    }
    
    function sample1() {
      var expected = 4;
      var current = internals.numberOfActiveAnimations();
      if (current == expected)
        document.getElementById('result1').innerHTML = "Number of active animations at 1s is (" + current + ") as expected";
      else
        document.getElementById('result1').innerHTML = "Number of active animations at 1s is (" + current + ") but was expecting (" + expected + ")";
      
      testRunner.notifyDone();
    }
    
    function startTest() {
      if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
        
        var target = document.getElementById('target');
        target.style.top = '200px';
        target.style.width = '100px';
        
        window.setTimeout(sample0, 0);
        window.setTimeout(sample1, 1100);
      }
    }
    
   </script>
</head>
<body onload="startTest()">
  <h1>Test for DRT numberOfActiveAnimations() API</h1>

  <div id="target">
  </div>
  
  <div id="result0">
  </div>
  
  <div id="result1">
  </div>

</body>
</html>
