<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>CSS Test: Run in - dynamically removed inline should allow running in</title>
  <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/>
  <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" />
  <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/>
  <link rel="match" href="run-in-basic-ref.xht"/>
  <meta name="flags" content="dom" />
  <meta name="assert"
        content="Tests that run-ins run in if an inline is dynamically removed
                 from between them and the block."/>
  <style type="text/css"><![CDATA[
    div { display: block; }
    .run-in { display: run-in; font-weight: bold }
    #target { border: 2px solid black; }
  ]]></style>
  <script type="text/javascript"><![CDATA[
    function flushLayout(elt) {
      elt.offsetWidth; /* Just undefined on non-elements, but that's ok */
      for (var i = 0; i < elt.childNodes.length; ++i) {
        flushLayout(elt.childNodes[i]);
      }
    }
    window.onload = function() {
      flushLayout(document.documentElement);
      var r = document.getElementById("r");
      r.parentNode.removeChild(r);
    }
  ]]></script>
 </head>
 <body>
   <div class="run-in">Run-in header</div>
   <span id="r">Some text.</span>
   <div id="target">Start of block.  The run-in header should be inside the
    border around this block and there should be no space between the word
    "header" and the word "Start".</div>
 </body>
</html>
