<!DOCTYPE html>
<html>
  <script>
    function check_bbox(bbox, test_name)
    {
        var result_str = "";

        if (bbox.x == 0 && bbox.y == 50 && bbox.width == 100 && bbox.height == 0) {                           
            result_str += "Passed";
        } else {
            result_str += test_name + ": Failed";
            result_str += "("+bbox.x+","+bbox.y+":"+bbox.width + "," + bbox.height+")";
        }
        
        var p_result = document.querySelector("#result");
        p_result.appendChild(document.createTextNode(result_str + "; "));
    }
  
    function run()
    {
        if (window.testRunner)
            testRunner.dumpAsText();
        
        var svg = document.querySelector("svg");        
        var ellipse = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");
        ellipse.setAttribute("cx", "50");
        ellipse.setAttribute("cy", "50");
        ellipse.setAttribute("rx", "50");
        ellipse.setAttribute("ry", "0");
        ellipse.setAttribute("height", "0");
        svg.appendChild(ellipse);
        check_bbox(ellipse.getBBox(), "zero height ellipse");
        
        ellipse.setAttribute("stroke-width", "10");
        ellipse.setAttribute("stroke", "red");
        check_bbox(ellipse.getBBox(), "with stroke");
 
        ellipse.setAttribute("vector-effect", "non-scaling-stroke");
        check_bbox(ellipse.getBBox(), "with non-scaling-stroke");
    }
  </script>

<body onload="run()">
<p>Bug <a href="https://bugs.webkit.org/show_bug.cgi?id=93290">93290</a>: getBBox() returns (0,0) incorrectly when width or height is zero.</p>
<p>For this test to pass, you should see 'Passed' three times below.</a>
<p id="result"></p>
<svg xmlns="http://www.w3.org/2000/svg">
</svg>
</body>
</html>
