<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<svg onload="init()" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg">
<foreignObject width="100%" height="100%">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <div id="log">
            This tests assures dynamic SVGDocument creation via DOMParser interface works.
        </div>
    </html>
</foreignObject>

<script>
<![CDATA[
if (window.testRunner) {
    testRunner.dumpAsText();
}

function log(message) {
    var logDiv = document.getElementById('log');
    var newDiv = document.createElementNS("http://www.w3.org/1999/xhtml",'div');
    newDiv.appendChild(document.createTextNode(message));
    logDiv.appendChild(newDiv);
}

function init() { 
    // Prepare SVG Content as string.
    var documentString = "<svg xmlns='http://www.w3.org/2000/svg' width='400' height='400'>" +
                         "<g transform='translate(-50, -50)'>" +
                         "<path id='path' onclick='mouseHandler(evt)' fill='#FF0000' stroke='#00C000' " +
                         "d='M 250 130 C 185 130 150 80 150 80 S 115 25 50 25 m 0 105 c 65 0 100 -50 100 -50 s 35 -55 100 -55'/>" +
                         "</g></svg>";

    // Use DOMParser interface to create a SVGDocument datastructure from SVG content string
    var parser = new DOMParser();
    var svgDocument = parser.parseFromString(documentString, "image/svg+xml");

    log("DOMParser.parseFromString returned: " + svgDocument + " should be: [object XMLDocument]");

    // Try some operations on the new document 
    log("SVGDocument's rootElement: " + svgDocument.rootElement + " should be: [object SVGSVGElement]");
    log("SVGDocument's rootElement width: " + svgDocument.rootElement.width.baseVal.value + " should be: 400");
    log("SVGDocument's rootElement height: " + svgDocument.rootElement.height.baseVal.value + " should be: 400");
    log("SVGDocument's rootElement first child: " + svgDocument.rootElement.firstChild + " should be: [object SVGGElement]");

    // Use XMLSerializer interface to return a textual presentation of the newly created document
    var serializer = new XMLSerializer();
    var svgDocumentString = serializer.serializeToString(svgDocument);

    log("XMLSerializer.serializeToString returned: " + svgDocumentString);

    // Import all children of the new document's root element in our current document
    var importedNode = document.importNode(svgDocument.rootElement.firstChild, true);
    log("Imported the SVGGElement into our document: " + importedNode + " should be: [object SVGGElement]");

    document.getElementById("content").appendChild(importedNode);
}
]]>
</script>
<g id="content" transform="translate(250, 250) rotate(45)">
</g>
</svg>
