<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>bug 15919</title>
    </head>
    <body>
        <p>Test for <a href="http://bugs.webkit.org/show_bug.cgi?id=15919">bug 15919</a>:
        XSLTProcessor.transformToFragment creates an extra not defined TEXT_NODE at the end.</p>
        <div id="log"></div>

        <script type="text/javascript">

            if (window.layoutTestController)
                layoutTestController.dumpAsText();

            function log(message) {
                var newChild = document.createElement("div");
                newChild.appendChild(document.createTextNode(message));
                document.getElementById("log").appendChild(newChild);
            }

            function assertEquals(oExpected, oExpr, sWarning) {
                oActual = eval(oExpr);
                if(oExpected !== oActual)
                    log('FAIL: Expected "'+ oExpected+'" was: "'+oActual+'" - '+sWarning);
                else
                    log('PASS: ' + oExpr + ' ' + sWarning);
            }

            var oProc = new XSLTProcessor();

            var oStylesheet = new DOMParser().parseFromString(
            '<?xml version="1.0" encoding="UTF-8"?>' +
            '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">'+
                '<xsl:output method="xml" omit-xml-declaration="yes" />'+
                '<xsl:param name="text" select="\'default\'" />'+
                '<xsl:template match="/">'+
                    '<div><xsl:value-of select="$text" /></div>'+
                    '<br />'+
                '</xsl:template>'+
            '</xsl:stylesheet>', 'text/xml');

            oProc.importStylesheet(oStylesheet);
            var oResult = new DOMParser().parseFromString('<root />', 'text/xml');

            oProc.setParameter('', 'text', 'Hello World!');

            oResult = oProc.transformToFragment(oStylesheet, oResult);

            assertEquals(11, "oResult.nodeType", 'should of type DOCUMENT_FRAGMENT_NODE(11)')
            assertEquals('Hello World!', "oProc.getParameter(null, 'text')", 'getParameter should return the correct value');
            assertEquals('div', "oResult.firstChild.nodeName", 'can have multiple children, firstchild should be the div');
            assertEquals('br', "oResult.lastChild.nodeName", 'can have multiple children, lastchild should be the br');
            assertEquals('Hello World!', "oResult.firstChild.textContent || oResult.firstChild.text", 'textContent should be set to parameter value');
            log("Done");
        </script>
    </body>
</html>
