<html>
    <style type="text/css">
        .parentStyle { position: absolute; }
        .parentStyle:first-letter { position: inherit; }
        .positionedChildStyle { position: absolute; }
        .divChildStyle:first-letter { float: left; }
        .divChildStyle:after { float: inherit; content: counter(blah); }
    </style>
    PASS, if the script does not cause a crash or ASSERT failure
    <script>
        function runTest() {
            parentDiv = document.createElement('div');
            parentDiv.setAttribute('class', 'parentStyle');
            document.documentElement.appendChild(parentDiv);
            positionedDiv = document.createElement('div');
            positionedDiv.setAttribute('class', 'positionedChildStyle');
            parentDiv.appendChild(positionedDiv);
            divChild = document.createElement('div');
            divChild.setAttribute('class', 'divChildStyle');
            parentDiv.appendChild(divChild);
            if (window.testRunner)
                testRunner.dumpAsText();
        }
        window.onload = runTest;
    </script>
</html>
