<!DOCTYPE html>
<p>Test of Range.createContextualFragment() with in-scope namespace prefixes on attributes. If the test succeeds you will see the word "PASS" below.</p>
<p id="result"></p>
<script type="text/javascript">
function onIframeLoad() {
if (window.testRunner)
testRunner.dumpAsText();
var result = document.getElementById("result");
result.textContent = "FAIL";
var iframe = document.getElementById("iframe"),
doc = iframe.contentDocument,
range = doc.createRange(),
docFragment;
var defs1 = doc.getElementById("defs1");
range.setStart(defs1, 0);
docFragment = range.createContextualFragment("<linearGradient id='gradient1'/>" +
"<linearGradient id='gradient2' XL:href='#gradient1' href='otherHref'/>");
var gradient2 = docFragment.lastChild;
if (gradient2.namespaceURI != "http://www.w3.org/2000/svg") {
result.textContent += " - #gradient2 has the wrong namespace URI";
return;
}
if (gradient2.getAttributeNS(defs1.lookupNamespaceURI("XL"), "href") != "#gradient1") {
result.textContent += " - wrong XL:href attribute value on #gradient2";
return;
}
defs1.appendChild(docFragment);
if (gradient2.lookupNamespaceURI("XL") != defs1.lookupNamespaceURI("XL")) {
result.textContent += " - #gradient2 returned the incorrect namespace URI for prefix 'XL'";
return;
}
gradient2 = null;
defs1 = null;
var defs2 = doc.getElementById("defs2");
range.setStart(defs2, 0);
docFragment = range.createContextualFragment("<linearGradient id='gradient3'/>" +
"<linearGradient id='gradient4' xLink:href='#gradient3' href='otherHref'/>");
defs2.appendChild(docFragment);
var gradient4 = defs2.lastChild;
if (gradient4.namespaceURI != "http://www.w3.org/2000/svg") {
result.textContent += " - #gradient4 has the wrong namespace URI";
return;
}
if (gradient4.getAttributeNS(defs2.lookupNamespaceURI("xLink"), "href") != "#gradient3") {
result.textContent += " - wrong xLink:href attribute value on #gradient2";
return;
}
if (gradient4.lookupNamespaceURI("xLink") != defs2.lookupNamespaceURI("xLink")) {
result.textContent += " - #gradient2 returned the incorrect namespace URI for prefix 'xLink'";
return;
}
// Check that Range.createContextualFragment() fails if an out-of-scope namespace prefix is used.
var exception;
try {
range.createContextualFragment("<linearGradient id='gradient5' XL:href='#gradient3'/>");
} catch (e) {
exception = e;
}
if (exception == null) {
result.textContent += " - Range.createContextualFragment() did not raise an exception when attempting to use an out-of-scope namespace prefix";
return;
}
if (exception.message != `Failed to execute 'createContextualFragment' on 'Range': Namespace prefix XL for attribute #gradient3 is not declared.`) {
result.textContent += " - wrong exception thrown: " + exception.message;
return;
}
if (exception.code != 14) {
result.textContent += " - wrong exception code: " + exception.code;
return;
}
result.textContent = "PASS";
}
</script>
<iframe id="iframe" src="resources/svg-document-ns1.svg" onload="onIframeLoad()"></iframe>