<html>
<head>
  <title>Testing inherit transitions</title>
  <style type="text/css" media="screen">
    .box {
      position: relative;
      left: 0;
      height: 100px;
      width: 100px;
      margin: 10px;
      background-color: blue;
    }
    .transition {
      -webkit-transition-property: left;
      -webkit-transition-duration: 2s;
    }
    #box4 {
      -webkit-transition-property: inherit;
    }
  </style>
  <script type="text/javascript" charset="utf-8">
    if (window.layoutTestController) {
        layoutTestController.dumpAsText();
        layoutTestController.waitUntilDone();
    }

    var kExpecteds = [
      'all', /* box1 */
      'left', /* box2 */
      'left', /* box3 */
      'left', /* box4 */ /* inherits from box3 */
      'left', /* box5 */
      'all', /* box6 */ /* does NOT inherit */
    ];
    
    function testProperties()
    {
      var result = '';

      var boxes = document.body.getElementsByClassName('box');
      for (var i = 0; i < boxes.length; ++i) {
        var curBox = boxes[i];
        var curProp = window.getComputedStyle(curBox).webkitTransitionProperty;
        if (curProp == kExpecteds[i])
          result += "PASS -- ";
        else
          result += "FAIL -- ";
        result += "Box " + (i+1) + " computed transition property: " + curProp + " expected: " + kExpecteds[i] + "<br>";
      }

      document.body.removeChild(document.getElementById('container'));
      document.getElementById('result').innerHTML = result;
      if (window.layoutTestController)
          layoutTestController.notifyDone();

    }

    window.addEventListener('load', testProperties, false);
  </script>
</head>
<body>

<div id="container">
  <div id="box1" class="box"></div>
  <div id="box2" class="box transition"></div>
  <div id="box3" class="box transition">
    <div id="box4" class="box"></div>
  </div>
  <div id="box5" class="box transition">
    <div id="box6" class="box"></div>
  </div>
</div>

<div id="result"></div>

</body>
</html>