<html> 
<head>
<title>Unfilled Properties Test</title> 
<style type="text/css" media="screen">
#box {
    height: 50px;
    width: 200px;
    background-color: blue;

    transition-property: opacity, left, opacity, top, width, opacity, height, opacity;
    transition-duration: 1s,2s;
    transition-delay: 3s,4s,5s;
    transition-timing-function: linear;
    
    animation-name: a, b, c, d, e;
    animation-duration: 10s, 20s;
    animation-delay: 1s;
    animation-direction: normal, alternate, reverse, alternate-reverse;
    animation-fill-mode: forwards, backwards;
    animation-play-state: running, paused, running;
    animation-iteration-count: 1, 2, 3;
    animation-timing-function: linear;
}
@keyframes a { }
@keyframes b { }
@keyframes c { }
@keyframes d { }
@keyframes e { }
</style>
  <script type="text/javascript" charset="utf-8">
    if (window.testRunner)
        testRunner.dumpAsText();
  
    const kExpectedResults = [
      { 'property': 'transitionDuration', 'value': '1s, 2s' },
      { 'property': 'transitionProperty', 'value': 'opacity, left, opacity, top, width, opacity, height, opacity' },
      { 'property': 'transitionDelay',    'value': '3s, 4s, 5s' },
      { 'property': 'transitionTimingFunction', 'value': 'linear' },
      { 'property': 'animationName',      'value': 'a, b, c, d, e' },
      { 'property': 'animationDuration',  'value': '10s, 20s' },
      { 'property': 'animationDelay',     'value': '1s' },
      { 'property': 'animationDirection', 'value': 'normal, alternate, reverse, alternate-reverse' },
      { 'property': 'animationFillMode',  'value': 'forwards, backwards' },
      { 'property': 'animationPlayState', 'value': 'running, paused, running' },
      { 'property': 'animationIterationCount', 'value': '1, 2, 3' },
      { 'property': 'animationTimingFunction', 'value': 'linear' }
    ];
    
    function start()
    {
        var box = document.getElementById('box');
        var resultsString = "";
        var boxStyle = window.getComputedStyle(box);
        
        kExpectedResults.forEach(function(curItem) {
          var computedValue = boxStyle[curItem.property];
          var expectedValue = curItem.value;
          if (computedValue == expectedValue)
            resultsString += "Testing " + curItem.property + ": PASS" + "<br>";
          else
            resultsString += "Testing " + curItem.property + " expected <code>" + curItem.value + "</code> got <code>" + computedValue + "</code>: FAIL" + "<br>";
        });

        var results = document.getElementById('result');
        results.innerHTML = resultsString;
    }
    
    window.addEventListener('load', start, false);
  </script>
</head> 
<body>
<div id="box">
</div>
<div id="result">
</div>
</body>
</html>
