<html>
<head>
<script>
function print(message, color) 
{
    var paragraph = document.createElement("div");
    paragraph.appendChild(document.createTextNode(message));
    paragraph.style.fontFamily = "monospace";
    if (color)
        paragraph.style.color = color;
    document.getElementById("console").appendChild(paragraph);
}

function shouldBe(a, b)
{
    var evalA;
    try {
        evalA = eval(a);
    } catch(e) {
        evalA = e;
    }
    
    if (evalA == b)
        print("PASS: " + a + " should be " + b + " and is.", "green");
    else
        print("FAIL: " + a + " should be " + b + " but instead is " + evalA + ".", "red");
}

function test() 
{
    if (window.layoutTestController)
        layoutTestController.dumpAsText();

    shouldBe("document.getElementById('tr1').parentNode.childNodes.length == 5", true);    
    shouldBe("document.getElementById('tr1').rowIndex == 0", true);
    shouldBe("document.getElementById('tr2').rowIndex == 1", true);
    document.getElementById('tr2').parentNode.deleteRow(1);
    shouldBe("document.getElementById('tr3').rowIndex == 1", true);
}
</script>
</head>

<body onload="test();" style="background: green; color:white">

<p>This page tests whether or not comment nodes disrupt the row index of
rows in a table.</p>

<table><tr id="tr1"><td>Row One</tr><!-- COMMENT TO TRY TO MESS STUFF UP --><tr id="tr2"><td>Row Two</tr><!-- COMMENT TO TRY TO MESS STUFF UP --><tr id="tr3"><td>Row Three<!-- COMMENT TO TRY TO MESS STUFF UP --></table>

<hr>

<div id='console' style="background-color:white; border:2px solid black"></div>

</body>
</html>
