<html>
<head>
<script>
function print(str) {
    li = document.createElement('li');
    li.appendChild(document.createTextNode(str));
    document.getElementById('console').appendChild(li);
}
function printNumChildren(id)
{
    t = document.getElementById(id);
    if (t == null) {
        print("Can't find " + id + ".");
    } else {
        print(id + " has " + t.childNodes.length + " children.");
    }
}
function runTests() {
    if (window.layoutTestController)
        layoutTestController.dumpAsText();
    printNumChildren('noframes');
    printNumChildren('noscript');
    printNumChildren('noembed');
    printNumChildren('nolayer');
}
</script>
</head>
<body onload="runTests()">
<p>This tests that the elements noframes, nolayer, noscript and noembed are created as elements and put in the DOM tree.
The elements other than &lt;nolayer&gt; should not contain any children.
If the test is successful, the four messages below will list 0, 0, 0, and 1 child.</p>
<noframes id="noframes">This is noframes.</noframes>
<noscript id="noscript">This is noscript.</noscript>
<noembed id="noembed">This is noembed.</noembed>
<nolayer id="nolayer">This is nolayer.</nolayer>
<ul id="console">
</ul>
</body>
</html>
