<!DOCTYPE html>
<!--
 | Test case which ensures that when a transition "begins" on an element with
 | display set to none, when display is set to non-none, the transition does
 | not run (e.g. it appears immediately fully transitioned).
 | While the specification doesn't seem to say anything about this, it is
 | how Chrome and Firefox both work, and it is also intuitively in line with
 | the following behavior specified for CSS Animations:
 | From https://www.w3.org/TR/2013/WD-css3-animations-20130219/#animations,
 | "Setting the display property to ‘none’ will terminate any running animation
 |  applied to the element and its descendants. If an element has a display of
 |  ‘none’, updating display to a value other than ‘none’ will start all
 |  animations applied to the element by the ‘animation-name’ property, as well
 |  as all animations applied to descendants with display other than ‘none’."
 -->
<html>
<head>
  <style>
    #block {
      width: 100px;
      height: 100px;
      background-color: red;
      font-size: 30px;
      transition: background-color 1s, transform 2s linear;
    }
  </style>
</head>
<body>
  <div id="block"></div>

  <script>
    if (window.testRunner) {
      window.testRunner.waitUntilDone();
    }

    var blockDiv = document.getElementById('block');

    window.addEventListener('load', function() {
      if (window.testRunner) {
        // Do a layout upon the load event so that we setup our source styles
        // that we will be transitioning from.
        window.testRunner.DoNonMeasuredLayout();
      }

      blockDiv.style.display = "none";

      if (window.testRunner) {
        window.testRunner.DoNonMeasuredLayout();
      }

      blockDiv.style.backgroundColor = 'blue';
      blockDiv.style.transform = "translate(100px, 0)";

      if (window.testRunner) {
        // Run the transition a bit so that it is started but not completed.
        window.testRunner.DoNonMeasuredLayout();
        window.testRunner.AdvanceClockByMs(500);
        window.testRunner.DoNonMeasuredLayout();

        blockDiv.style.display = "block";

        // Measure that the transition should now appear to be fully completed.
        window.testRunner.notifyDone();
      }
    });
  </script>

</body>
</html>
