<html>
    <head>
        <script> 
            if (window.testRunner)
            {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();
            }
            
            function runTest()
            {
                document.body.removeChild(document.getElementById("test"));
                document.getElementById("result").innerHTML = "PASS";
                
                if (window.testRunner)
                    testRunner.notifyDone();
            }
        </script>
    </head>
    <body onload='runTest()'>
        <div id="result"></div>
        <ruby id="test">
            <fieldset/>
            <rt></rt>
            <blockquote></blockquote>
            <rt/><rt/>
        </ruby>
    </body>
</html>

