<html>
<head>
<script>
function debug(str) {
var c = document.getElementById('console')
c.appendChild(document.createTextNode(str + '\n'));
}
function print(message, color)
{
var paragraph = document.createElement("div");
paragraph.appendChild(document.createTextNode(message));
paragraph.style.fontFamily = "monospace";
if (color)
paragraph.style.color = color;
document.getElementById("console").appendChild(paragraph);
}
var element, range, nodeFilter, cssRule, cssPrimitiveValue, cssStyleDeclaration, event;
var originalNodeConstructor;
function shouldBe(a, b)
{
var evalA;
try {
evalA = eval(a);
} catch(e) {
evalA = e;
}
if (evalA == b)
print("PASS: " + a + " should be " + b + " and is.", "green");
else
print("FAIL: " + a + " should be " + b + " but instead is " + evalA, "red");
}
function runTests() {
if (window.testRunner)
testRunner.dumpAsText();
var src = '<root xmlns:foo="http://www.example.com" attr="test2" foo:attr="test" />';
var doc = (new DOMParser()).parseFromString(src, 'text/xml')
docElem = doc.documentElement;
// Test getAttribute
shouldBe("docElem.getAttribute('foo:attr')", "test");
shouldBe("docElem.getAttribute('attr')", "test2");
shouldBe("docElem.getAttribute('bar:attr')", null)
// Test hasAttribute
shouldBe("docElem.hasAttribute('foo:attr')", true);
shouldBe("docElem.hasAttribute('attr')", true);
shouldBe("docElem.hasAttribute('bar:attr')", false);
// Test getAttributeNode
shouldBe("docElem.getAttributeNode('foo:attr').value", "test");
shouldBe("docElem.getAttributeNode('bar:attr')", null);
// Test setAttribute
shouldBe("docElem.attributes.length", 3);
docElem.setAttribute("foo:attr", "new");
shouldBe("docElem.attributes.length", 3);
shouldBe("docElem.getAttribute('foo:attr')", "new");
docElem.setAttribute("bar:attr", "new2");
shouldBe("docElem.attributes.length", 4);
shouldBe("docElem.getAttribute('bar:attr')", "new2");
shouldBe("docElem.getAttributeNode('bar:attr').prefix", null);
shouldBe("docElem.getAttributeNode('bar:attr').localName", "bar:attr");
// Test removeAttribute
docElem.removeAttribute('foo:attr');
shouldBe("docElem.getAttribute('foo:attr')", null);
shouldBe("docElem.attributes.length", 3);
docElem.removeAttribute('bar:attr');
shouldBe("docElem.getAttribute('bar:attr')", null);
shouldBe("docElem.attributes.length", 2);
docElem.removeAttribute('attr');
shouldBe("docElem.getAttribute('attr')", null);
shouldBe("docElem.attributes.length", 1);
// Re-parse the document so we can test NamedNodeMap
doc = (new DOMParser()).parseFromString(src, 'text/xml');
attributes = doc.documentElement.attributes;
// Test getNamedItem
shouldBe("attributes.getNamedItem('foo:attr').value", "test");
shouldBe("attributes.getNamedItem('attr').value", "test2");
shouldBe("attributes.getNamedItem('bar:attr')", null);
// Test removeNamedItem
shouldBe("attributes.length", 3);
attributes.removeNamedItem('foo:attr');
shouldBe("attributes.getNamedItem('foo:attr')", null);
shouldBe("attributes.length", 2);
attributes.removeNamedItem('attr');
shouldBe("attributes.getNamedItem('attr')", null);
shouldBe("attributes.length", 1);
}
</script>
</head>
<body onload="runTests();">
<pre id="console">
</pre>
</body>
</html>