<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" onload="init()">
  <script type="text/javascript">
  <![CDATA[
    function init()
    {
        if (window.layoutTestController)
            layoutTestController.dumpAsText();
        var g = document.createElementNS("http://www.w3.org/2000/svg", "g");
        document.rootElement.appendChild(g);
        var txt = document.createElementNS("http://www.w3.org/2000/svg", "text");
        txt.setAttribute("x", "50");
        txt.setAttribute("y", "50");
        var textNode = document.createTextNode("Failed");
        txt.appendChild(textNode);
        g.appendChild(txt);
        if (g.getBBox().width > 0 && g.getBBox().height > 0) {
            if (txt.getBBox().width > 0 && txt.getBBox().height > 0) {
                var img = document.createElementNS("http://www.w3.org/2000/svg", "image");
                img.setAttribute("x", "0");
                img.setAttribute("y", "0");
                img.setAttribute("width", "100");
                img.setAttribute("height", "100");
                img.setAttribute("visibility", "hidden");
                img.setAttributeNS("http://www.w3.org/1999/xlink", "href", "resources/magnify.png");
                g.appendChild(img);
                if (img.getBBox().width > 0 && img.getBBox().height > 0) {
                    var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
                    rect.setAttribute("x", "0");
                    rect.setAttribute("y", "0");
                    rect.setAttribute("width", "100");
                    rect.setAttribute("height", "100");
                    rect.setAttribute("visibility", "hidden");
                    g.appendChild(rect);
                    if (rect.getBBox().width > 0 && rect.getBBox().height > 0) {
                    textNode.data = "Passed";
                    }
                }
            }
        }
    }
  ]]>
  </script>
</svg>
